diff --git a/.release-it.json b/.release-it.json index 444b9b863..f5269fec3 100644 --- a/.release-it.json +++ b/.release-it.json @@ -1,7 +1,8 @@ { "git": { "tagName": "v${version}", - "requireUpstream": false + "requireUpstream": false, + "requireCleanWorkingDir": false }, "github": { "release": true diff --git a/docs/main.bundle.js b/docs/main.bundle.js index 4abf2d2f7..44621eae4 100644 --- a/docs/main.bundle.js +++ b/docs/main.bundle.js @@ -28,5 +28,5 @@ object-assign * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -Object.defineProperty(t,"__esModule",{value:!0});var n=null,r=!1,i=3,a=-1,s=-1,o=!1,l=!1;function u(){if(!o){var e=n.expirationTime;l?k():l=!0,w(f,e)}}function c(){var e=n,t=n.next;if(n===t)n=null;else{var r=n.previous;n=r.next=t,t.previous=r}e.next=e.previous=null,r=e.callback,t=e.expirationTime,e=e.priorityLevel;var a=i,o=s;i=e,s=t;try{var l=r()}finally{i=a,s=o}if("function"==typeof l)if(l={callback:l,priorityLevel:e,expirationTime:t,next:null,previous:null},null===n)n=l.next=l.previous=l;else{r=null,e=n;do{if(e.expirationTime>=t){r=e;break}e=e.next}while(e!==n);null===r?r=n:r===n&&(n=l,u()),(t=r.previous).next=r.previous=l,l.next=r,l.previous=t}}function h(){if(-1===a&&null!==n&&1===n.priorityLevel){o=!0;try{do{c()}while(null!==n&&1===n.priorityLevel)}finally{o=!1,null!==n?u():l=!1}}}function f(e){o=!0;var i=r;r=e;try{if(e)for(;null!==n;){var a=t.unstable_now();if(!(n.expirationTime<=a))break;do{c()}while(null!==n&&n.expirationTime<=a)}else if(null!==n)do{c()}while(null!==n&&!S())}finally{o=!1,r=i,null!==n?u():l=!1,h()}}var d,p,g=Date,m="function"==typeof setTimeout?setTimeout:void 0,_="function"==typeof clearTimeout?clearTimeout:void 0,v="function"==typeof requestAnimationFrame?requestAnimationFrame:void 0,y="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;function b(e){d=v(function(t){_(p),e(t)}),p=m(function(){y(d),e(t.unstable_now())},100)}if("object"==typeof performance&&"function"==typeof performance.now){var x=performance;t.unstable_now=function(){return x.now()}}else t.unstable_now=function(){return g.now()};var w,k,S,E=null;if("undefined"!=typeof window?E=window:void 0!==e&&(E=e),E&&E._schedMock){var C=E._schedMock;w=C[0],k=C[1],S=C[2],t.unstable_now=C[3]}else if("undefined"==typeof window||"function"!=typeof MessageChannel){var T=null,P=function(e){if(null!==T)try{T(e)}finally{T=null}};w=function(e){null!==T?setTimeout(w,0,e):(T=e,setTimeout(P,0,!1))},k=function(){T=null},S=function(){return!1}}else{"undefined"!=typeof console&&("function"!=typeof v&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof y&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));var R=null,A=!1,O=-1,M=!1,F=!1,N=0,U=33,L=33;S=function(){return N<=t.unstable_now()};var j=new MessageChannel,I=j.port2;j.port1.onmessage=function(){A=!1;var e=R,n=O;R=null,O=-1;var r=t.unstable_now(),i=!1;if(0>=N-r){if(!(-1!==n&&n<=r))return M||(M=!0,b(z)),R=e,void(O=n);i=!0}if(null!==e){F=!0;try{e(i)}finally{F=!1}}};var z=function(e){if(null!==R){b(z);var t=e-N+L;tt&&(t=8),L=tt?I.postMessage(void 0):M||(M=!0,b(z))},k=function(){R=null,A=!1,O=-1}}t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=i,s=a;i=e,a=t.unstable_now();try{return n()}finally{i=r,a=s,h()}},t.unstable_next=function(e){switch(i){case 1:case 2:case 3:var n=3;break;default:n=i}var r=i,s=a;i=n,a=t.unstable_now();try{return e()}finally{i=r,a=s,h()}},t.unstable_scheduleCallback=function(e,r){var s=-1!==a?a:t.unstable_now();if("object"==typeof r&&null!==r&&"number"==typeof r.timeout)r=s+r.timeout;else switch(i){case 1:r=s+-1;break;case 2:r=s+250;break;case 5:r=s+1073741823;break;case 4:r=s+1e4;break;default:r=s+5e3}if(e={callback:e,priorityLevel:i,expirationTime:r,next:null,previous:null},null===n)n=e.next=e.previous=e,u();else{s=null;var o=n;do{if(o.expirationTime>r){s=o;break}o=o.next}while(o!==n);null===s?s=n:s===n&&(n=e,u()),(r=s.previous).next=s.previous=e,e.next=s,e.previous=r}return e},t.unstable_cancelCallback=function(e){var t=e.next;if(null!==t){if(t===e)n=null;else{e===n&&(n=t);var r=e.previous;r.next=t,t.previous=r}e.next=e.previous=null}},t.unstable_wrapCallback=function(e){var n=i;return function(){var r=i,s=a;i=n,a=t.unstable_now();try{return e.apply(this,arguments)}finally{i=r,a=s,h()}}},t.unstable_getCurrentPriorityLevel=function(){return i},t.unstable_shouldYield=function(){return!r&&(null!==n&&n.expirationTime'+e.innerHTML+"":null},t.prototype.toSvgBase64=function(){var e=this.toSvgXml();return e?"data:image/svg+xml;base64,"+btoa(e):null},t.prototype.clearListner=function(){this.el.removeEventListener("mousedown",this.mouseDown),this.el.removeEventListener("touchstart",this.touchStart)},t.prototype.drawingStart=function(){return this.appendTo(this.el),this.el.addEventListener("mousedown",this.mouseDown),this.el.addEventListener("touchstart",this.touchStart),this},t.prototype.move=function(e){var t=this,n=e.x,r=e.y,i=this.el.getBoundingClientRect(),a=function(e,t){return new s.a.Vector(e-i.left,t-i.top)};if(this.current.set(n,r),this.line){var o=a(n,r);this.line.vertices.push(o)}else{var l=a(this.current.x,this.current.y),u=a(n,r);this.line=this.makeCurve([l,u],!0),this.line.noFill().stroke=this.penColor,this.line.linewidth=this.penWidth,this.line.cap=this.strokeCap,this.line.join=this.strokeLineJoin,this.line.vertices.map(function(e){t.line&&e.addSelf(t.line.translation)}),this.line.translation.clear()}},t.prototype.mouseMove=function(e){this.move({x:e.clientX,y:e.clientY})},t.prototype.mouseUp=function(e){this.el.removeEventListener("mousemove",this.mouseMove),this.el.removeEventListener("mouseup",this.mouseUp)},t.prototype.mouseDown=function(e){this.current.set(e.clientX,e.clientY),this.line=null,this.el.addEventListener("mousemove",this.mouseMove),this.el.addEventListener("mouseup",this.mouseUp)},t.prototype.touchMove=function(e){e.preventDefault();var t=e.touches[0];return this.move({x:t.pageX,y:t.pageY}),!1},t.prototype.touchEnd=function(e){return e.preventDefault(),this.el.removeEventListener("touchmove",this.touchMove),this.el.removeEventListener("touchend",this.touchEnd),!1},t.prototype.touchStart=function(e){e.preventDefault();var t=e.touches[0];return this.current.set(t.pageX,t.pageY),this.line=null,this.el.addEventListener("touchmove",this.touchMove),this.el.addEventListener("touchend",this.touchEnd),!1},t}(s.a),f=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),d=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return s},p=function(){for(var e=[],t=0;t0&&(r+=n.distanceTo(e)),n=e}),p(e,[r])):e},[]),n=t.reduce(function(e,t){return e+t},0),r=0,i=function(){for(var i,a,s,o=[],l=0;l=t){r=e;break}e=e.next}while(e!==n);null===r?r=n:r===n&&(n=l,u()),(t=r.previous).next=r.previous=l,l.next=r,l.previous=t}}function h(){if(-1===a&&null!==n&&1===n.priorityLevel){o=!0;try{do{c()}while(null!==n&&1===n.priorityLevel)}finally{o=!1,null!==n?u():l=!1}}}function f(e){o=!0;var i=r;r=e;try{if(e)for(;null!==n;){var a=t.unstable_now();if(!(n.expirationTime<=a))break;do{c()}while(null!==n&&n.expirationTime<=a)}else if(null!==n)do{c()}while(null!==n&&!S())}finally{o=!1,r=i,null!==n?u():l=!1,h()}}var d,p,g=Date,m="function"==typeof setTimeout?setTimeout:void 0,_="function"==typeof clearTimeout?clearTimeout:void 0,v="function"==typeof requestAnimationFrame?requestAnimationFrame:void 0,y="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;function b(e){d=v(function(t){_(p),e(t)}),p=m(function(){y(d),e(t.unstable_now())},100)}if("object"==typeof performance&&"function"==typeof performance.now){var x=performance;t.unstable_now=function(){return x.now()}}else t.unstable_now=function(){return g.now()};var w,k,S,E=null;if("undefined"!=typeof window?E=window:void 0!==e&&(E=e),E&&E._schedMock){var C=E._schedMock;w=C[0],k=C[1],S=C[2],t.unstable_now=C[3]}else if("undefined"==typeof window||"function"!=typeof MessageChannel){var T=null,P=function(e){if(null!==T)try{T(e)}finally{T=null}};w=function(e){null!==T?setTimeout(w,0,e):(T=e,setTimeout(P,0,!1))},k=function(){T=null},S=function(){return!1}}else{"undefined"!=typeof console&&("function"!=typeof v&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof y&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));var R=null,A=!1,O=-1,M=!1,F=!1,N=0,U=33,L=33;S=function(){return N<=t.unstable_now()};var j=new MessageChannel,I=j.port2;j.port1.onmessage=function(){A=!1;var e=R,n=O;R=null,O=-1;var r=t.unstable_now(),i=!1;if(0>=N-r){if(!(-1!==n&&n<=r))return M||(M=!0,b(z)),R=e,void(O=n);i=!0}if(null!==e){F=!0;try{e(i)}finally{F=!1}}};var z=function(e){if(null!==R){b(z);var t=e-N+L;tt&&(t=8),L=tt?I.postMessage(void 0):M||(M=!0,b(z))},k=function(){R=null,A=!1,O=-1}}t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=i,s=a;i=e,a=t.unstable_now();try{return n()}finally{i=r,a=s,h()}},t.unstable_next=function(e){switch(i){case 1:case 2:case 3:var n=3;break;default:n=i}var r=i,s=a;i=n,a=t.unstable_now();try{return e()}finally{i=r,a=s,h()}},t.unstable_scheduleCallback=function(e,r){var s=-1!==a?a:t.unstable_now();if("object"==typeof r&&null!==r&&"number"==typeof r.timeout)r=s+r.timeout;else switch(i){case 1:r=s+-1;break;case 2:r=s+250;break;case 5:r=s+1073741823;break;case 4:r=s+1e4;break;default:r=s+5e3}if(e={callback:e,priorityLevel:i,expirationTime:r,next:null,previous:null},null===n)n=e.next=e.previous=e,u();else{s=null;var o=n;do{if(o.expirationTime>r){s=o;break}o=o.next}while(o!==n);null===s?s=n:s===n&&(n=e,u()),(r=s.previous).next=s.previous=e,e.next=s,e.previous=r}return e},t.unstable_cancelCallback=function(e){var t=e.next;if(null!==t){if(t===e)n=null;else{e===n&&(n=t);var r=e.previous;r.next=t,t.previous=r}e.next=e.previous=null}},t.unstable_wrapCallback=function(e){var n=i;return function(){var r=i,s=a;i=n,a=t.unstable_now();try{return e.apply(this,arguments)}finally{i=r,a=s,h()}}},t.unstable_getCurrentPriorityLevel=function(){return i},t.unstable_shouldYield=function(){return!r&&(null!==n&&n.expirationTime'+e.innerHTML+"":null},t.prototype.toSvgBase64=function(){var e=this.toSvgXml();return e?"data:image/svg+xml;base64,"+btoa(e):null},t.prototype.clearListner=function(){this.el.removeEventListener("mousedown",this.mouseDown),this.el.removeEventListener("touchstart",this.touchStart)},t.prototype.drawingStart=function(){return this.appendTo(this.el),this.el.addEventListener("mousedown",this.mouseDown),this.el.addEventListener("touchstart",this.touchStart),this},t.prototype.move=function(e){var t=this,n=e.x,r=e.y,i=this.el.getBoundingClientRect(),a=function(e,t){return new s.a.Vector(e-i.left,t-i.top)};if(this.current.set(n,r),this.line){var o=a(n,r);this.line.vertices.push(o)}else{var l=a(this.current.x,this.current.y),u=a(n,r);this.line=this.makeCurve([l,u],!0),this.line.noFill().stroke=this.penColor,this.line.linewidth=this.penWidth,this.line.cap=this.strokeCap,this.line.join=this.strokeLineJoin,this.line.vertices.map(function(e){t.line&&e.addSelf(t.line.translation)}),this.line.translation.clear()}},t.prototype.mouseMove=function(e){this.move({x:e.clientX,y:e.clientY})},t.prototype.mouseUp=function(e){this.el.removeEventListener("mousemove",this.mouseMove),this.el.removeEventListener("mouseup",this.mouseUp)},t.prototype.mouseDown=function(e){this.current.set(e.clientX,e.clientY),this.line=null,this.el.addEventListener("mousemove",this.mouseMove),this.el.addEventListener("mouseup",this.mouseUp)},t.prototype.touchMove=function(e){e.preventDefault();var t=e.touches[0];return this.move({x:t.pageX,y:t.pageY}),!1},t.prototype.touchEnd=function(e){return e.preventDefault(),this.el.removeEventListener("touchmove",this.touchMove),this.el.removeEventListener("touchend",this.touchEnd),!1},t.prototype.touchStart=function(e){e.preventDefault();var t=e.touches[0];return this.current.set(t.pageX,t.pageY),this.line=null,this.el.addEventListener("touchmove",this.touchMove),this.el.addEventListener("touchend",this.touchEnd),!1},t}(s.a),f=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),d=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return s},p=function(){for(var e=[],t=0;t0&&(r+=n.distanceTo(e)),n=e}),p(e,[r])):e},[]),n=t.reduce(function(e,t){return e+t},0),r=0,i=function(){for(var i,a,s,o=[],l=0;l= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Cross browser dom events.\n\n var dom = {\n\n temp: (root.document ? root.document.createElement('div') : {}),\n\n hasEventListeners: _.isFunction(root.addEventListener),\n\n bind: function(elem, event, func, bool) {\n if (this.hasEventListeners) {\n elem.addEventListener(event, func, !!bool);\n } else {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n\n unbind: function(elem, event, func, bool) {\n if (dom.hasEventListeners) {\n elem.removeEventListeners(event, func, !!bool);\n } else {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n\n getRequestAnimationFrame: function() {\n\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n var request = root.requestAnimationFrame, cancel;\n\n if(!request) {\n for (var i = 0; i < vendors.length; i++) {\n request = root[vendors[i] + 'RequestAnimationFrame'] || request;\n cancel = root[vendors[i] + 'CancelAnimationFrame']\n || root[vendors[i] + 'CancelRequestAnimationFrame'] || cancel;\n }\n\n request = request || function(callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = root.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n // cancel = cancel || function(id) {\n // clearTimeout(id);\n // };\n }\n\n request.init = _.once(loop);\n\n return request;\n\n }\n\n };\n\n /**\n * @name Two\n * @class\n * @global\n * @param {Object} [options]\n * @param {Boolean} [options.fullscreen=false] - Set to `true` to automatically make the stage adapt to the width and height of the parent document. This parameter overrides `width` and `height` parameters if set to `true`.\n * @param {Number} [options.width=640] - The width of the stage on construction. This can be set at a later time.\n * @param {Number} [options.height=480] - The height of the stage on construction. This can be set at a later time.\n * @param {String} [options.type=Two.Types.svg] - The type of renderer to setup drawing with. See [`Two.Types`]{@link Two.Types} for available options.\n * @param {Boolean} [options.autostart=false] - Set to `true` to add the instance to draw on `requestAnimationFrame`. This is a convenient substitute for {@link Two#play}.\n * @description The entrypoint for Two.js. Instantiate a `new Two` in order to setup a scene to render to. `Two` is also the publicly accessible namespace that all other sub-classes, functions, and utilities attach to.\n */\n var Two = root.Two = function(options) {\n\n // Determine what Renderer to use and setup a scene.\n\n var params = _.defaults(options || {}, {\n fullscreen: false,\n width: 640,\n height: 480,\n type: Two.Types.svg,\n autostart: false\n });\n\n _.each(params, function(v, k) {\n if (/fullscreen/i.test(k) || /autostart/i.test(k)) {\n return;\n }\n this[k] = v;\n }, this);\n\n // Specified domElement overrides type declaration only if the element does not support declared renderer type.\n if (_.isElement(params.domElement)) {\n var tagName = params.domElement.tagName.toLowerCase();\n // TODO: Reconsider this if statement's logic.\n if (!/^(CanvasRenderer-canvas|WebGLRenderer-canvas|SVGRenderer-svg)$/.test(this.type+'-'+tagName)) {\n this.type = Two.Types[tagName];\n }\n }\n\n this.renderer = new Two[this.type](this);\n Two.Utils.setPlaying.call(this, params.autostart);\n this.frameCount = 0;\n\n if (params.fullscreen) {\n\n var fitted = _.bind(fitToWindow, this);\n _.extend(document.body.style, {\n overflow: 'hidden',\n margin: 0,\n padding: 0,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n position: 'fixed'\n });\n _.extend(this.renderer.domElement.style, {\n display: 'block',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n position: 'fixed'\n });\n dom.bind(root, 'resize', fitted);\n fitted();\n\n\n } else if (!_.isElement(params.domElement)) {\n\n this.renderer.setSize(params.width, params.height, this.ratio);\n this.width = params.width;\n this.height = params.height;\n\n }\n\n this.renderer.bind(Two.Events.resize, _.bind(updateDimensions, this));\n this.scene = this.renderer.scene;\n\n Two.Instances.push(this);\n if (params.autostart) {\n raf.init();\n }\n\n };\n\n _.extend(Two, {\n\n // Access to root in other files.\n\n /**\n * @name Two.root\n * @description The root of the session context. In the browser this is the `window` variable. This varies in headless environments.\n */\n root: root,\n\n /**\n * @name Two.nextFrameID\n * @property {Integer}\n * @description The id of the next requestAnimationFrame function.\n */\n nextFrameID: null,\n\n // Primitive\n\n /**\n * @name Two.Array\n * @description A simple polyfill for Float32Array.\n */\n Array: root.Float32Array || Array,\n\n /**\n * @name Two.Types\n * @property {Object} - The different rendering types availabe in the library.\n */\n Types: {\n webgl: 'WebGLRenderer',\n svg: 'SVGRenderer',\n canvas: 'CanvasRenderer'\n },\n\n /**\n * @name Two.Version\n * @property {String} - The current working version of the library.\n */\n Version: 'v0.7.0-beta.3',\n\n /**\n * @name Two.PublishDate\n * @property {String} - The automatically generated publish date in the build process to verify version release candidates.\n */\n PublishDate: '2018-12-08T22:41:43+01:00',\n\n /**\n * @name Two.Identifier\n * @property {String} - String prefix for all Two.js object's ids. This trickles down to SVG ids.\n */\n Identifier: 'two-',\n\n /**\n * @name Two.Events\n * @property {Object} - Map of possible events in Two.js.\n */\n Events: {\n play: 'play',\n pause: 'pause',\n update: 'update',\n render: 'render',\n resize: 'resize',\n change: 'change',\n remove: 'remove',\n insert: 'insert',\n order: 'order',\n load: 'load'\n },\n\n /**\n * @name Two.Commands\n * @property {Object} - Map of possible path commands. Taken from the SVG specification.\n */\n Commands: {\n move: 'M',\n line: 'L',\n curve: 'C',\n arc: 'A',\n close: 'Z'\n },\n\n /**\n * @name Two.Resolution\n * @property {Number} - Default amount of vertices to be used for interpreting Arcs and ArcSegments.\n */\n Resolution: 12,\n\n /**\n * @name Two.Instances\n * @property {Array} - Registered list of all Two.js instances in the current session.\n */\n Instances: [],\n\n /**\n * @function Two.noConflict\n * @description A function to revert the global namespaced `Two` variable to its previous incarnation.\n * @returns {Two} Returns access to the top-level Two.js library for local use.\n */\n noConflict: function() {\n root.Two = previousTwo;\n return Two;\n },\n\n /**\n * @function Two.uniqueId\n * @description Simple method to access an incrementing value. Used for `id` allocation on all Two.js objects.\n * @returns {Number} Ever increasing integer.\n */\n uniqueId: function() {\n var id = count;\n count++;\n return id;\n },\n\n /**\n * @name Two.Utils\n * @interface\n * @implements {_}\n * @description A hodgepodge of handy functions, math, and properties are stored here.\n */\n Utils: _.extend(_, {\n\n /**\n * @name Two.Utils.performance\n * @property {Date} - A special `Date` like object to get the current millis of the session. Used internally to calculate time between frames.\n * e.g: `Two.Utils.performance.now() // milliseconds since epoch`\n */\n performance: perf,\n\n /**\n * @name Two.Utils.defineProperty\n * @function\n * @this Two#\n * @param {String} property - The property to add an enumerable getter / setter to.\n * @description Convenience function to setup the flag based getter / setter that most properties are defined as in Two.js.\n */\n defineProperty: function(property) {\n\n var object = this;\n var secret = '_' + property;\n var flag = '_flag' + property.charAt(0).toUpperCase() + property.slice(1);\n\n Object.defineProperty(object, property, {\n enumerable: true,\n get: function() {\n return this[secret];\n },\n set: function(v) {\n this[secret] = v;\n this[flag] = true;\n }\n });\n\n },\n\n Image: null,\n\n isHeadless: false,\n\n /**\n * @name Two.Utils.shim\n * @function\n * @param {canvas} canvas - The instanced `Canvas` object provided by `node-canvas`.\n * @param {Image} [Image] - The prototypical `Image` object provided by `node-canvas`. This is only necessary to pass if you're going to load bitmap imagery.\n * @returns {canvas} Returns the instanced canvas object you passed from with additional attributes needed for Two.js.\n * @description Convenience method for defining all the dependencies from the npm package `node-canvas`. See [node-canvas]{@link https://github.com/Automattic/node-canvas} for additional information on setting up HTML5 `` drawing in a node.js environment.\n */\n shim: function(canvas, Image) {\n Two.CanvasRenderer.Utils.shim(canvas);\n if (!_.isUndefined(Image)) {\n Two.Utils.Image = Image;\n }\n Two.Utils.isHeadless = true;\n return canvas;\n },\n\n /**\n * @name Two.Utils.release\n * @function\n * @param {Object} obj\n * @returns {Object} The object passed for event deallocation.\n * @description Release an arbitrary class' events from the Two.js corpus and recurse through its children and or vertices.\n */\n release: function(obj) {\n\n if (!_.isObject(obj)) {\n return;\n }\n\n if (_.isFunction(obj.unbind)) {\n obj.unbind();\n }\n\n if (obj.vertices) {\n if (_.isFunction(obj.vertices.unbind)) {\n obj.vertices.unbind();\n }\n _.each(obj.vertices, function(v) {\n if (_.isFunction(v.unbind)) {\n v.unbind();\n }\n });\n }\n\n if (obj.children) {\n _.each(obj.children, function(obj) {\n Two.Utils.release(obj);\n });\n }\n\n return obj;\n\n },\n\n /**\n * @name Two.Utils.xhr\n * @function\n * @param {String} path\n * @param {Function} callback\n * @returns {XMLHttpRequest} The constructed and called XHR request.\n * @description Canonical method to initiate `GET` requests in the browser. Mainly used by {@link Two#load} method.\n */\n xhr: function(path, callback) {\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path);\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4 && xhr.status === 200) {\n callback(xhr.responseText);\n }\n };\n\n xhr.send();\n return xhr;\n\n },\n\n /**\n * @name Two.Utils.Curve\n * @property {Object} - Additional utility constant variables related to curve math and calculations.\n */\n Curve: {\n\n CollinearityEpsilon: pow(10, -30),\n\n RecursionLimit: 16,\n\n CuspLimit: 0,\n\n Tolerance: {\n distance: 0.25,\n angle: 0,\n epsilon: Number.EPSILON\n },\n\n // Lookup tables for abscissas and weights with values for n = 2 .. 16.\n // As values are symmetric, only store half of them and adapt algorithm\n // to factor in symmetry.\n abscissas: [\n [ 0.5773502691896257645091488],\n [0,0.7745966692414833770358531],\n [ 0.3399810435848562648026658,0.8611363115940525752239465],\n [0,0.5384693101056830910363144,0.9061798459386639927976269],\n [ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n [0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n [ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n [0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n [ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n [0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n [ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n [0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n [ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n [0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n [ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n ],\n\n weights: [\n [1],\n [0.8888888888888888888888889,0.5555555555555555555555556],\n [0.6521451548625461426269361,0.3478548451374538573730639],\n [0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n [0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n [0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n [0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n [0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n [0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n [0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n [0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n [0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n [0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n [0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n [0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n ]\n\n },\n\n devicePixelRatio: root.devicePixelRatio || 1,\n\n getBackingStoreRatio: function(ctx) {\n return ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n },\n\n /**\n * @name Two.Utils.getRatio\n * @function\n * @param {Canvas.context2D} ctx\n * @returns {Number} The ratio of a unit in Two.js to the pixel density of a session's screen.\n * @see [High DPI Rendering]{@link http://www.html5rocks.com/en/tutorials/canvas/hidpi/}\n */\n getRatio: function(ctx) {\n return Two.Utils.devicePixelRatio / getBackingStoreRatio(ctx);\n },\n\n /**\n * @name Two.Utils.setPlaying\n * @function\n * @this Two#\n * @returns {Two} The instance called with for potential chaining.\n * @description Internal convenience method to properly defer play calling until after all objects have been updated with their newest styles.\n */\n setPlaying: function(b) {\n\n this.playing = !!b;\n return this;\n\n },\n\n /**\n * @name Two.Utils.getComputedMatrix\n * @function\n * @param {Two.Shape} object - The Two.js object that has a matrix property to calculate from.\n * @param {Two.Matrix} [matrix] - The matrix to apply calculated transformations to if available.\n * @returns {Two.Matrix} The computed matrix of a nested object. If no `matrix` was passed in arguments then a `new Two.Matrix` is returned.\n * @description Method to get the world space transformation of a given object in a Two.js scene.\n */\n getComputedMatrix: function(object, matrix) {\n\n matrix = (matrix && matrix.identity()) || new Two.Matrix();\n var parent = object, matrices = [];\n\n while (parent && parent._matrix) {\n matrices.push(parent._matrix);\n parent = parent.parent;\n }\n\n matrices.reverse();\n\n for (var i = 0; i < matrices.length; i++) {\n\n var m = matrices[i];\n var e = m.elements;\n matrix.multiply(\n e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9]);\n\n }\n\n return matrix;\n\n },\n\n /**\n * @name Two.Utils.deltaTransformPoint\n * @function\n * @param {Two.Matrix} matrix\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector}\n * @description Used by {@link Two.Utils.decomposeMatrix}\n */\n deltaTransformPoint: function(matrix, x, y) {\n\n var dx = x * matrix.a + y * matrix.c + 0;\n var dy = x * matrix.b + y * matrix.d + 0;\n\n return new Two.Vector(dx, dy);\n\n },\n\n /**\n * @name Two.Utils.decomposeMatrix\n * @function\n * @param {Two.Matrix} matrix - The matrix to decompose.\n * @returns {Object} An object containing relevant skew values.\n * @description Decompose a 2D 3x3 Matrix to find the skew.\n * @see {@link https://gist.github.com/2052247}\n */\n decomposeMatrix: function(matrix) {\n\n // calculate delta transform point\n var px = Two.Utils.deltaTransformPoint(matrix, 0, 1);\n var py = Two.Utils.deltaTransformPoint(matrix, 1, 0);\n\n // calculate skew\n var skewX = ((180 / Math.PI) * Math.atan2(px.y, px.x) - 90);\n var skewY = ((180 / Math.PI) * Math.atan2(py.y, py.x));\n\n return {\n translateX: matrix.e,\n translateY: matrix.f,\n scaleX: Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b),\n scaleY: Math.sqrt(matrix.c * matrix.c + matrix.d * matrix.d),\n skewX: skewX,\n skewY: skewY,\n rotation: skewX // rotation is the same as skew x\n };\n\n },\n\n /**\n * @name Two.Utils.extractCSSText\n * @function\n * @param {String} text - The CSS text body to be parsed and extracted.\n * @param {Object} [styles] - The styles object to apply CSS key values to.\n * @returns {Object} styles\n * @description Parse CSS text body and apply them as key value pairs to a JavaScript object.\n */\n extractCSSText: function(text, styles) {\n\n var commands, command, name, value;\n\n if (!styles) {\n styles = {};\n }\n\n commands = text.split(';');\n\n for (var i = 0; i < commands.length; i++) {\n command = commands[i].split(':');\n name = command[0];\n value = command[1];\n if (_.isUndefined(name) || _.isUndefined(value)) {\n continue;\n }\n styles[name] = value.replace(/\\s/, '');\n }\n\n return styles;\n\n },\n\n /**\n * @name Two.Utils.getSvgStyles\n * @function\n * @param {SvgNode} node - The SVG node to parse.\n * @returns {Object} styles\n * @description Get the CSS comands from the `style` attribute of an SVG node and apply them as key value pairs to a JavaScript object.\n */\n getSvgStyles: function(node) {\n\n var styles = {};\n\n for (var i = 0; i < node.style.length; i++) {\n var command = node.style[i];\n styles[command] = node.style[command];\n }\n\n return styles;\n\n },\n\n /**\n * @name Two.Utils.applySvgViewBox\n * @function\n * @param {Two.Shape} node - The Two.js object to apply viewbox matrix to\n * @param {String} value - The viewBox value from the SVG attribute\n * @returns {Two.Shape} node\n @ @description\n */\n applySvgViewBox: function(node, value) {\n\n var elements = value.split(/\\s/);\n\n var x = parseFloat(elements[0]);\n var y = parseFloat(elements[1]);\n var width = parseFloat(elements[2]);\n var height = parseFloat(elements[3]);\n\n var s = Math.min(this.width / width, this.height / height);\n\n node.translation.x -= x * s;\n node.translation.y -= y * s;\n node.scale = s;\n\n return node;\n\n },\n\n /**\n * @name Two.Utils.applySvgAttributes\n * @function\n * @param {SvgNode} node - An SVG Node to extrapolate attributes from.\n * @param {Two.Shape} elem - The Two.js object to apply extrapolated attributes to.\n * @returns {Two.Shape} The Two.js object passed now with applied attributes.\n * @description This function iterates through an SVG Node's properties and stores ones of interest. It tries to resolve styles applied via CSS as well.\n * @TODO Reverse calculate `Two.Gradient`s for fill / stroke of any given path.\n */\n applySvgAttributes: function(node, elem, parentStyles) {\n\n var styles = {}, attributes = {}, extracted = {}, i, key, value, attr;\n\n // Not available in non browser environments\n if (root.getComputedStyle) {\n // Convert CSSStyleDeclaration to a normal object\n var computedStyles = root.getComputedStyle(node);\n i = computedStyles.length;\n\n while (i--) {\n key = computedStyles[i];\n value = computedStyles[key];\n // Gecko returns undefined for unset properties\n // Webkit returns the default value\n if (!_.isUndefined(value)) {\n styles[key] = value;\n }\n }\n }\n\n // Convert NodeMap to a normal object\n for (i = 0; i < node.attributes.length; i++) {\n attr = node.attributes[i];\n if (/style/i.test(attr.nodeName)) {\n Two.Utils.extractCSSText(attr.value, extracted);\n } else {\n attributes[attr.nodeName] = attr.value;\n }\n }\n\n // Getting the correct opacity is a bit tricky, since SVG path elements don't\n // support opacity as an attribute, but you can apply it via CSS.\n // So we take the opacity and set (stroke/fill)-opacity to the same value.\n if (!_.isUndefined(styles.opacity)) {\n styles['stroke-opacity'] = styles.opacity;\n styles['fill-opacity'] = styles.opacity;\n delete styles.opacity;\n }\n\n // Merge attributes and applied styles (attributes take precedence)\n if (parentStyles) {\n _.defaults(styles, parentStyles);\n }\n _.extend(styles, attributes, extracted);\n\n // Similarly visibility is influenced by the value of both display and visibility.\n // Calculate a unified value here which defaults to `true`.\n styles.visible = !(_.isUndefined(styles.display) && /none/i.test(styles.display))\n || (_.isUndefined(styles.visibility) && /hidden/i.test(styles.visibility));\n\n // Now iterate the whole thing\n for (key in styles) {\n value = styles[key];\n\n switch (key) {\n case 'transform':\n // TODO: Check this out https://github.com/paperjs/paper.js/blob/develop/src/svg/SvgImport.js#L315\n if (/none/i.test(value)) break;\n var m = (node.transform && node.transform.baseVal && node.transform.baseVal.length > 0)\n ? node.transform.baseVal[0].matrix\n : (node.getCTM ? node.getCTM() : null);\n\n // Might happen when transform string is empty or not valid.\n if (_.isNull(m)) break;\n\n // // Option 1: edit the underlying matrix and don't force an auto calc.\n // var m = node.getCTM();\n // elem._matrix.manual = true;\n // elem._matrix.set(m.a, m.b, m.c, m.d, m.e, m.f);\n\n // Option 2: Decompose and infer Two.js related properties.\n var transforms = Two.Utils.decomposeMatrix(m);\n\n elem.translation.set(transforms.translateX, transforms.translateY);\n elem.rotation = transforms.rotation;\n elem.scale = new Two.Vector(transforms.scaleX, transforms.scaleY);\n\n var x = parseFloat((styles.x + '').replace('px'));\n var y = parseFloat((styles.y + '').replace('px'));\n\n // Override based on attributes.\n if (x) {\n elem.translation.x = x;\n }\n\n if (y) {\n elem.translation.y = y;\n }\n\n break;\n case 'viewBox':\n Two.Utils.applySvgViewBox.call(this, elem, value);\n break;\n case 'visible':\n elem.visible = value;\n break;\n case 'stroke-linecap':\n elem.cap = value;\n break;\n case 'stroke-linejoin':\n elem.join = value;\n break;\n case 'stroke-miterlimit':\n elem.miter = value;\n break;\n case 'stroke-width':\n elem.linewidth = parseFloat(value);\n break;\n case 'opacity':\n case 'stroke-opacity':\n case 'fill-opacity':\n // Only apply styles to rendered shapes\n // in the scene.\n if (!(elem instanceof Two.Group)) {\n elem.opacity = parseFloat(value);\n }\n break;\n case 'fill':\n case 'stroke':\n if (/url\\(\\#.*\\)/i.test(value)) {\n elem[key] = this.getById(\n value.replace(/url\\(\\#(.*)\\)/i, '$1'));\n } else {\n elem[key] = (/none/i.test(value)) ? 'transparent' : value;\n }\n break;\n case 'id':\n elem.id = value;\n break;\n case 'class':\n case 'className':\n elem.classList = value.split(' ');\n break;\n }\n }\n\n return styles;\n\n },\n\n /**\n * @name Two.Utils.read\n * @property {Object} read - A map of functions to read any number of SVG node types and create Two.js equivalents of them. Primarily used by the {@link Two#interpret} method.\n */\n read: {\n\n svg: function(node) {\n\n var svg = Two.Utils.read.g.call(this, node);\n var viewBox = node.getAttribute('viewBox');\n // Two.Utils.applySvgViewBox(svg, viewBox);\n\n return svg;\n\n },\n\n g: function(node) {\n\n var styles, attrs;\n var group = new Two.Group();\n\n // Switched up order to inherit more specific styles\n styles = Two.Utils.getSvgStyles.call(this, node);\n\n for (var i = 0, l = node.childNodes.length; i < l; i++) {\n var n = node.childNodes[i];\n var tag = n.nodeName;\n if (!tag) return;\n\n var tagName = tag.replace(/svg\\:/ig, '').toLowerCase();\n\n if (tagName in Two.Utils.read) {\n var o = Two.Utils.read[tagName].call(group, n, styles);\n group.add(o);\n }\n }\n\n return group;\n\n },\n\n polygon: function(node, parentStyles) {\n\n var points = node.getAttribute('points');\n\n var verts = [];\n points.replace(/(-?[\\d\\.?]+)[,|\\s](-?[\\d\\.?]+)/g, function(match, p1, p2) {\n verts.push(new Two.Anchor(parseFloat(p1), parseFloat(p2)));\n });\n\n var poly = new Two.Path(verts, true).noStroke();\n poly.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, poly, parentStyles);\n\n return poly;\n\n },\n\n polyline: function(node, parentStyles) {\n var poly = Two.Utils.read.polygon.call(this, node, parentStyles);\n poly.closed = false;\n return poly;\n },\n\n path: function(node, parentStyles) {\n\n var path = node.getAttribute('d');\n\n // Create a Two.Path from the paths.\n\n var coord = new Two.Anchor();\n var control, coords;\n var closed = false, relative = false;\n var commands = path.match(/[a-df-z][^a-df-z]*/ig);\n var last = commands.length - 1;\n\n // Split up polybeziers\n\n _.each(commands.slice(0), function(command, i) {\n\n var number, fid, lid, numbers, first, s;\n var j, k, ct, l, times;\n\n var type = command[0];\n var lower = type.toLowerCase();\n var items = command.slice(1).trim().split(/[\\s,]+|(?=\\s?[+\\-])/);\n var pre, post, result = [], bin;\n var hasDoubleDecimals = false;\n\n // Handle double decimal values e.g: 48.6037.71.8\n // Like: https://m.abcsofchinese.com/images/svg/亼ji2.svg\n for (j = 0; j < items.length; j++) {\n\n number = items[j];\n fid = number.indexOf('.');\n lid = number.lastIndexOf('.');\n\n if (fid !== lid) {\n\n numbers = number.split('.');\n first = numbers[0] + '.' + numbers[1];\n\n items.splice(j, 1, first);\n\n for (s = 2; s < numbers.length; s++) {\n items.splice(j + s - 1, 0, '0.' + numbers[s]);\n }\n\n hasDoubleDecimals = true;\n\n }\n\n }\n\n if (hasDoubleDecimals) {\n command = type + items.join(',');\n }\n\n if (i <= 0) {\n commands = [];\n }\n\n switch (lower) {\n case 'h':\n case 'v':\n if (items.length > 1) {\n bin = 1;\n }\n break;\n case 'm':\n case 'l':\n case 't':\n if (items.length > 2) {\n bin = 2;\n }\n break;\n case 's':\n case 'q':\n if (items.length > 4) {\n bin = 4;\n }\n break;\n case 'c':\n if (items.length > 6) {\n bin = 6;\n }\n break;\n case 'a':\n if (items.length > 7) {\n bin = 7;\n }\n break;\n }\n\n // This means we have a polybezier.\n if (bin) {\n\n for (j = 0, l = items.length, times = 0; j < l; j+=bin) {\n\n ct = type;\n if (times > 0) {\n\n switch (type) {\n case 'm':\n ct = 'l';\n break;\n case 'M':\n ct = 'L';\n break;\n }\n\n }\n\n result.push(ct + items.slice(j, j + bin).join(' '));\n times++;\n\n }\n\n commands = Array.prototype.concat.apply(commands, result);\n\n } else {\n\n commands.push(command);\n\n }\n\n });\n\n // Create the vertices for our Two.Path\n\n var points = [];\n _.each(commands, function(command, i) {\n\n var result, x, y;\n var type = command[0];\n var lower = type.toLowerCase();\n\n coords = command.slice(1).trim();\n coords = coords.replace(/(-?\\d+(?:\\.\\d*)?)[eE]([+\\-]?\\d+)/g, function(match, n1, n2) {\n return parseFloat(n1) * pow(10, n2);\n });\n coords = coords.split(/[\\s,]+|(?=\\s?[+\\-])/);\n relative = type === lower;\n\n var x1, y1, x2, y2, x3, y3, x4, y4, reflection;\n\n switch (lower) {\n\n case 'z':\n if (i >= last) {\n closed = true;\n } else {\n x = coord.x;\n y = coord.y;\n result = new Two.Anchor(\n x, y,\n undefined, undefined,\n undefined, undefined,\n Two.Commands.close\n );\n // Make coord be the last `m` command\n for (var i = points.length - 1; i >= 0; i--) {\n var point = points[i];\n if (/m/i.test(point.command)) {\n coord = point;\n break;\n }\n }\n }\n break;\n\n case 'm':\n case 'l':\n\n control = undefined;\n\n x = parseFloat(coords[0]);\n y = parseFloat(coords[1]);\n\n result = new Two.Anchor(\n x, y,\n undefined, undefined,\n undefined, undefined,\n /m/i.test(lower) ? Two.Commands.move : Two.Commands.line\n );\n\n if (relative) {\n result.addSelf(coord);\n }\n\n // result.controls.left.copy(result);\n // result.controls.right.copy(result);\n\n coord = result;\n break;\n\n case 'h':\n case 'v':\n\n var a = /h/i.test(lower) ? 'x' : 'y';\n var b = /x/i.test(a) ? 'y' : 'x';\n\n result = new Two.Anchor(\n undefined, undefined,\n undefined, undefined,\n undefined, undefined,\n Two.Commands.line\n );\n result[a] = parseFloat(coords[0]);\n result[b] = coord[b];\n\n if (relative) {\n result[a] += coord[a];\n }\n\n // result.controls.left.copy(result);\n // result.controls.right.copy(result);\n\n coord = result;\n break;\n\n case 'c':\n case 's':\n\n x1 = coord.x;\n y1 = coord.y;\n\n if (!control) {\n control = new Two.Vector();//.copy(coord);\n }\n\n if (/c/i.test(lower)) {\n\n x2 = parseFloat(coords[0]);\n y2 = parseFloat(coords[1]);\n x3 = parseFloat(coords[2]);\n y3 = parseFloat(coords[3]);\n x4 = parseFloat(coords[4]);\n y4 = parseFloat(coords[5]);\n\n } else {\n\n // Calculate reflection control point for proper x2, y2\n // inclusion.\n\n reflection = getReflection(coord, control, relative);\n\n x2 = reflection.x;\n y2 = reflection.y;\n x3 = parseFloat(coords[0]);\n y3 = parseFloat(coords[1]);\n x4 = parseFloat(coords[2]);\n y4 = parseFloat(coords[3]);\n\n }\n\n if (relative) {\n x2 += x1;\n y2 += y1;\n x3 += x1;\n y3 += y1;\n x4 += x1;\n y4 += y1;\n }\n\n if (!_.isObject(coord.controls)) {\n Two.Anchor.AppendCurveProperties(coord);\n }\n\n coord.controls.right.set(x2 - coord.x, y2 - coord.y);\n result = new Two.Anchor(\n x4, y4,\n x3 - x4, y3 - y4,\n undefined, undefined,\n Two.Commands.curve\n );\n\n coord = result;\n control = result.controls.left;\n\n break;\n\n case 't':\n case 'q':\n\n x1 = coord.x;\n y1 = coord.y;\n\n if (!control) {\n control = new Two.Vector();//.copy(coord);\n }\n\n if (control.isZero()) {\n x2 = x1;\n y2 = y1;\n } else {\n x2 = control.x;\n y2 = control.y;\n }\n\n if (/q/i.test(lower)) {\n\n x3 = parseFloat(coords[0]);\n y3 = parseFloat(coords[1]);\n x4 = parseFloat(coords[2]);\n y4 = parseFloat(coords[3]);\n\n } else {\n\n reflection = getReflection(coord, control, relative);\n\n x3 = reflection.x;\n y3 = reflection.y;\n x4 = parseFloat(coords[0]);\n y4 = parseFloat(coords[1]);\n\n }\n\n if (relative) {\n x2 += x1;\n y2 += y1;\n x3 += x1;\n y3 += y1;\n x4 += x1;\n y4 += y1;\n }\n\n if (!_.isObject(coord.controls)) {\n Two.Anchor.AppendCurveProperties(coord);\n }\n\n coord.controls.right.set(x2 - coord.x, y2 - coord.y);\n result = new Two.Anchor(\n x4, y4,\n x3 - x4, y3 - y4,\n undefined, undefined,\n Two.Commands.curve\n );\n\n coord = result;\n control = result.controls.left;\n\n break;\n\n case 'a':\n\n x1 = coord.x;\n y1 = coord.y;\n\n var rx = parseFloat(coords[0]);\n var ry = parseFloat(coords[1]);\n var xAxisRotation = parseFloat(coords[2]);// * PI / 180;\n var largeArcFlag = parseFloat(coords[3]);\n var sweepFlag = parseFloat(coords[4]);\n\n x4 = parseFloat(coords[5]);\n y4 = parseFloat(coords[6]);\n\n if (relative) {\n x4 += x1;\n y4 += y1;\n }\n\n var anchor = new Two.Anchor(x4, y4);\n anchor.command = Two.Commands.arc;\n anchor.rx = rx;\n anchor.ry = ry;\n anchor.xAxisRotation = xAxisRotation;\n anchor.largeArcFlag = largeArcFlag;\n anchor.sweepFlag = sweepFlag;\n\n result = anchor;\n\n coord = anchor;\n control = undefined;\n\n break;\n\n }\n\n if (result) {\n if (_.isArray(result)) {\n points = points.concat(result);\n } else {\n points.push(result);\n }\n }\n\n });\n\n if (points.length <= 1) {\n return;\n }\n\n var path = new Two.Path(points, closed, undefined, true).noStroke();\n path.fill = 'black';\n\n var rect = path.getBoundingClientRect(true);\n\n // Center objects to stay consistent\n // with the rest of the Two.js API.\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n _.each(path.vertices, function(v) {\n v.subSelf(rect.centroid);\n });\n\n path.translation.addSelf(rect.centroid);\n\n Two.Utils.applySvgAttributes.call(this, node, path, parentStyles);\n\n return path;\n\n },\n\n circle: function(node, parentStyles) {\n\n var x = parseFloat(node.getAttribute('cx'));\n var y = parseFloat(node.getAttribute('cy'));\n var r = parseFloat(node.getAttribute('r'));\n\n var circle = new Two.Circle(x, y, r).noStroke();\n circle.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, circle, parentStyles);\n\n return circle;\n\n },\n\n ellipse: function(node, parentStyles) {\n\n var x = parseFloat(node.getAttribute('cx'));\n var y = parseFloat(node.getAttribute('cy'));\n var width = parseFloat(node.getAttribute('rx'));\n var height = parseFloat(node.getAttribute('ry'));\n\n var ellipse = new Two.Ellipse(x, y, width, height).noStroke();\n ellipse.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, ellipse, parentStyles);\n\n return ellipse;\n\n },\n\n rect: function(node, parentStyles) {\n\n var rx = parseFloat(node.getAttribute('rx'));\n var ry = parseFloat(node.getAttribute('ry'));\n\n if (!_.isNaN(rx) || !_.isNaN(ry)) {\n return Two.Utils.read['rounded-rect'](node);\n }\n\n var x = parseFloat(node.getAttribute('x')) || 0;\n var y = parseFloat(node.getAttribute('y')) || 0;\n var width = parseFloat(node.getAttribute('width'));\n var height = parseFloat(node.getAttribute('height'));\n\n var w2 = width / 2;\n var h2 = height / 2;\n\n var rect = new Two.Rectangle(x + w2, y + h2, width, height)\n .noStroke();\n rect.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, rect, parentStyles);\n\n return rect;\n\n },\n\n 'rounded-rect': function(node, parentStyles) {\n\n var x = parseFloat(node.getAttribute('x')) || 0;\n var y = parseFloat(node.getAttribute('y')) || 0;\n var rx = parseFloat(node.getAttribute('rx')) || 0;\n var ry = parseFloat(node.getAttribute('ry')) || 0;\n\n var width = parseFloat(node.getAttribute('width'));\n var height = parseFloat(node.getAttribute('height'));\n\n var w2 = width / 2;\n var h2 = height / 2;\n var radius = new Two.Vector(rx, ry);\n\n var rect = new Two.RoundedRectangle(x + w2, y + h2, width, height, radius)\n .noStroke();\n rect.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, rect, parentStyles);\n\n return rect;\n\n },\n\n line: function(node, parentStyles) {\n\n var x1 = parseFloat(node.getAttribute('x1'));\n var y1 = parseFloat(node.getAttribute('y1'));\n var x2 = parseFloat(node.getAttribute('x2'));\n var y2 = parseFloat(node.getAttribute('y2'));\n\n var line = new Two.Line(x1, y1, x2, y2).noFill();\n\n Two.Utils.applySvgAttributes.call(this, node, line, parentStyles);\n\n return line;\n\n },\n\n lineargradient: function(node, parentStyles) {\n\n var x1 = parseFloat(node.getAttribute('x1'));\n var y1 = parseFloat(node.getAttribute('y1'));\n var x2 = parseFloat(node.getAttribute('x2'));\n var y2 = parseFloat(node.getAttribute('y2'));\n\n var ox = (x2 + x1) / 2;\n var oy = (y2 + y1) / 2;\n\n var stops = [];\n for (var i = 0; i < node.children.length; i++) {\n\n var child = node.children[i];\n\n var offset = parseFloat(child.getAttribute('offset'));\n var color = child.getAttribute('stop-color');\n var opacity = child.getAttribute('stop-opacity');\n var style = child.getAttribute('style');\n\n if (_.isNull(color)) {\n var matches = style ? style.match(/stop\\-color\\:\\s?([\\#a-fA-F0-9]*)/) : false;\n color = matches && matches.length > 1 ? matches[1] : undefined;\n }\n\n if (_.isNull(opacity)) {\n var matches = style ? style.match(/stop\\-opacity\\:\\s?([0-9\\.\\-]*)/) : false;\n opacity = matches && matches.length > 1 ? parseFloat(matches[1]) : 1;\n }\n\n stops.push(new Two.Gradient.Stop(offset, color, opacity));\n\n }\n\n var gradient = new Two.LinearGradient(x1 - ox, y1 - oy, x2 - ox,\n y2 - oy, stops);\n\n Two.Utils.applySvgAttributes.call(this, node, gradient, parentStyles);\n\n return gradient;\n\n },\n\n radialgradient: function(node, parentStyles) {\n\n var cx = parseFloat(node.getAttribute('cx')) || 0;\n var cy = parseFloat(node.getAttribute('cy')) || 0;\n var r = parseFloat(node.getAttribute('r'));\n\n var fx = parseFloat(node.getAttribute('fx'));\n var fy = parseFloat(node.getAttribute('fy'));\n\n if (_.isNaN(fx)) {\n fx = cx;\n }\n\n if (_.isNaN(fy)) {\n fy = cy;\n }\n\n var ox = abs(cx + fx) / 2;\n var oy = abs(cy + fy) / 2;\n\n var stops = [];\n for (var i = 0; i < node.children.length; i++) {\n\n var child = node.children[i];\n\n var offset = parseFloat(child.getAttribute('offset'));\n var color = child.getAttribute('stop-color');\n var opacity = child.getAttribute('stop-opacity');\n var style = child.getAttribute('style');\n\n if (_.isNull(color)) {\n var matches = style ? style.match(/stop\\-color\\:\\s?([\\#a-fA-F0-9]*)/) : false;\n color = matches && matches.length > 1 ? matches[1] : undefined;\n }\n\n if (_.isNull(opacity)) {\n var matches = style ? style.match(/stop\\-opacity\\:\\s?([0-9\\.\\-]*)/) : false;\n opacity = matches && matches.length > 1 ? parseFloat(matches[1]) : 1;\n }\n\n stops.push(new Two.Gradient.Stop(offset, color, opacity));\n\n }\n\n var gradient = new Two.RadialGradient(cx - ox, cy - oy, r,\n stops, fx - ox, fy - oy);\n\n Two.Utils.applySvgAttributes.call(this, node, gradient, parentStyles);\n\n return gradient;\n\n }\n\n },\n\n /**\n * @name Two.Utils.subdivide\n * @function\n * @param {Number} x1 - x position of first anchor point.\n * @param {Number} y1 - y position of first anchor point.\n * @param {Number} x2 - x position of first anchor point's \"right\" bezier handle.\n * @param {Number} y2 - y position of first anchor point's \"right\" bezier handle.\n * @param {Number} x3 - x position of second anchor point's \"left\" bezier handle.\n * @param {Number} y3 - y position of second anchor point's \"left\" bezier handle.\n * @param {Number} x4 - x position of second anchor point.\n * @param {Number} y4 - y position of second anchor point.\n * @param {Number} [limit=Two.Utils.Curve.RecursionLimit] - The amount of vertices to create by subdividing.\n * @returns {Two.Anchor[]} A list of anchor points ordered in between `x1`, `y1` and `x4`, `y4`\n * @description Given 2 points (a, b) and corresponding control point for each return an array of points that represent points plotted along the curve. The number of returned points is determined by `limit`.\n */\n subdivide: function(x1, y1, x2, y2, x3, y3, x4, y4, limit) {\n\n limit = limit || Two.Utils.Curve.RecursionLimit;\n var amount = limit + 1;\n\n // TODO: Abstract 0.001 to a limiting variable\n // Don't recurse if the end points are identical\n if (abs(x1 - x4) < 0.001 && abs(y1 - y4) < 0.001) {\n return [new Two.Anchor(x4, y4)];\n }\n\n var result = [];\n\n for (var i = 0; i < amount; i++) {\n var t = i / amount;\n var x = getComponentOnCubicBezier(t, x1, x2, x3, x4);\n var y = getComponentOnCubicBezier(t, y1, y2, y3, y4);\n result.push(new Two.Anchor(x, y));\n }\n\n return result;\n\n },\n\n /**\n * @name Two.Utils.getComponentOnCubicBezier\n * @function\n * @param {Number} t - Zero-to-one value describing what percentage to calculate.\n * @param {Number} a - The firt point's component value.\n * @param {Number} b - The first point's bezier component value.\n * @param {Number} c - The second point's bezier component value.\n * @param {Number} d - The second point's component value.\n * @returns {Number} The coordinate value for a specific component along a cubic bezier curve by `t`.\n */\n getComponentOnCubicBezier: function(t, a, b, c, d) {\n var k = 1 - t;\n return (k * k * k * a) + (3 * k * k * t * b) + (3 * k * t * t * c) +\n (t * t * t * d);\n },\n\n /**\n * @name Two.Utils.getCurveLength\n * @function\n * @param {Number} x1 - x position of first anchor point.\n * @param {Number} y1 - y position of first anchor point.\n * @param {Number} x2 - x position of first anchor point's \"right\" bezier handle.\n * @param {Number} y2 - y position of first anchor point's \"right\" bezier handle.\n * @param {Number} x3 - x position of second anchor point's \"left\" bezier handle.\n * @param {Number} y3 - y position of second anchor point's \"left\" bezier handle.\n * @param {Number} x4 - x position of second anchor point.\n * @param {Number} y4 - y position of second anchor point.\n * @param {Number} [limit=Two.Utils.Curve.RecursionLimit] - The amount of vertices to create by subdividing.\n * @returns {Number} The length of a curve.\n * @description Given 2 points (a, b) and corresponding control point for each, return a float that represents the length of the curve using Gauss-Legendre algorithm. Limit iterations of calculation by `limit`.\n */\n getCurveLength: function(x1, y1, x2, y2, x3, y3, x4, y4, limit) {\n\n // TODO: Better / fuzzier equality check\n // Linear calculation\n if (x1 === x2 && y1 === y2 && x3 === x4 && y3 === y4) {\n var dx = x4 - x1;\n var dy = y4 - y1;\n return sqrt(dx * dx + dy * dy);\n }\n\n // Calculate the coefficients of a Bezier derivative.\n var ax = 9 * (x2 - x3) + 3 * (x4 - x1),\n bx = 6 * (x1 + x3) - 12 * x2,\n cx = 3 * (x2 - x1),\n\n ay = 9 * (y2 - y3) + 3 * (y4 - y1),\n by = 6 * (y1 + y3) - 12 * y2,\n cy = 3 * (y2 - y1);\n\n var integrand = function(t) {\n // Calculate quadratic equations of derivatives for x and y\n var dx = (ax * t + bx) * t + cx,\n dy = (ay * t + by) * t + cy;\n return sqrt(dx * dx + dy * dy);\n };\n\n return integrate(\n integrand, 0, 1, limit || Two.Utils.Curve.RecursionLimit\n );\n\n },\n\n /**\n * @name Two.Utils.getCurveBoundingBox\n * @function\n * @param {Number} x1 - x position of first anchor point.\n * @param {Number} y1 - y position of first anchor point.\n * @param {Number} x2 - x position of first anchor point's \"right\" bezier handle.\n * @param {Number} y2 - y position of first anchor point's \"right\" bezier handle.\n * @param {Number} x3 - x position of second anchor point's \"left\" bezier handle.\n * @param {Number} y3 - y position of second anchor point's \"left\" bezier handle.\n * @param {Number} x4 - x position of second anchor point.\n * @param {Number} y4 - y position of second anchor point.\n * @returns {Object} Object contains min and max `x` / `y` bounds.\n * @see {@link https://github.com/adobe-webplatform/Snap.svg/blob/master/src/path.js#L856}\n */\n getCurveBoundingBox: function(x1, y1, x2, y2, x3, y3, x4, y4) {\n\n var tvalues = [];\n var bounds = [[], []];\n var a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n for (var i = 0; i < 2; ++i) {\n if (i == 0) {\n b = 6 * x1 - 12 * x2 + 6 * x3;\n a = -3 * x1 + 9 * x2 - 9 * x3 + 3 * x4;\n c = 3 * x2 - 3 * x1;\n } else {\n b = 6 * y1 - 12 * y2 + 6 * y3;\n a = -3 * y1 + 9 * y2 - 9 * y3 + 3 * y4;\n c = 3 * y2 - 3 * y1;\n }\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length;\n var jlen = j;\n var mt;\n\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x1 + 3 * mt * mt * t * x2 + 3 * mt * t * t * x3 + t * t * t * x4;\n bounds[1][j] = mt * mt * mt * y1 + 3 * mt * mt * t * y2 + 3 * mt * t * t * y3 + t * t * t * y4;\n }\n\n bounds[0][jlen] = x1;\n bounds[1][jlen] = y1;\n bounds[0][jlen + 1] = x4;\n bounds[1][jlen + 1] = y4;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n return {\n min: { x: Math.min.apply(0, bounds[0]), y: Math.min.apply(0, bounds[1]) },\n max: { x: Math.max.apply(0, bounds[0]), y: Math.max.apply(0, bounds[1]) }\n };\n\n },\n\n /**\n * @name Two.Utils.integrate\n * @function\n * @param {Function} f\n * @param {Number} a\n * @param {Number} b\n * @param {Integer} n\n * @description Integration for `getCurveLength` calculations.\n * @see [Paper.js]{@link https://github.com/paperjs/paper.js/blob/master/src/util/Numerical.js#L101}\n */\n integrate: function(f, a, b, n) {\n var x = Two.Utils.Curve.abscissas[n - 2],\n w = Two.Utils.Curve.weights[n - 2],\n A = 0.5 * (b - a),\n B = A + a,\n i = 0,\n m = (n + 1) >> 1,\n sum = n & 1 ? w[i++] * f(B) : 0; // Handle odd n\n while (i < m) {\n var Ax = A * x[i];\n sum += w[i++] * (f(B + Ax) + f(B - Ax));\n }\n return A * sum;\n },\n\n /**\n * @name Two.Utils.getCurveFromPoints\n * @function\n * @param {Two.Anchor[]} points\n * @param {Boolean} closed\n * @description Sets the bezier handles on `Two.Anchor`s in the `points` list with estimated values to create a catmull-rom like curve. Used by {@link Two.Path#plot}.\n */\n getCurveFromPoints: function(points, closed) {\n\n var l = points.length, last = l - 1;\n\n for (var i = 0; i < l; i++) {\n\n var point = points[i];\n\n if (!_.isObject(point.controls)) {\n Two.Anchor.AppendCurveProperties(point);\n }\n\n var prev = closed ? mod(i - 1, l) : max(i - 1, 0);\n var next = closed ? mod(i + 1, l) : min(i + 1, last);\n\n var a = points[prev];\n var b = point;\n var c = points[next];\n getControlPoints(a, b, c);\n\n b.command = i === 0 ? Two.Commands.move : Two.Commands.curve;\n\n }\n\n },\n\n /**\n * @name Two.Utils.getControlPoints\n * @function\n * @param {Two.Anchor} a\n * @param {Two.Anchor} b\n * @param {Two.Anchor} c\n * @returns {Two.Anchor} Returns the passed middle point `b`.\n * @description Given three coordinates set the control points for the middle, b, vertex based on its position with the adjacent points.\n */\n getControlPoints: function(a, b, c) {\n\n var a1 = Two.Vector.angleBetween(a, b);\n var a2 = Two.Vector.angleBetween(c, b);\n\n var d1 = Two.Vector.distanceBetween(a, b);\n var d2 = Two.Vector.distanceBetween(c, b);\n\n var mid = (a1 + a2) / 2;\n\n // TODO: Issue 73\n if (d1 < 0.0001 || d2 < 0.0001) {\n if (_.isBoolean(b.relative) && !b.relative) {\n b.controls.left.copy(b);\n b.controls.right.copy(b);\n }\n return b;\n }\n\n d1 *= 0.33; // Why 0.33?\n d2 *= 0.33;\n\n if (a2 < a1) {\n mid += HALF_PI;\n } else {\n mid -= HALF_PI;\n }\n\n b.controls.left.x = cos(mid) * d1;\n b.controls.left.y = sin(mid) * d1;\n\n mid -= PI;\n\n b.controls.right.x = cos(mid) * d2;\n b.controls.right.y = sin(mid) * d2;\n\n if (_.isBoolean(b.relative) && !b.relative) {\n b.controls.left.x += b.x;\n b.controls.left.y += b.y;\n b.controls.right.x += b.x;\n b.controls.right.y += b.y;\n }\n\n return b;\n\n },\n\n /**\n * @name Two.Utils.getReflection\n * @function\n * @param {Two.Vector} a\n * @param {Two.Vector} b\n * @param {Boolean} [relative=false]\n * @returns {Two.Vector} New `Two.Vector` that represents the reflection point.\n * @description Get the reflection of a point `b` about point `a`. Where `a` is in absolute space and `b` is relative to `a`.\n * @see {@link http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes}\n */\n getReflection: function(a, b, relative) {\n\n return new Two.Vector(\n 2 * a.x - (b.x + a.x) - (relative ? a.x : 0),\n 2 * a.y - (b.y + a.y) - (relative ? a.y : 0)\n );\n\n },\n\n /**\n * @name Two.Utils.getAnchorsFromArcData\n * @function\n * @param {Two.Vector} center\n * @param {Radians} xAxisRotation\n * @param {Number} rx - x radius\n * @param {Number} ry - y radius\n * @param {Radians} ts\n * @param {Radians} td\n * @param {Boolean} [ccw=false] - Set path traversal to counter-clockwise\n */\n getAnchorsFromArcData: function(center, xAxisRotation, rx, ry, ts, td, ccw) {\n\n var matrix = new Two.Matrix()\n .translate(center.x, center.y)\n .rotate(xAxisRotation);\n\n var l = Two.Resolution;\n\n return _.map(_.range(l), function(i) {\n\n var pct = (i + 1) / l;\n if (!!ccw) {\n pct = 1 - pct;\n }\n\n var theta = pct * td + ts;\n var x = rx * Math.cos(theta);\n var y = ry * Math.sin(theta);\n\n // x += center.x;\n // y += center.y;\n\n var anchor = new Two.Anchor(x, y);\n Two.Anchor.AppendCurveProperties(anchor);\n anchor.command = Two.Commands.line;\n\n // TODO: Calculate control points here...\n\n return anchor;\n\n });\n\n },\n\n /**\n * @name Two.Utils.lerp\n * @function\n * @param {Number} a - Start value.\n * @param {Number} b - End value.\n * @param {Number} t - Zero-to-one value describing percentage between a and b.\n * @returns {Number}\n * @description Linear interpolation between two values `a` and `b` by an amount `t`.\n */\n lerp: function(a, b, t) {\n return t * (b - a) + a;\n },\n\n /**\n * @name Two.Utils.toFixed\n * @function\n * @param {Number} v - Any float\n * @returns {Number} That float trimmed to the third decimal place.\n * @description A pretty fast toFixed(3) alternative.\n * @see {@link http://jsperf.com/parsefloat-tofixed-vs-math-round/18}\n */\n toFixed: function(v) {\n return Math.floor(v * 1000) / 1000;\n },\n\n /**\n * @name Two.Utils.mod\n * @param {Number} v - The value to modulo\n * @param {Number} l - The value to modulo by\n * @returns {Number}\n * @description Modulo with added functionality to handle negative values in a positive manner.\n */\n mod: function(v, l) {\n\n while (v < 0) {\n v += l;\n }\n\n return v % l;\n\n },\n\n /**\n * @name Two.Utils.Collection\n * @class\n * @extends Two.Utils.Events\n * @description An `Array` like object with additional event propagation on actions. `pop`, `shift`, and `splice` trigger `removed` events. `push`, `unshift`, and `splice` with more than 2 arguments trigger 'inserted'. Finally, `sort` and `reverse` trigger `order` events.\n */\n Collection: function() {\n\n Array.call(this);\n\n if (arguments.length > 1) {\n Array.prototype.push.apply(this, arguments);\n } else if (arguments[0] && Array.isArray(arguments[0])) {\n Array.prototype.push.apply(this, arguments[0]);\n }\n\n },\n\n /**\n * @name Two.Utils.Error\n * @class\n * @description Custom error throwing for Two.js specific identification.\n */\n Error: function(message) {\n this.name = 'two.js';\n this.message = message;\n },\n\n /**\n * @name Two.Utils.Events\n * @interface\n * @description Object inherited by many Two.js objects in order to facilitate custom events.\n */\n Events: {\n\n /**\n * @name Two.Utils.Events.on\n * @function\n * @param {String} name - The name of the event to bind a function to.\n * @param {Function} handler - The function to be invoked when the event is dispatched.\n * @description Call to add a listener to a specific event name.\n */\n on: function(name, handler) {\n\n this._events || (this._events = {});\n var list = this._events[name] || (this._events[name] = []);\n\n list.push(handler);\n\n return this;\n\n },\n\n /**\n * @name Two.Utils.Events.off\n * @function\n * @param {String} [name] - The name of the event intended to be removed.\n * @param {Function} [handler] - The handler intended to be reomved.\n * @description Call to remove listeners from a specific event. If only `name` is passed then all the handlers attached to that `name` will be removed. If no arguments are passed then all handlers for every event on the obejct are removed.\n */\n off: function(name, handler) {\n\n if (!this._events) {\n return this;\n }\n if (!name && !handler) {\n this._events = {};\n return this;\n }\n\n var names = name ? [name] : _.keys(this._events);\n for (var i = 0, l = names.length; i < l; i++) {\n\n var name = names[i];\n var list = this._events[name];\n\n if (!!list) {\n var events = [];\n if (handler) {\n for (var j = 0, k = list.length; j < k; j++) {\n var ev = list[j];\n ev = ev.handler ? ev.handler : ev;\n if (handler && handler !== ev) {\n events.push(ev);\n }\n }\n }\n this._events[name] = events;\n }\n }\n\n return this;\n },\n\n /**\n * @name Two.Utils.Events.trigger\n * @function\n * @param {String} name - The name of the event to dispatch.\n * @param arguments - Anything can be passed after the name and those will be passed on to handlers attached to the event in the order they are passed.\n * @description Call to trigger a custom event. Any additional arguments passed after the name will be passed along to the attached handlers.\n */\n trigger: function(name) {\n if (!this._events) return this;\n var args = slice.call(arguments, 1);\n var events = this._events[name];\n if (events) trigger(this, events, args);\n return this;\n },\n\n listen: function(obj, name, handler) {\n\n var bound = this;\n\n if (obj) {\n\n var event = function () {\n handler.apply(bound, arguments);\n };\n\n // Add references about the object that assigned this listener\n event.obj = obj;\n event.name = name;\n event.handler = handler;\n\n obj.on(name, ev);\n\n }\n\n return this;\n\n },\n\n ignore: function(obj, name, handler) {\n\n obj.off(name, handler);\n return this;\n\n }\n\n }\n\n })\n\n });\n\n /**\n * @name Two.Utils.Events.bind\n * @borrows Two.Utils.Events.on as Two.Utils.Events.bind\n */\n Two.Utils.Events.bind = Two.Utils.Events.on;\n\n /**\n * @name Two.Utils.Events.unbind\n * @borrows Two.Utils.Events.off as Two.Utils.Events.unbind\n */\n Two.Utils.Events.unbind = Two.Utils.Events.off;\n\n var trigger = function(obj, events, args) {\n var method;\n switch (args.length) {\n case 0:\n method = function(i) {\n events[i].call(obj, args[0]);\n };\n break;\n case 1:\n method = function(i) {\n events[i].call(obj, args[0], args[1]);\n };\n break;\n case 2:\n method = function(i) {\n events[i].call(obj, args[0], args[1], args[2]);\n };\n break;\n case 3:\n method = function(i) {\n events[i].call(obj, args[0], args[1], args[2], args[3]);\n };\n break;\n default:\n method = function(i) {\n events[i].apply(obj, args);\n };\n }\n for (var i = 0; i < events.length; i++) {\n method(i);\n }\n };\n\n Two.Utils.Error.prototype = new Error();\n Two.Utils.Error.prototype.constructor = Two.Utils.Error;\n\n Two.Utils.Collection.prototype = new Array();\n Two.Utils.Collection.prototype.constructor = Two.Utils.Collection;\n\n _.extend(Two.Utils.Collection.prototype, Two.Utils.Events, {\n\n pop: function() {\n var popped = Array.prototype.pop.apply(this, arguments);\n this.trigger(Two.Events.remove, [popped]);\n return popped;\n },\n\n shift: function() {\n var shifted = Array.prototype.shift.apply(this, arguments);\n this.trigger(Two.Events.remove, [shifted]);\n return shifted;\n },\n\n push: function() {\n var pushed = Array.prototype.push.apply(this, arguments);\n this.trigger(Two.Events.insert, arguments);\n return pushed;\n },\n\n unshift: function() {\n var unshifted = Array.prototype.unshift.apply(this, arguments);\n this.trigger(Two.Events.insert, arguments);\n return unshifted;\n },\n\n splice: function() {\n var spliced = Array.prototype.splice.apply(this, arguments);\n var inserted;\n\n this.trigger(Two.Events.remove, spliced);\n\n if (arguments.length > 2) {\n inserted = this.slice(arguments[0], arguments[0] + arguments.length - 2);\n this.trigger(Two.Events.insert, inserted);\n this.trigger(Two.Events.order);\n }\n return spliced;\n },\n\n sort: function() {\n Array.prototype.sort.apply(this, arguments);\n this.trigger(Two.Events.order);\n return this;\n },\n\n reverse: function() {\n Array.prototype.reverse.apply(this, arguments);\n this.trigger(Two.Events.order);\n return this;\n }\n\n });\n\n // Localize utils\n\n var getAnchorsFromArcData = Two.Utils.getAnchorsFromArcData,\n getControlPoints = Two.Utils.getControlPoints,\n getCurveFromPoints = Two.Utils.getCurveFromPoints,\n solveSegmentIntersection = Two.Utils.solveSegmentIntersection,\n decoupleShapes = Two.Utils.decoupleShapes,\n mod = Two.Utils.mod,\n getBackingStoreRatio = Two.Utils.getBackingStoreRatio,\n getComponentOnCubicBezier = Two.Utils.getComponentOnCubicBezier,\n getCurveLength = Two.Utils.getCurveLength,\n integrate = Two.Utils.integrate,\n getReflection = Two.Utils.getReflection;\n\n _.extend(Two.prototype, Two.Utils.Events, {\n\n constructor: Two,\n\n /**\n * @name Two#appendTo\n * @function\n * @param {Element} elem - The DOM element to append the Two.js stage to.\n * @description Shorthand method to append your instance of Two.js to the `document`.\n */\n appendTo: function(elem) {\n\n elem.appendChild(this.renderer.domElement);\n return this;\n\n },\n\n /**\n * @name Two#play\n * @function\n * @fires `Two.Events.play` event\n * @description Call to start an internal animation loop.\n * @nota-bene This function initiates a `requestAnimationFrame` loop.\n */\n play: function() {\n\n Two.Utils.setPlaying.call(this, true);\n raf.init();\n return this.trigger(Two.Events.play);\n\n },\n\n /**\n * @name Two#pause\n * @function\n * @fires `Two.Events.pause` event\n * @description Call to stop the internal animation loop for a specific instance of Two.js.\n */\n pause: function() {\n\n this.playing = false;\n return this.trigger(Two.Events.pause);\n\n },\n\n /**\n * @name Two#update\n * @fires `Two.Events.update` event\n * @description Update positions and calculations in one pass before rendering. Then render to the canvas.\n * @nota-bene This function is called automatically if using {@link Two#play} or the `autostart` parameter in construction.\n */\n update: function() {\n\n var animated = !!this._lastFrame;\n var now = perf.now();\n\n if (animated) {\n this.timeDelta = parseFloat((now - this._lastFrame).toFixed(3));\n }\n this._lastFrame = now;\n\n var width = this.width;\n var height = this.height;\n var renderer = this.renderer;\n\n // Update width / height for the renderer\n if (width !== renderer.width || height !== renderer.height) {\n renderer.setSize(width, height, this.ratio);\n }\n\n this.trigger(Two.Events.update, this.frameCount, this.timeDelta);\n\n return this.render();\n\n },\n\n /**\n * @name Two#render\n * @fires `Two.Events.render` event\n * @description Render all drawable and visible objects of the scene.\n */\n render: function() {\n\n this.renderer.render();\n return this.trigger(Two.Events.render, this.frameCount++);\n\n },\n\n // Convenience Methods\n\n /**\n * @name Two#add\n * @function\n * @param {(Two.Shape[]|...Two.Shape)}} [objects] - An array of Two.js objects. Alternatively can add objects as individual arguments.\n * @description A shorthand method to add specific Two.js objects to the scene.\n */\n add: function(o) {\n\n var objects = o;\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n }\n\n this.scene.add(objects);\n return this;\n\n },\n\n /**\n * @name Two#remove\n * @function\n * @param {(Two.Shape[]|...Two.Shape)} [objects] - An array of Two.js objects.\n * @description A shorthand method to remove specific Two.js objects from the scene.\n */\n remove: function(o) {\n\n var objects = o;\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n }\n\n this.scene.remove(objects);\n\n return this;\n\n },\n\n /**\n * @name Two#clear\n * @function\n * @description Remove all all Two.js objects from the scene.\n */\n clear: function() {\n\n this.scene.remove(this.scene.children);\n return this;\n\n },\n\n /**\n * @name Two#makeLine\n * @function\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} x2\n * @param {Number} y2\n * @returns {Two.Line}\n * @description Creates a Two.js line and adds it to the scene.\n */\n makeLine: function(x1, y1, x2, y2) {\n\n var line = new Two.Line(x1, y1, x2, y2);\n this.scene.add(line);\n\n return line;\n\n },\n\n /**\n * @name Two#makeRectangle\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} width\n * @param {Number} height\n * @returns {Two.Rectangle}\n * @description Creates a Two.js rectangle and adds it to the scene.\n */\n makeRectangle: function(x, y, width, height) {\n\n var rect = new Two.Rectangle(x, y, width, height);\n this.scene.add(rect);\n\n return rect;\n\n },\n\n /**\n * @name Two#makeRoundedRectangle\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} width\n * @param {Number} height\n * @param {Number} sides\n * @returns {Two.Rectangle}\n * @description Creates a Two.js rounded rectangle and adds it to the scene.\n */\n makeRoundedRectangle: function(x, y, width, height, sides) {\n\n var rect = new Two.RoundedRectangle(x, y, width, height, sides);\n this.scene.add(rect);\n\n return rect;\n\n },\n\n /**\n * @name Two#makeCircle\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} radius\n * @returns {Two.Circle}\n * @description Creates a Two.js circle and adds it to the scene.\n */\n makeCircle: function(x, y, radius) {\n\n var circle = new Two.Circle(x, y, radius);\n this.scene.add(circle);\n\n return circle;\n\n },\n\n /**\n * @name Two#makeEllipse\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} rx\n * @param {Number} ry\n * @returns {Two.Ellipse}\n * @description Creates a Two.js ellipse and adds it to the scene.\n */\n makeEllipse: function(x, y, rx, ry) {\n\n var ellipse = new Two.Ellipse(x, y, rx, ry);\n this.scene.add(ellipse);\n\n return ellipse;\n\n },\n\n /**\n * @name Two#makeStar\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} outerRadius\n * @param {Number} innerRadius\n * @param {Number} sides\n * @returns {Two.Star}\n * @description Creates a Two.js star and adds it to the scene.\n */\n makeStar: function(ox, oy, outerRadius, innerRadius, sides) {\n\n var star = new Two.Star(ox, oy, outerRadius, innerRadius, sides);\n this.scene.add(star);\n\n return star;\n\n },\n\n /**\n * @name Two#makeCurve\n * @function\n * @param {Two.Anchor[]} [points] - An array of `Two.Anchor` points.\n * @param {...Number} - Alternatively you can pass alternating `x` / `y` coordinate values as individual arguments. These will be combined into `Two.Anchor`s for use in the path.\n * @returns {Two.Path} - Where `path.curved` is set to `true`.\n * @description Creates a Two.js path that is curved and adds it to the scene.\n * @nota-bene In either case of passing an array or passing numbered arguments the last argument is an optional `Boolean` that defines whether the path should be open or closed.\n */\n makeCurve: function(p) {\n\n var l = arguments.length, points = p;\n if (!_.isArray(p)) {\n points = [];\n for (var i = 0; i < l; i+=2) {\n var x = arguments[i];\n if (!_.isNumber(x)) {\n break;\n }\n var y = arguments[i + 1];\n points.push(new Two.Anchor(x, y));\n }\n }\n\n var last = arguments[l - 1];\n var curve = new Two.Path(points, !(_.isBoolean(last) ? last : undefined), true);\n var rect = curve.getBoundingClientRect();\n curve.center().translation\n .set(rect.left + rect.width / 2, rect.top + rect.height / 2);\n\n this.scene.add(curve);\n\n return curve;\n\n },\n\n /**\n * @name Two#makePolygon\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} radius\n * @param {Number} sides\n * @returns {Two.Polygon}\n * @description Creates a Two.js polygon and adds it to the scene.\n */\n makePolygon: function(x, y, radius, sides) {\n\n var poly = new Two.Polygon(x, y, radius, sides);\n this.scene.add(poly);\n\n return poly;\n\n },\n\n /**\n * @name Two#makeArcSegment\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} innerRadius\n * @param {Number} outerRadius\n * @param {Number} startAngle\n * @param {Number} endAngle\n * @param {Number} [resolution=Two.Resolution] - The number of vertices that should comprise the arc segment.\n */\n makeArcSegment: function(ox, oy, ir, or, sa, ea, res) {\n var arcSegment = new Two.ArcSegment(ox, oy, ir, or, sa, ea, res);\n this.scene.add(arcSegment);\n return arcSegment;\n },\n\n /**\n * @name Two#makePath\n * @function\n * @param {Two.Anchor[]} [points] - An array of `Two.Anchor` points.\n * @param {...Number} - Alternatively you can pass alternating `x` / `y` coordinate values as individual arguments. These will be combined into `Two.Anchor`s for use in the path.\n * @returns {Two.Path}\n * @description Creates a Two.js path and adds it to the scene.\n * @nota-bene In either case of passing an array or passing numbered arguments the last argument is an optional `Boolean` that defines whether the path should be open or closed.\n */\n makePath: function(p) {\n\n var l = arguments.length, points = p;\n if (!_.isArray(p)) {\n points = [];\n for (var i = 0; i < l; i+=2) {\n var x = arguments[i];\n if (!_.isNumber(x)) {\n break;\n }\n var y = arguments[i + 1];\n points.push(new Two.Anchor(x, y));\n }\n }\n\n var last = arguments[l - 1];\n var path = new Two.Path(points, !(_.isBoolean(last) ? last : undefined));\n var rect = path.getBoundingClientRect();\n path.center().translation\n .set(rect.left + rect.width / 2, rect.top + rect.height / 2);\n\n this.scene.add(path);\n\n return path;\n\n },\n\n /**\n * @name Two#makeText\n * @function\n * @param {String} message\n * @param {Number} x\n * @param {Number} y\n * @param {Object} [styles] - An object to describe any of the {@link Two.Text.Properties} including `fill`, `stroke`, `linewidth`, `family`, `alignment`, `leading`, `opacity`, etc..\n * @returns {Two.Text}\n * @description Creates a Two.js text object and adds it to the scene.\n */\n makeText: function(message, x, y, styles) {\n var text = new Two.Text(message, x, y, styles);\n this.add(text);\n return text;\n },\n\n /**\n * @name Two#makeLinearGradient\n * @function\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} x2\n * @param {Number} y2\n * @param {...Two.Stop} [stops] - Any number of color stops sometimes reffered to as ramp stops. If none are supplied then the default black-to-white two stop gradient is applied.\n * @returns {Two.LinearGradient}\n * @description Creates a Two.js linear gradient and ads it to the scene. In the case of an effect it's added to an invisible \"definitions\" group.\n */\n makeLinearGradient: function(x1, y1, x2, y2 /* stops */) {\n\n var stops = slice.call(arguments, 4);\n var gradient = new Two.LinearGradient(x1, y1, x2, y2, stops);\n\n this.add(gradient);\n\n return gradient;\n\n },\n\n /**\n * @name Two#makeRadialGradient\n * @function\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} radius\n * @param {...Two.Stop} [stops] - Any number of color stops sometimes reffered to as ramp stops. If none are supplied then the default black-to-white two stop gradient is applied.\n * @returns {Two.RadialGradient}\n * @description Creates a Two.js linear-gradient object and ads it to the scene. In the case of an effect it's added to an invisible \"definitions\" group.\n */\n makeRadialGradient: function(x1, y1, r /* stops */) {\n\n var stops = slice.call(arguments, 3);\n var gradient = new Two.RadialGradient(x1, y1, r, stops);\n\n this.add(gradient);\n\n return gradient;\n\n },\n\n /**\n * @name Two#makeSprite\n * @function\n * @param {(String|Two.Texture)} pathOrTexture - The URL path to an image or an already created `Two.Texture`.\n * @param {Number} x\n * @param {Number} y\n * @param {Number} [columns=1]\n * @param {Number} [rows=1]\n * @param {Integer} [frameRate=0]\n * @param {Boolean} [autostart=false]\n * @returns {Two.Sprite}\n * @description Creates a Two.js sprite object and adds it to the scene. Sprites can be used for still images as well as animations.\n */\n makeSprite: function(path, x, y, cols, rows, frameRate, autostart) {\n\n var sprite = new Two.Sprite(path, x, y, cols, rows, frameRate);\n if (!!autostart) {\n sprite.play();\n }\n this.add(sprite);\n\n return sprite;\n\n },\n\n /**\n * @name Two#makeImageSequence\n * @function\n * @param {(String[]|Two.Texture[])} pathsOrTextures - An array of paths or of `Two.Textures`.\n * @param {Number} x\n * @param {Number} y\n * @param {Number} [frameRate=0]\n * @param {Boolean} [autostart=false]\n * @returns {Two.ImageSequence}\n * @description Creates a Two.js image sequence object and adds it to the scene.\n */\n makeImageSequence: function(paths, x, y, frameRate, autostart) {\n\n var imageSequence = new Two.ImageSequence(paths, x, y, frameRate);\n if (!!autostart) {\n imageSequence.play();\n }\n this.add(imageSequence);\n\n return imageSequence;\n\n },\n\n /**\n * @name Two#makeTexture\n * @function\n * @param {(String|Image|Canvas|Video)} [pathOrSource] - The URL path to an image or a DOM image-like element.\n * @param {Function} [callback] - Function to be invoked when the image is loaded.\n * @returns {Two.Texture}\n * @description Creates a Two.js texture object.\n */\n makeTexture: function(path, callback) {\n\n var texture = new Two.Texture(path, callback);\n return texture;\n\n },\n\n /**\n * @name Two#makeGroup\n * @function\n * @param {(Two.Shape[]|...Two.Shape)} [objects] - Two.js objects to be added to the group in the form of an array or as individual arguments.\n * @returns {Two.Group}\n * @description Creates a Two.js group object and adds it to the scene.\n */\n makeGroup: function(o) {\n\n var objects = o;\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n }\n\n var group = new Two.Group();\n this.scene.add(group);\n group.add(objects);\n\n return group;\n\n },\n\n /**\n * @name Two#interpret\n * @function\n * @param {SvgNode} svgNode - The SVG node to be parsed.\n * @param {Boolean} shallow - Don't create a top-most group but append all content directly.\n * @param {Boolean} add – Automatically add the reconstructed SVG node to scene.\n * @returns {Two.Group}\n * @description Interpret an SVG Node and add it to this instance's scene. The distinction should be made that this doesn't `import` svg's, it solely interprets them into something compatible for Two.js — this is slightly different than a direct transcription.\n */\n interpret: function(svgNode, shallow, add) {\n\n var tag = svgNode.tagName.toLowerCase(),\n add = (typeof add !== 'undefined') ? add : true;\n\n if (!(tag in Two.Utils.read)) {\n return null;\n }\n\n var node = Two.Utils.read[tag].call(this, svgNode);\n\n if (!!add) {\n this.add(shallow && node instanceof Two.Group ? node.children : node);\n }\n\n return node;\n\n },\n\n /**\n * @name Two#load\n * @function\n * @param {String} pathOrSVGContent - The URL path of an SVG file or an SVG document as text.\n * @param {Function} callback - Function to call once loading has completed.\n * @returns {Two.Group}\n * @description Load an SVG file or SVG text and interpret it into Two.js legible objects.\n */\n load: function(text, callback) {\n\n var group = new Two.Group();\n var elem, i, j;\n\n var attach = _.bind(function(data) {\n\n dom.temp.innerHTML = data;\n\n for (i = 0; i < dom.temp.children.length; i++) {\n elem = dom.temp.children[i];\n if (/svg/i.test(elem.nodeName)) {\n // Two.Utils.applySvgViewBox.call(this, group, elem.getAttribute('viewBox'));\n for (j = 0; j < elem.children.length; j++) {\n group.add(this.interpret(elem.children[j]));\n }\n } else {\n group.add(this.interpret(elem));\n }\n }\n\n if (_.isFunction(callback)) {\n var svg = dom.temp.children.length <= 1\n ? dom.temp.children[0] : dom.temp.children;\n callback(group, svg);\n }\n\n }, this);\n\n if (/.*\\.svg$/ig.test(text)) {\n\n Two.Utils.xhr(text, attach);\n\n return group;\n\n }\n\n attach(text);\n\n return group;\n\n }\n\n });\n\n function fitToWindow() {\n\n var wr = document.body.getBoundingClientRect();\n\n var width = this.width = wr.width;\n var height = this.height = wr.height;\n\n this.renderer.setSize(width, height, this.ratio);\n\n }\n\n function updateDimensions(width, height) {\n this.width = width;\n this.height = height;\n this.trigger(Two.Events.resize, width, height);\n }\n\n // Request Animation Frame\n\n var raf = dom.getRequestAnimationFrame();\n\n function loop() {\n\n for (var i = 0; i < Two.Instances.length; i++) {\n var t = Two.Instances[i];\n if (t.playing) {\n t.update();\n }\n }\n\n Two.nextFrameID = raf(loop);\n\n }\n\n if (typeof define === 'function' && define.amd) {\n define('two', [], function() {\n return Two;\n });\n } else if (typeof module != 'undefined' && module.exports) {\n module.exports = Two;\n }\n\n return Two;\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n /**\n * @name Two.Registry\n * @class\n * @description An arbitrary class to manage a directory of things. Mainly used for keeping tabs of textures in Two.js.\n */\n var Registry = Two.Registry = function() {\n\n this.map = {};\n\n };\n\n _.extend(Registry.prototype, {\n\n constructor: Registry,\n\n /**\n * @name Two.Registry#add\n * @function\n * @param {String} id - A unique identifier.\n * @param value - Any type of variable to be registered to the directory.\n * @description Adds any value to the directory. Assigned by the `id`.\n */\n add: function(id, obj) {\n this.map[id] = obj;\n return this;\n },\n\n /**\n * @name Two.Registry#remove\n * @function\n * @param {String} id - A unique identifier.\n * @description Remove any value from the directory by its `id`.\n */\n remove: function(id) {\n delete this.map[id];\n return this;\n },\n\n /**\n * @name Two.Registry#get\n * @function\n * @param {String} id - A unique identifier.\n * @returns value - The associated value. If unavailable then `undefined` is returned.\n * @description Get a registered value by its `id`.\n */\n get: function(id) {\n return this.map[id];\n },\n\n /**\n * @name Two.Registry#contains\n * @function\n * @param {String} id - A unique identifier.\n * @returns {Boolean}\n * @description Convenience method to see if a value is registered to an `id` already.\n */\n contains: function(id) {\n return id in this.map;\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n /**\n * @name Two.Vector\n * @class\n * @param {Number} [x=0] - Any number to represent the horizontal x-component of the vector.\n * @param {Number} [y=0] - Any number to represent the vertical y-component of the vector.\n * @description A class to store x / y component vector data. In addition to storing data `Two.Vector` has suped up methods for commonplace mathematical operations.\n */\n var Vector = Two.Vector = function(x, y) {\n\n /**\n * @name Two.Vector#x\n * @property {Number} - The horizontal x-component of the vector.\n */\n this.x = x || 0;\n\n /**\n * @name Two.Vector#y\n * @property {Number} - The vertical y-component of the vector.\n */\n this.y = y || 0;\n\n };\n\n _.extend(Vector, {\n\n /**\n * @name Two.Vector.zero\n * @readonly\n * @property {Two.Vector} - Handy reference to a vector with component values 0, 0 at all times.\n */\n zero: new Two.Vector(),\n\n /**\n * @name Two.Vector.add\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Two.Vector}\n * @description Add two vectors together.\n */\n add: function(v1, v2) {\n return new Vector(v1.x + v2.x, v1.y + v2.y);\n },\n\n /**\n * @name Two.Vector.sub\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Two.Vector}\n * @description Subtract two vectors: `v2` from `v1`.\n */\n sub: function(v1, v2) {\n return new Vector(v1.x - v2.x, v1.y - v2.y);\n },\n\n /**\n * @name Two.Vector.subtract\n * @borrows Two.Vector.sub as Two.Vector.subtract\n */\n subtract: function(v1, v2) {\n return Vector.sub(v1, v2);\n },\n\n /**\n * @name Two.Vector.ratioBetween\n * @function\n * @param {Two.Vector} A\n * @param {Two.Vector} B\n * @returns {Number} The ratio betwen two points `v1` and `v2`.\n */\n ratioBetween: function(v1, v2) {\n\n return (v1.x * v2.x + v1.y * v2.y) / (v1.length() * v2.length());\n\n },\n\n /**\n * @name Two.Vector.angleBetween\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Radians} The angle between points `v1` and `v2`.\n */\n angleBetween: function(v1, v2) {\n\n var dx, dy;\n\n if (arguments.length >= 4) {\n\n dx = arguments[0] - arguments[2];\n dy = arguments[1] - arguments[3];\n\n return Math.atan2(dy, dx);\n\n }\n\n dx = v1.x - v2.x;\n dy = v1.y - v2.y;\n\n return Math.atan2(dy, dx);\n\n },\n\n /**\n * @name Two.Vector.distanceBetween\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Number} The distance between points `v1` and `v2`. Distance is always positive.\n */\n distanceBetween: function(v1, v2) {\n\n return Math.sqrt(Vector.distanceBetweenSquared(v1, v2));\n\n },\n\n /**\n * @name Two.Vector.distanceBetweenSquared\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Number} The squared distance between points `v1` and `v2`.\n */\n distanceBetweenSquared: function(v1, v2) {\n\n var dx = v1.x - v2.x;\n var dy = v1.y - v2.y;\n\n return dx * dx + dy * dy;\n\n },\n\n /**\n * @name Two.Vector.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Vector` to any object. Handy if you'd like to extend the `Two.Vector` class on a custom class.\n */\n MakeObservable: function(object) {\n\n // /**\n // * Override Backbone bind / on in order to add properly broadcasting.\n // * This allows Two.Vector to not broadcast events unless event listeners\n // * are explicity bound to it.\n // */\n\n object.bind = object.on = function() {\n\n if (!this._bound) {\n this._x = this.x;\n this._y = this.y;\n Object.defineProperty(this, 'x', xgs);\n Object.defineProperty(this, 'y', ygs);\n _.extend(this, BoundProto);\n this._bound = true; // Reserved for event initialization check\n }\n\n Two.Utils.Events.bind.apply(this, arguments);\n\n return this;\n\n };\n\n }\n\n });\n\n _.extend(Vector.prototype, Two.Utils.Events, {\n\n constructor: Vector,\n\n /**\n * @name Two.Vector#set\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Set the x / y components of a vector to specific number values.\n */\n set: function(x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n\n /**\n * @name Two.Vector#copy\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Copy the x / y components of another object `v`.\n */\n copy: function(v) {\n this.x = v.x;\n this.y = v.y;\n return this;\n },\n\n /**\n * @name Two.Vector#clear\n * @function\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Set the x / y component values of the vector to zero.\n */\n clear: function() {\n this.x = 0;\n this.y = 0;\n return this;\n },\n\n /**\n * @name Two.Vector#clone\n * @function\n * @returns {Two.Vector} - A new instance of `Two.Vector`.\n * @description Create a new vector and copy the existing values onto the newly created instance.\n */\n clone: function() {\n return new Vector(this.x, this.y);\n },\n\n /**\n * @name Two.Vector#add\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Add an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#add\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Add the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#add\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Add `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n add: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x += x;\n this.y += x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x += x.x;\n this.y += x.y;\n }\n } else {\n this.x += x;\n this.y += y;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#addSelf\n * @borrows Two.Vector#add as Two.Vector#addSelf\n */\n addSelf: function(v) {\n return this.add.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#sub\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Subtract an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#sub\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Subtract the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#sub\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Subtract `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n sub: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x -= x;\n this.y -= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x -= x.x;\n this.y -= x.y;\n }\n } else {\n this.x -= x;\n this.y -= y;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#subtract\n * @borrows Two.Vector#sub as Two.Vector#subtract\n */\n subtract: function() {\n return this.sub.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#subSelf\n * @borrows Two.Vector#sub as Two.Vector#subSelf\n */\n subSelf: function(v) {\n return this.sub.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#subtractSelf\n * @borrows Two.Vector#sub as Two.Vector#subtractSelf\n */\n subtractSelf: function(v) {\n return this.sub.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#multiply\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Multiply an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#multiply\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Multiply the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#multiply\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Multiply `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n multiply: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x *= x;\n this.y *= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x *= x.x;\n this.y *= x.y;\n }\n } else {\n this.x *= x;\n this.y *= y;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#multiplySelf\n * @borrows Two.Vector#multiply as Two.Vector#multiplySelf\n */\n multiplySelf: function(v) {\n return this.multiply.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#multiplyScalar\n * @function\n * @param {Number} s - The scalar to multiply by.\n * @description Mulitiply the vector by a single number. Shorthand to call {@link Two.Vector#multiply} directly.\n */\n multiplyScalar: function(s) {\n return this.multiply(s);\n },\n\n /**\n * @name Two.Vector#divide\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Divide an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#divide\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Divide the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#divide\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Divide `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n divide: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x /= x;\n this.y /= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x /= x.x;\n this.y /= x.y;\n }\n } else {\n this.x /= x;\n this.y /= y;\n }\n if (_.isNaN(this.x)) {\n this.x = 0;\n }\n if (_.isNaN(this.y)) {\n this.y = 0;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#divideSelf\n * @borrows Two.Vector#divide as Two.Vector#divideSelf\n */\n divideSelf: function(v) {\n return this.divide.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#divideScalar\n * @function\n * @param {Number} s - The scalar to divide by.\n * @description Divide the vector by a single number. Shorthand to call {@link Two.Vector#divide} directly.\n */\n divideScalar: function(s) {\n return this.divide(s);\n },\n\n /**\n * @name Two.Vector#negate\n * @function\n * @description Invert each component's sign value.\n */\n negate: function() {\n return this.multiply(-1);\n },\n\n /**\n * @name Two.Vector#negate\n * @function\n * @returns {Number}\n * @description Get the [dot product]{@link https://en.wikipedia.org/wiki/Dot_product} of the vector.\n */\n dot: function(v) {\n return this.x * v.x + this.y * v.y;\n },\n\n /**\n * @name Two.Vector#length\n * @function\n * @returns {Number}\n * @description Get the length of a vector.\n */\n length: function() {\n return Math.sqrt(this.lengthSquared());\n },\n\n /**\n * @name Two.Vector#lengthSquared\n * @function\n * @returns {Number}\n * @description Get the length of the vector to the power of two. Widely used as less expensive than {@link Two.Vector#length}, because it isn't square-rooting any numbers.\n */\n lengthSquared: function() {\n return this.x * this.x + this.y * this.y;\n },\n\n /**\n * @name Two.Vector#normalize\n * @function\n * @description Normalize the vector from negative one to one.\n */\n normalize: function() {\n return this.divideScalar(this.length());\n },\n\n /**\n * @name Two.Vector#distanceTo\n * @function\n * @returns {Number}\n * @description Get the distance between two vectors.\n */\n distanceTo: function(v) {\n return Math.sqrt(this.distanceToSquared(v));\n },\n\n /**\n * @name Two.Vector#distanceToSquared\n * @function\n * @returns {Number}\n * @description Get the distance between two vectors to the power of two. Widely used as less expensive than {@link Two.Vector#distanceTo}, because it isn't square-rooting any numbers.\n */\n distanceToSquared: function(v) {\n var dx = this.x - v.x,\n dy = this.y - v.y;\n return dx * dx + dy * dy;\n },\n\n /**\n * @name Two.Vector#setLength\n * @function\n * @param {Number} l - length to set vector to.\n * @description Set the length of a vector.\n */\n setLength: function(l) {\n return this.normalize().multiplyScalar(l);\n },\n\n /**\n * @name Two.Vector#equals\n * @function\n * @param {Two.Vector} v - The vector to compare against.\n * @param {Number} [eps=0.0001] - An options epsilon for precision.\n * @returns {Boolean}\n * @description Qualify if one vector roughly equal another. With a margin of error defined by epsilon.\n */\n equals: function(v, eps) {\n eps = (typeof eps === 'undefined') ? 0.0001 : eps;\n return (this.distanceTo(v) < eps);\n },\n\n /**\n * @name Two.Vector#lerp\n * @function\n * @param {Two.Vector} v - The destination vector to step towards.\n * @param {Number} t - The zero to one value of how close the current vector gets to the destination vector.\n * @description Linear interpolate one vector to another by an amount `t` defined as a zero to one number.\n * @see [Matt DesLauriers]{@link https://twitter.com/mattdesl/status/1031305279227478016} has a good thread about this.\n */\n lerp: function(v, t) {\n var x = (v.x - this.x) * t + this.x;\n var y = (v.y - this.y) * t + this.y;\n return this.set(x, y);\n },\n\n /**\n * @name Two.Vector#isZero\n * @function\n * @param {Number} [eps=0.0001] - Optional precision amount to check against.\n * @returns {Boolean}\n * @description Check to see if vector is roughly zero, based on the `epsilon` precision value.\n */\n isZero: function(eps) {\n eps = (typeof eps === 'undefined') ? 0.0001 : eps;\n return (this.length() < eps);\n },\n\n /**\n * @name Two.Vector#toString\n * @function\n * @returns {String}\n * @description Return a comma-separated string of x, y value. Great for storing in a database.\n */\n toString: function() {\n return this.x + ', ' + this.y;\n },\n\n /**\n * @name Two.Vector#toObject\n * @function\n * @returns {Object}\n * @description Return a JSON compatible plain object that represents the vector.\n */\n toObject: function() {\n return { x: this.x, y: this.y };\n },\n\n /**\n * @name Two.Vector#rotate\n * @function\n * @param {Radians} radians - The amoun to rotate the vector by.\n * @description Rotate a vector.\n */\n rotate: function(radians) {\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n this.x = this.x * cos - this.y * sin;\n this.y = this.x * sin + this.y * cos;\n return this;\n }\n\n });\n\n // The same set of prototypical functions, but using the underlying\n // getter or setter for `x` and `y` values. This set of functions\n // is used instead of the previously documented ones above when\n // Two.Vector#bind is invoked and there is event dispatching processed\n // on x / y property changes.\n var BoundProto = {\n\n constructor: Vector,\n\n set: function(x, y) {\n this._x = x;\n this._y = y;\n return this.trigger(Two.Events.change);\n },\n\n copy: function(v) {\n this._x = v.x;\n this._y = v.y;\n return this.trigger(Two.Events.change);\n },\n\n clear: function() {\n this._x = 0;\n this._y = 0;\n return this.trigger(Two.Events.change);\n },\n\n clone: function() {\n return new Vector(this._x, this._y);\n },\n\n add: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x += x;\n this._y += x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x += x.x;\n this._y += x.y;\n }\n } else {\n this._x += x;\n this._y += y;\n }\n return this.trigger(Two.Events.change);\n },\n\n sub: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x -= x;\n this._y -= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x -= x.x;\n this._y -= x.y;\n }\n } else {\n this._x -= x;\n this._y -= y;\n }\n return this.trigger(Two.Events.change);\n },\n\n multiply: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x *= x;\n this._y *= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x *= x.x;\n this._y *= x.y;\n }\n } else {\n this._x *= x;\n this._y *= y;\n }\n return this.trigger(Two.Events.change);\n },\n\n divide: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x /= x;\n this._y /= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x /= x.x;\n this._y /= x.y;\n }\n } else {\n this._x /= x;\n this._y /= y;\n }\n if (_.isNaN(this._x)) {\n this._x = 0;\n }\n if (_.isNaN(this._y)) {\n this._y = 0;\n }\n return this.trigger(Two.Events.change);\n },\n\n dot: function(v) {\n return this._x * v.x + this._y * v.y;\n },\n\n lengthSquared: function() {\n return this._x * this._x + this._y * this._y;\n },\n\n distanceToSquared: function(v) {\n var dx = this._x - v.x,\n dy = this._y - v.y;\n return dx * dx + dy * dy;\n },\n\n lerp: function(v, t) {\n var x = (v.x - this._x) * t + this._x;\n var y = (v.y - this._y) * t + this._y;\n return this.set(x, y);\n },\n\n toString: function() {\n return this._x + ', ' + this._y;\n },\n\n toObject: function() {\n return { x: this._x, y: this._y };\n },\n\n rotate: function (radians) {\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n this._x = this._x * cos - this._y * sin;\n this._y = this._x * sin + this._y * cos;\n return this;\n }\n\n };\n\n var xgs = {\n enumerable: true,\n get: function() {\n return this._x;\n },\n set: function(v) {\n this._x = v;\n this.trigger(Two.Events.change, 'x');\n }\n };\n\n var ygs = {\n enumerable: true,\n get: function() {\n return this._y;\n },\n set: function(v) {\n this._y = v;\n this.trigger(Two.Events.change, 'y');\n }\n };\n\n Vector.MakeObservable(Vector.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Localized variables\n var commands = Two.Commands;\n var _ = Two.Utils;\n\n /**\n * @class\n * @name Two.Anchor\n * @param {Number} [x=0] - The x position of the root anchor point.\n * @param {Number} [y=0] - The y position of the root anchor point.\n * @param {Number} [lx=0] - The x position of the left handle point.\n * @param {Number} [ly=0] - The y position of the left handle point.\n * @param {Number} [rx=0] - The x position of the right handle point.\n * @param {Number} [ry=0] - The y position of the right handle point.\n * @param {String} [command=Two.Commands.move] - The command to describe how to render. Applicable commands are {@link Two.Commands}\n * @extends Two.Vector\n * @description An object that holds 3 `Two.Vector`s, the anchor point and its corresponding handles: `left` and `right`. In order to properly describe the bezier curve about the point there is also a command property to describe what type of drawing should occur when Two.js renders the anchors.\n */\n var Anchor = Two.Anchor = function(x, y, lx, ly, rx, ry, command) {\n\n Two.Vector.call(this, x, y);\n\n this._broadcast = _.bind(function() {\n this.trigger(Two.Events.change);\n }, this);\n\n this._command = command || commands.move;\n this._relative = true;\n\n var ilx = _.isNumber(lx);\n var ily = _.isNumber(ly);\n var irx = _.isNumber(rx);\n var iry = _.isNumber(ry);\n\n // Append the `controls` object only if control points are specified,\n // keeping the Two.Anchor inline with a Two.Vector until it needs to\n // evolve beyond those functions — e.g: a simple 2 component vector.\n if (ilx || ily || irx || iry) {\n Two.Anchor.AppendCurveProperties(this);\n }\n\n if (ilx) {\n this.controls.left.x = lx;\n }\n if (ily) {\n this.controls.left.y = ly;\n }\n if (irx) {\n this.controls.right.x = rx;\n }\n if (iry) {\n this.controls.right.y = ry;\n }\n\n };\n\n _.extend(Two.Anchor, {\n\n /**\n * @name Two.Anchor.AppendCurveProperties\n * @function\n * @param {Two.Anchor} anchor - The instance to append the `control`object to.\n * @description Adds the `controls` property as an object with `left` and `right` properties to access the bezier control handles that define how the curve is drawn. It also sets the `relative` property to `true` making vectors in the `controls` object relative to their corresponding root anchor point.\n */\n AppendCurveProperties: function(anchor) {\n\n anchor.relative = true;\n\n /**\n * @name Two.Anchor#controls\n * @property {Object} controls\n * @description An plain object that holds the controls handles for a {@link Two.Anchor}.\n */\n anchor.controls = {};\n\n /**\n * @name Two.Anchor#controls#left\n * @property {Two.Vector} left\n * @description The \"left\" control point to define handles on a bezier curve.\n */\n anchor.controls.left = new Two.Vector(0, 0);\n\n /**\n * @name Two.Anchor#controls#right\n * @property {Two.Vector} right\n * @description The \"left\" control point to define handles on a bezier curve.\n */\n anchor.controls.right = new Two.Vector(0, 0);\n\n },\n\n /**\n * @name Two.Anchor.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Anchor` to any object. Handy if you'd like to extend the `Two.Anchor` class on a custom class.\n */\n MakeObservable: function(object) {\n\n /**\n * @name Two.Anchor#command\n * @property {Two.Commands}\n * @description A draw command associated with the anchor point.\n */\n Object.defineProperty(object, 'command', {\n\n enumerable: true,\n\n get: function() {\n return this._command;\n },\n\n set: function(c) {\n this._command = c;\n if (this._command === commands.curve && !_.isObject(this.controls)) {\n Anchor.AppendCurveProperties(this);\n }\n return this.trigger(Two.Events.change);\n }\n\n });\n\n /**\n * @name Two.Anchor#relative\n * @property {Boolean}\n * @description A boolean to render control points relative to the root anchor point or in global coordinate-space to the rest of the scene.\n */\n Object.defineProperty(object, 'relative', {\n\n enumerable: true,\n\n get: function() {\n return this._relative;\n },\n\n set: function(b) {\n if (this._relative == b) {\n return this;\n }\n this._relative = !!b;\n return this.trigger(Two.Events.change);\n }\n\n });\n\n _.extend(object, Two.Vector.prototype, AnchorProto);\n\n // Make it possible to bind and still have the Anchor specific\n // inheritance from Two.Vector. In this case relying on `Two.Vector`\n // to do much of the heavy event-listener binding / unbinding.\n object.bind = object.on = function() {\n var bound = this._bound;\n Two.Vector.prototype.bind.apply(this, arguments);\n if (!bound) {\n _.extend(this, AnchorProto);\n }\n };\n\n }\n\n });\n\n var AnchorProto = {\n\n constructor: Two.Anchor,\n\n /**\n * @name Two.Anchor#listen\n * @function\n * @description Convenience method used mainly by {@link Two.Path#vertices} to listen and propagate changes from control points up to their respective anchors and further if necessary.\n */\n listen: function() {\n\n if (!_.isObject(this.controls)) {\n Two.Anchor.AppendCurveProperties(this);\n }\n\n this.controls.left.bind(Two.Events.change, this._broadcast);\n this.controls.right.bind(Two.Events.change, this._broadcast);\n\n return this;\n\n },\n\n /**\n * @name Two.Anchor#ignore\n * @function\n * @description Convenience method used mainly by {@link Two.Path#vertices} to ignore changes from a specific anchor's control points.\n */\n ignore: function() {\n\n this.controls.left.unbind(Two.Events.change, this._broadcast);\n this.controls.right.unbind(Two.Events.change, this._broadcast);\n\n return this;\n\n },\n\n /**\n * @name Two.Anchor#copy\n * @function\n * @param {Two.Anchor} v - The anchor to apply values to.\n * @description Copy the properties of one {@link Two.Anchor} onto another.\n */\n copy: function(v) {\n\n this.x = v.x;\n this.y = v.y;\n\n if (_.isString(v.command)) {\n this.command = v.command;\n }\n if (_.isObject(v.controls)) {\n if (!_.isObject(this.controls)) {\n Two.Anchor.AppendCurveProperties(this);\n }\n // TODO: Do we need to listen here?\n this.controls.left.copy(v.controls.left);\n this.controls.right.copy(v.controls.right);\n }\n if (_.isBoolean(v.relative)) {\n this.relative = v.relative;\n }\n\n // TODO: Hack for `Two.Commands.arc`\n if (this.command === Two.Commands.arc) {\n this.rx = v.rx;\n this.ry = v.ry;\n this.xAxisRotation = v.xAxisRotation;\n this.largeArcFlag = v.largeArcFlag;\n this.sweepFlag = v.sweepFlag;\n }\n\n return this;\n\n },\n\n /**\n * @name Two.Anchor#clone\n * @function\n * @returns {Two.Anchor}\n * @description Create a new {@link Two.Anchor}, set all its values to the current instance and return it for use.\n */\n clone: function() {\n\n var controls = this.controls;\n\n var clone = new Two.Anchor(\n this.x,\n this.y,\n controls && controls.left.x,\n controls && controls.left.y,\n controls && controls.right.x,\n controls && controls.right.y,\n this.command\n );\n clone.relative = this._relative;\n return clone;\n\n },\n\n /**\n * @name Two.Anchor#toObject\n * @function\n * @returns {Object} - An object with properties filled out to mirror {@link Two.Anchor}.\n * @description Create a JSON compatible plain object of the current instance. Intended for use with storing values in a database.\n */\n toObject: function() {\n var o = {\n x: this.x,\n y: this.y\n };\n if (this._command) {\n o.command = this._command;\n }\n if (this._relative) {\n o.relative = this._relative;\n }\n if (this.controls) {\n o.controls = {\n left: this.controls.left.toObject(),\n right: this.controls.right.toObject()\n };\n }\n return o;\n },\n\n /**\n * @name Two.Anchor#toString\n * @function\n * @returns {String} - A String with comma-separated values reflecting the various values on the current instance.\n * @description Create a string form of the current instance. Intended for use with storing values in a database. This is lighter to store than the JSON compatible {@link Two.Anchor#toObject}.\n */\n toString: function() {\n if (!this.controls) {\n return [this._x, this._y].join(', ');\n }\n return [this._x, this._y, this.controls.left.x, this.controls.left.y,\n this.controls.right.x, this.controls.right.y, this._command,\n this._relative ? 1 : 0].join(', ');\n }\n\n };\n\n Two.Anchor.MakeObservable(Two.Anchor.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Constants\n\n var cos = Math.cos, sin = Math.sin, tan = Math.tan;\n var _ = Two.Utils, fix = _.toFixed;\n var array = [];\n\n /**\n * @name Two.Matrix\n * @class\n * @param {Number} [a=1] - The value for element at the first column and first row.\n * @param {Number} [b=0] - The value for element at the second column and first row.\n * @param {Number} [c=0] - The value for element at the third column and first row.\n * @param {Number} [d=0] - The value for element at the first column and second row.\n * @param {Number} [e=1] - The value for element at the second column and second row.\n * @param {Number} [f=0] - The value for element at the third column and second row.\n * @param {Number} [g=0] - The value for element at the first column and third row.\n * @param {Number} [h=0] - The value for element at the second column and third row.\n * @param {Number} [i=1] - The value for element at the third column and third row.\n * @description A class to store 3 x 3 transformation matrix information. In addition to storing data `Two.Matrix` has suped up methods for commonplace mathematical operations.\n * @nota-bene Order is based on how to construct transformation strings for the browser.\n */\n var Matrix = Two.Matrix = function(a, b, c, d, e, f) {\n\n /**\n * @name Two.Matrix#elements\n * @property {Array} - The underlying data stored as an array.\n */\n this.elements = new Two.Array(9);\n\n var elements = a;\n if (!_.isArray(elements)) {\n elements = _.toArray(arguments);\n }\n\n // initialize the elements with default values.\n this.identity();\n\n if (elements.length > 0) {\n this.set(elements);\n }\n\n };\n\n _.extend(Matrix, {\n\n /**\n * @name Two.Matrix.Identity\n * @property {Array} - A stored reference to the default value of a 3 x 3 matrix.\n */\n Identity: [\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n ],\n\n /**\n * @name Two.Matrix.Multiply\n * @function\n * @param {Two.Matrix} A\n * @param {Two.Matrix} B\n * @param {Two.Matrix} [C] - An optional matrix to apply the multiplication to.\n * @returns {Two.Matrix} - If an optional `C` matrix isn't passed then a new one is created and returned.\n * @description Multiply two matrices together and return the result.\n */\n Multiply: function(A, B, C) {\n\n if (B.length <= 3) { // Multiply Vector\n\n var x, y, z, e = A;\n\n var a = B[0] || 0,\n b = B[1] || 0,\n c = B[2] || 0;\n\n // Go down rows first\n // a, d, g, b, e, h, c, f, i\n\n x = e[0] * a + e[1] * b + e[2] * c;\n y = e[3] * a + e[4] * b + e[5] * c;\n z = e[6] * a + e[7] * b + e[8] * c;\n\n return { x: x, y: y, z: z };\n\n }\n\n var A0 = A[0], A1 = A[1], A2 = A[2];\n var A3 = A[3], A4 = A[4], A5 = A[5];\n var A6 = A[6], A7 = A[7], A8 = A[8];\n\n var B0 = B[0], B1 = B[1], B2 = B[2];\n var B3 = B[3], B4 = B[4], B5 = B[5];\n var B6 = B[6], B7 = B[7], B8 = B[8];\n\n C = C || new Two.Array(9);\n\n C[0] = A0 * B0 + A1 * B3 + A2 * B6;\n C[1] = A0 * B1 + A1 * B4 + A2 * B7;\n C[2] = A0 * B2 + A1 * B5 + A2 * B8;\n C[3] = A3 * B0 + A4 * B3 + A5 * B6;\n C[4] = A3 * B1 + A4 * B4 + A5 * B7;\n C[5] = A3 * B2 + A4 * B5 + A5 * B8;\n C[6] = A6 * B0 + A7 * B3 + A8 * B6;\n C[7] = A6 * B1 + A7 * B4 + A8 * B7;\n C[8] = A6 * B2 + A7 * B5 + A8 * B8;\n\n return C;\n\n }\n\n });\n\n _.extend(Matrix.prototype, Two.Utils.Events, {\n\n constructor: Matrix,\n\n /**\n * @name Two.Matrix#manual\n * @property {Boolean} - Determines whether Two.js automatically calculates the values for the matrix or if the developer intends to manage the matrix.\n * @nota-bene - Setting to `true` nullifies {@link Two.Shape#translation}, {@link Two.Shape#rotation}, and {@link Two.Shape#scale}.\n */\n manual: false,\n\n /**\n * @name Two.Matrix#set\n * @function\n * @param {Number} a - The value for element at the first column and first row.\n * @param {Number} b - The value for element at the second column and first row.\n * @param {Number} c - The value for element at the third column and first row.\n * @param {Number} d - The value for element at the first column and second row.\n * @param {Number} e - The value for element at the second column and second row.\n * @param {Number} f - The value for element at the third column and second row.\n * @param {Number} g - The value for element at the first column and third row.\n * @param {Number} h - The value for element at the second column and third row.\n * @param {Number} i - The value for element at the third column and third row.\n * @description Set an array of values onto the matrix. Order described in {@link Two.Matrix}.\n */\n\n /**\n * @name Two.Matrix#set\n * @function\n * @param {Number[]} a - The array of elements to apply.\n * @description Set an array of values onto the matrix. Order described in {@link Two.Matrix}.\n */\n set: function(a) {\n\n var elements = a;\n if (arguments.length > 1) {\n elements = _.toArray(arguments);\n }\n\n this.elements[0] = elements[0];\n this.elements[1] = elements[1];\n this.elements[2] = elements[2];\n this.elements[3] = elements[3];\n this.elements[4] = elements[4];\n this.elements[5] = elements[5];\n this.elements[6] = elements[6];\n this.elements[7] = elements[7];\n this.elements[8] = elements[8];\n\n return this.trigger(Two.Events.change);\n\n },\n\n /**\n * @name Two.Matrix#identity\n * @function\n * @description Turn matrix to the identity, like resetting.\n */\n identity: function() {\n\n this.elements[0] = Matrix.Identity[0];\n this.elements[1] = Matrix.Identity[1];\n this.elements[2] = Matrix.Identity[2];\n this.elements[3] = Matrix.Identity[3];\n this.elements[4] = Matrix.Identity[4];\n this.elements[5] = Matrix.Identity[5];\n this.elements[6] = Matrix.Identity[6];\n this.elements[7] = Matrix.Identity[7];\n this.elements[8] = Matrix.Identity[8];\n\n return this.trigger(Two.Events.change);\n\n },\n\n /**\n * @name Two.Matrix.multiply\n * @function\n * @param {Number} a - The scalar to be multiplied.\n * @description Multiply all components of the matrix against a single scalar value.\n */\n\n /**\n * @name Two.Matrix.multiply\n * @function\n * @param {Number} a - The x component to be multiplied.\n * @param {Number} b - The y component to be multiplied.\n * @param {Number} c - The z component to be multiplied.\n * @description Multiply all components of a matrix against a 3 component vector.\n */\n\n /**\n * @name Two.Matrix.multiply\n * @function\n * @param {Number} a - The value at the first column and first row of the matrix to be multiplied.\n * @param {Number} b - The value at the second column and first row of the matrix to be multiplied.\n * @param {Number} c - The value at the third column and first row of the matrix to be multiplied.\n * @param {Number} d - The value at the first column and second row of the matrix to be multiplied.\n * @param {Number} e - The value at the second column and second row of the matrix to be multiplied.\n * @param {Number} f - The value at the third column and second row of the matrix to be multiplied.\n * @param {Number} g - The value at the first column and third row of the matrix to be multiplied.\n * @param {Number} h - The value at the second column and third row of the matrix to be multiplied.\n * @param {Number} i - The value at the third column and third row of the matrix to be multiplied.\n * @description Multiply all components of a matrix against another matrix.\n */\n multiply: function(a, b, c, d, e, f, g, h, i) {\n\n var elements = arguments, l = elements.length;\n\n // Multiply scalar\n\n if (l <= 1) {\n\n this.elements[0] *= a;\n this.elements[1] *= a;\n this.elements[2] *= a;\n this.elements[3] *= a;\n this.elements[4] *= a;\n this.elements[5] *= a;\n this.elements[6] *= a;\n this.elements[7] *= a;\n this.elements[8] *= a;\n\n return this.trigger(Two.Events.change);\n\n }\n\n if (l <= 3) { // Multiply Vector\n\n var x, y, z;\n a = a || 0;\n b = b || 0;\n c = c || 0;\n e = this.elements;\n\n // Go down rows first\n // a, d, g, b, e, h, c, f, i\n\n x = e[0] * a + e[1] * b + e[2] * c;\n y = e[3] * a + e[4] * b + e[5] * c;\n z = e[6] * a + e[7] * b + e[8] * c;\n\n return { x: x, y: y, z: z };\n\n }\n\n // Multiple matrix\n\n var A = this.elements;\n var B = elements;\n\n var A0 = A[0], A1 = A[1], A2 = A[2];\n var A3 = A[3], A4 = A[4], A5 = A[5];\n var A6 = A[6], A7 = A[7], A8 = A[8];\n\n var B0 = B[0], B1 = B[1], B2 = B[2];\n var B3 = B[3], B4 = B[4], B5 = B[5];\n var B6 = B[6], B7 = B[7], B8 = B[8];\n\n this.elements[0] = A0 * B0 + A1 * B3 + A2 * B6;\n this.elements[1] = A0 * B1 + A1 * B4 + A2 * B7;\n this.elements[2] = A0 * B2 + A1 * B5 + A2 * B8;\n\n this.elements[3] = A3 * B0 + A4 * B3 + A5 * B6;\n this.elements[4] = A3 * B1 + A4 * B4 + A5 * B7;\n this.elements[5] = A3 * B2 + A4 * B5 + A5 * B8;\n\n this.elements[6] = A6 * B0 + A7 * B3 + A8 * B6;\n this.elements[7] = A6 * B1 + A7 * B4 + A8 * B7;\n this.elements[8] = A6 * B2 + A7 * B5 + A8 * B8;\n\n return this.trigger(Two.Events.change);\n\n },\n\n /**\n * @name Two.Matrix#inverse\n * @function\n * @param {Two.Matrix} [out] - The optional matrix to apply the inversion to.\n * @description Return an inverted version of the matrix. If no optional one is passed a new matrix is created and returned.\n */\n inverse: function(out) {\n\n var a = this.elements;\n out = out || new Two.Matrix();\n\n var a00 = a[0], a01 = a[1], a02 = a[2];\n var a10 = a[3], a11 = a[4], a12 = a[5];\n var a20 = a[6], a21 = a[7], a22 = a[8];\n\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20;\n\n // Calculate the determinant\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n\n out.elements[0] = b01 * det;\n out.elements[1] = (-a22 * a01 + a02 * a21) * det;\n out.elements[2] = (a12 * a01 - a02 * a11) * det;\n out.elements[3] = b11 * det;\n out.elements[4] = (a22 * a00 - a02 * a20) * det;\n out.elements[5] = (-a12 * a00 + a02 * a10) * det;\n out.elements[6] = b21 * det;\n out.elements[7] = (-a21 * a00 + a01 * a20) * det;\n out.elements[8] = (a11 * a00 - a01 * a10) * det;\n\n return out;\n\n },\n\n /**\n * @name Two.Matrix#scale\n * @function\n * @param {Number} scale - The one dimensional scale to apply to the matrix.\n * @description Uniformly scale the transformation matrix.\n */\n\n /**\n * @name Two.Matrix#scale\n * @function\n * @param {Number} sx - The horizontal scale factor.\n * @param {Number} sy - The vertical scale factor\n * @description Scale the transformation matrix in two dimensions.\n */\n scale: function(sx, sy) {\n\n var l = arguments.length;\n if (l <= 1) {\n sy = sx;\n }\n\n return this.multiply(sx, 0, 0, 0, sy, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#rotate\n * @function\n * @param {Radians} radians - The amount to rotate in radians.\n * @description Rotate the matrix.\n */\n rotate: function(radians) {\n\n var c = cos(radians);\n var s = sin(radians);\n\n return this.multiply(c, -s, 0, s, c, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#translate\n * @function\n * @param {Number} x - The horizontal translation value to apply.\n * @param {Number} y - The vertical translation value to apply.\n * @description Translate the matrix.\n */\n translate: function(x, y) {\n\n return this.multiply(1, 0, x, 0, 1, y, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#skewX\n * @function\n * @param {Radians} radians - The amount to skew in radians.\n * @description Skew the matrix by an angle in the x axis direction.\n */\n skewX: function(radians) {\n\n var a = tan(radians);\n\n return this.multiply(1, a, 0, 0, 1, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#skewY\n * @function\n * @param {Radians} radians - The amount to skew in radians.\n * @description Skew the matrix by an angle in the y axis direction.\n */\n skewY: function(radians) {\n\n var a = tan(radians);\n\n return this.multiply(1, 0, 0, a, 1, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#toString\n * @function\n * @param {Boolean} [fullMatrix=false] - Return the full 9 elements of the matrix or just 6 for 2D transformations.\n * @returns {String} - The transformation matrix as a 6 component string separated by spaces.\n * @description Create a transform string. Used for the Two.js rendering APIs.\n */\n toString: function(fullMatrix) {\n\n array.length = 0;\n this.toArray(fullMatrix, array);\n\n return array.join(' ');\n\n },\n\n /**\n * @name Two.Matrix#toArray\n * @function\n * @param {Boolean} [fullMatrix=false] - Return the full 9 elements of the matrix or just 6 for 2D transformations.\n * @param {Number[]} [output] - An array empty or otherwise to apply the values to.\n * @description Create a transform array. Used for the Two.js rendering APIs.\n */\n toArray: function(fullMatrix, output) {\n\n var elements = this.elements;\n var hasOutput = !!output;\n\n var a = fix(elements[0]);\n var b = fix(elements[1]);\n var c = fix(elements[2]);\n var d = fix(elements[3]);\n var e = fix(elements[4]);\n var f = fix(elements[5]);\n\n if (!!fullMatrix) {\n\n var g = fix(elements[6]);\n var h = fix(elements[7]);\n var i = fix(elements[8]);\n\n if (hasOutput) {\n output[0] = a;\n output[1] = d;\n output[2] = g;\n output[3] = b;\n output[4] = e;\n output[5] = h;\n output[6] = c;\n output[7] = f;\n output[8] = i;\n return;\n }\n\n return [\n a, d, g, b, e, h, c, f, i\n ];\n }\n\n if (hasOutput) {\n output[0] = a;\n output[1] = d;\n output[2] = b;\n output[3] = e;\n output[4] = c;\n output[5] = f;\n return;\n }\n\n return [\n a, d, b, e, c, f // Specific format see LN:19\n ];\n\n },\n\n /**\n * @name Two.Matrix#clone\n * @function\n * @description Clone the current matrix.\n */\n clone: function() {\n var a, b, c, d, e, f, g, h, i;\n\n a = this.elements[0];\n b = this.elements[1];\n c = this.elements[2];\n d = this.elements[3];\n e = this.elements[4];\n f = this.elements[5];\n g = this.elements[6];\n h = this.elements[7];\n i = this.elements[8];\n\n var matrix = new Two.Matrix(a, b, c, d, e, f, g, h, i);\n matrix.manual = this.manual;\n\n return matrix;\n\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Localize variables\n var mod = Two.Utils.mod, toFixed = Two.Utils.toFixed;\n var _ = Two.Utils;\n\n var svg = {\n\n version: 1.1,\n\n ns: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n\n alignments: {\n left: 'start',\n center: 'middle',\n right: 'end'\n },\n\n /**\n * Create an svg namespaced element.\n */\n createElement: function(name, attrs) {\n var tag = name;\n var elem = document.createElementNS(svg.ns, tag);\n if (tag === 'svg') {\n attrs = _.defaults(attrs || {}, {\n version: svg.version\n });\n }\n if (!_.isEmpty(attrs)) {\n svg.setAttributes(elem, attrs);\n }\n return elem;\n },\n\n /**\n * Add attributes from an svg element.\n */\n setAttributes: function(elem, attrs) {\n var keys = Object.keys(attrs);\n for (var i = 0; i < keys.length; i++) {\n if (/href/.test(keys[i])) {\n elem.setAttributeNS(svg.xlink, keys[i], attrs[keys[i]]);\n } else {\n elem.setAttribute(keys[i], attrs[keys[i]]);\n }\n }\n return this;\n },\n\n /**\n * Remove attributes from an svg element.\n */\n removeAttributes: function(elem, attrs) {\n for (var key in attrs) {\n elem.removeAttribute(key);\n }\n return this;\n },\n\n /**\n * Turn a set of vertices into a string for the d property of a path\n * element. It is imperative that the string collation is as fast as\n * possible, because this call will be happening multiple times a\n * second.\n */\n toString: function(points, closed) {\n\n var l = points.length,\n last = l - 1,\n d, // The elusive last Two.Commands.move point\n string = '';\n\n for (var i = 0; i < l; i++) {\n var b = points[i];\n var command;\n var prev = closed ? mod(i - 1, l) : Math.max(i - 1, 0);\n var next = closed ? mod(i + 1, l) : Math.min(i + 1, last);\n\n var a = points[prev];\n var c = points[next];\n\n var vx, vy, ux, uy, ar, bl, br, cl;\n var rx, ry, xAxisRotation, largeArcFlag, sweepFlag;\n\n // Access x and y directly,\n // bypassing the getter\n var x = toFixed(b.x);\n var y = toFixed(b.y);\n\n switch (b.command) {\n\n case Two.Commands.close:\n command = Two.Commands.close;\n break;\n\n case Two.Commands.arc:\n\n rx = b.rx;\n ry = b.ry;\n xAxisRotation = b.xAxisRotation;\n largeArcFlag = b.largeArcFlag;\n sweepFlag = b.sweepFlag;\n\n command = Two.Commands.arc + ' ' + rx + ' ' + ry + ' '\n + xAxisRotation + ' ' + largeArcFlag + ' ' + sweepFlag + ' '\n + x + ' ' + y;\n break;\n\n case Two.Commands.curve:\n\n ar = (a.controls && a.controls.right) || Two.Vector.zero;\n bl = (b.controls && b.controls.left) || Two.Vector.zero;\n\n if (a.relative) {\n vx = toFixed((ar.x + a.x));\n vy = toFixed((ar.y + a.y));\n } else {\n vx = toFixed(ar.x);\n vy = toFixed(ar.y);\n }\n\n if (b.relative) {\n ux = toFixed((bl.x + b.x));\n uy = toFixed((bl.y + b.y));\n } else {\n ux = toFixed(bl.x);\n uy = toFixed(bl.y);\n }\n\n command = ((i === 0) ? Two.Commands.move : Two.Commands.curve) +\n ' ' + vx + ' ' + vy + ' ' + ux + ' ' + uy + ' ' + x + ' ' + y;\n break;\n\n case Two.Commands.move:\n d = b;\n command = Two.Commands.move + ' ' + x + ' ' + y;\n break;\n\n default:\n command = b.command + ' ' + x + ' ' + y;\n\n }\n\n // Add a final point and close it off\n\n if (i >= last && closed) {\n\n if (b.command === Two.Commands.curve) {\n\n // Make sure we close to the most previous Two.Commands.move\n c = d;\n\n br = (b.controls && b.controls.right) || b;\n cl = (c.controls && c.controls.left) || c;\n\n if (b.relative) {\n vx = toFixed((br.x + b.x));\n vy = toFixed((br.y + b.y));\n } else {\n vx = toFixed(br.x);\n vy = toFixed(br.y);\n }\n\n if (c.relative) {\n ux = toFixed((cl.x + c.x));\n uy = toFixed((cl.y + c.y));\n } else {\n ux = toFixed(cl.x);\n uy = toFixed(cl.y);\n }\n\n x = toFixed(c.x);\n y = toFixed(c.y);\n\n command +=\n ' C ' + vx + ' ' + vy + ' ' + ux + ' ' + uy + ' ' + x + ' ' + y;\n\n }\n\n if (b.command !== Two.Commands.close) {\n command += ' Z';\n }\n\n }\n\n string += command + ' ';\n\n }\n\n return string;\n\n },\n\n getClip: function(shape) {\n\n var clip = shape._renderer.clip;\n\n if (!clip) {\n\n var root = shape;\n\n while (root.parent) {\n root = root.parent;\n }\n\n clip = shape._renderer.clip = svg.createElement('clipPath');\n root.defs.appendChild(clip);\n\n }\n\n return clip;\n\n },\n\n group: {\n\n // TODO: Can speed up.\n // TODO: How does this effect a f\n appendChild: function(object) {\n\n var elem = object._renderer.elem;\n\n if (!elem) {\n return;\n }\n\n var tag = elem.nodeName;\n\n if (!tag || /(radial|linear)gradient/i.test(tag) || object._clip) {\n return;\n }\n\n this.elem.appendChild(elem);\n\n },\n\n removeChild: function(object) {\n\n var elem = object._renderer.elem;\n\n if (!elem || elem.parentNode != this.elem) {\n return;\n }\n\n var tag = elem.nodeName;\n\n if (!tag) {\n return;\n }\n\n // Defer subtractions while clipping.\n if (object._clip) {\n return;\n }\n\n this.elem.removeChild(elem);\n\n },\n\n orderChild: function(object) {\n this.elem.appendChild(object._renderer.elem);\n },\n\n renderChild: function(child) {\n svg[child._renderer.type].render.call(child, this);\n },\n\n render: function(domElement) {\n\n this._update();\n\n // Shortcut for hidden objects.\n // Doesn't reset the flags, so changes are stored and\n // applied once the object is visible again\n if (this._opacity === 0 && !this._flagOpacity) {\n return this;\n }\n\n if (!this._renderer.elem) {\n this._renderer.elem = svg.createElement('g', {\n id: this.id\n });\n domElement.appendChild(this._renderer.elem);\n }\n\n // _Update styles for the \n var flagMatrix = this._matrix.manual || this._flagMatrix;\n var context = {\n domElement: domElement,\n elem: this._renderer.elem\n };\n\n if (flagMatrix) {\n this._renderer.elem.setAttribute('transform', 'matrix(' + this._matrix.toString() + ')');\n }\n\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n svg[child._renderer.type].render.call(child, domElement);\n }\n\n if (this._flagOpacity) {\n this._renderer.elem.setAttribute('opacity', this._opacity);\n }\n\n if (this._flagClassName) {\n this._renderer.elem.setAttribute('class', this._className);\n }\n\n if (this._flagAdditions) {\n this.additions.forEach(svg.group.appendChild, context);\n }\n\n if (this._flagSubtractions) {\n this.subtractions.forEach(svg.group.removeChild, context);\n }\n\n if (this._flagOrder) {\n this.children.forEach(svg.group.orderChild, context);\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (this._flagClip) {\n\n // clip = svg.getClip(this);\n // elem = this._renderer.elem;\n\n // if (this._clip) {\n // elem.removeAttribute('id');\n // clip.setAttribute('id', this.id);\n // clip.appendChild(elem);\n // } else {\n // clip.removeAttribute('id');\n // elem.setAttribute('id', this.id);\n // this.parent._renderer.elem.appendChild(elem); // TODO: should be insertBefore\n // }\n\n // }\n\n if (this._flagMask) {\n if (this._mask) {\n this._renderer.elem.setAttribute('clip-path', 'url(#' + this._mask.id + ')');\n } else {\n this._renderer.elem.removeAttribute('clip-path');\n }\n }\n\n return this.flagReset();\n\n }\n\n },\n\n path: {\n\n render: function(domElement) {\n\n this._update();\n\n // Shortcut for hidden objects.\n // Doesn't reset the flags, so changes are stored and\n // applied once the object is visible again\n if (this._opacity === 0 && !this._flagOpacity) {\n return this;\n }\n\n // Collect any attribute that needs to be changed here\n var changed = {};\n\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n\n if (flagMatrix) {\n changed.transform = 'matrix(' + this._matrix.toString() + ')';\n }\n\n if (this._flagVertices) {\n var vertices = svg.toString(this._renderer.vertices, this._closed);\n changed.d = vertices;\n }\n\n if (this._fill && this._fill._renderer) {\n this._fill._update();\n svg[this._fill._renderer.type].render.call(this._fill, domElement, true);\n }\n\n if (this._flagFill) {\n changed.fill = this._fill && this._fill.id\n ? 'url(#' + this._fill.id + ')' : this._fill;\n }\n\n if (this._stroke && this._stroke._renderer) {\n this._stroke._update();\n svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);\n }\n\n if (this._flagStroke) {\n changed.stroke = this._stroke && this._stroke.id\n ? 'url(#' + this._stroke.id + ')' : this._stroke;\n }\n\n if (this._flagLinewidth) {\n changed['stroke-width'] = this._linewidth;\n }\n\n if (this._flagOpacity) {\n changed['stroke-opacity'] = this._opacity;\n changed['fill-opacity'] = this._opacity;\n }\n\n if (this._flagClassName) {\n changed['class'] = this._className;\n }\n\n if (this._flagVisible) {\n changed.visibility = this._visible ? 'visible' : 'hidden';\n }\n\n if (this._flagCap) {\n changed['stroke-linecap'] = this._cap;\n }\n\n if (this._flagJoin) {\n changed['stroke-linejoin'] = this._join;\n }\n\n if (this._flagMiter) {\n changed['stroke-miterlimit'] = this._miter;\n }\n\n if (this.dashes && this.dashes.length > 0) {\n changed['stroke-dasharray'] = this.dashes.join(' ');\n }\n\n // If there is no attached DOM element yet,\n // create it with all necessary attributes.\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n this._renderer.elem = svg.createElement('path', changed);\n domElement.appendChild(this._renderer.elem);\n\n // Otherwise apply all pending attributes\n } else {\n svg.setAttributes(this._renderer.elem, changed);\n }\n\n if (this._flagClip) {\n\n var clip = svg.getClip(this);\n var elem = this._renderer.elem;\n\n if (this._clip) {\n elem.removeAttribute('id');\n clip.setAttribute('id', this.id);\n clip.appendChild(elem);\n } else {\n clip.removeAttribute('id');\n elem.setAttribute('id', this.id);\n this.parent._renderer.elem.appendChild(elem); // TODO: should be insertBefore\n }\n\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (this._flagMask) {\n // if (this._mask) {\n // elem.setAttribute('clip-path', 'url(#' + this._mask.id + ')');\n // } else {\n // elem.removeAttribute('clip-path');\n // }\n // }\n\n return this.flagReset();\n\n }\n\n },\n\n text: {\n\n render: function(domElement) {\n\n this._update();\n\n var changed = {};\n\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n\n if (flagMatrix) {\n changed.transform = 'matrix(' + this._matrix.toString() + ')';\n }\n\n if (this._flagFamily) {\n changed['font-family'] = this._family;\n }\n if (this._flagSize) {\n changed['font-size'] = this._size;\n }\n if (this._flagLeading) {\n changed['line-height'] = this._leading;\n }\n if (this._flagAlignment) {\n changed['text-anchor'] = svg.alignments[this._alignment] || this._alignment;\n }\n if (this._flagBaseline) {\n changed['alignment-baseline'] = changed['dominant-baseline'] = this._baseline;\n }\n if (this._flagStyle) {\n changed['font-style'] = this._style;\n }\n if (this._flagWeight) {\n changed['font-weight'] = this._weight;\n }\n if (this._flagDecoration) {\n changed['text-decoration'] = this._decoration;\n }\n if (this._fill && this._fill._renderer) {\n this._fill._update();\n svg[this._fill._renderer.type].render.call(this._fill, domElement, true);\n }\n if (this._flagFill) {\n changed.fill = this._fill && this._fill.id\n ? 'url(#' + this._fill.id + ')' : this._fill;\n }\n if (this._stroke && this._stroke._renderer) {\n this._stroke._update();\n svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);\n }\n if (this._flagStroke) {\n changed.stroke = this._stroke && this._stroke.id\n ? 'url(#' + this._stroke.id + ')' : this._stroke;\n }\n if (this._flagLinewidth) {\n changed['stroke-width'] = this._linewidth;\n }\n if (this._flagOpacity) {\n changed.opacity = this._opacity;\n }\n if (this._flagClassName) {\n changed['class'] = this._className;\n }\n if (this._flagVisible) {\n changed.visibility = this._visible ? 'visible' : 'hidden';\n }\n if (this.dashes && this.dashes.length > 0) {\n changed['stroke-dasharray'] = this.dashes.join(' ');\n }\n\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n\n this._renderer.elem = svg.createElement('text', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n } else {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._flagClip) {\n\n var clip = svg.getClip(this);\n var elem = this._renderer.elem;\n\n if (this._clip) {\n elem.removeAttribute('id');\n clip.setAttribute('id', this.id);\n clip.appendChild(elem);\n } else {\n clip.removeAttribute('id');\n elem.setAttribute('id', this.id);\n this.parent._renderer.elem.appendChild(elem); // TODO: should be insertBefore\n }\n\n }\n\n if (this._flagValue) {\n this._renderer.elem.textContent = this._value;\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'linear-gradient': {\n\n render: function(domElement, silent) {\n\n if (!silent) {\n this._update();\n }\n\n var changed = {};\n\n if (this._flagEndPoints) {\n changed.x1 = this.left._x;\n changed.y1 = this.left._y;\n changed.x2 = this.right._x;\n changed.y2 = this.right._y;\n }\n\n if (this._flagSpread) {\n changed.spreadMethod = this._spread;\n }\n\n // If there is no attached DOM element yet,\n // create it with all necessary attributes.\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n changed.gradientUnits = 'userSpaceOnUse';\n this._renderer.elem = svg.createElement('linearGradient', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n // Otherwise apply all pending attributes\n } else {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._flagStops) {\n\n var lengthChanged = this._renderer.elem.childNodes.length\n !== this.stops.length;\n\n if (lengthChanged) {\n this._renderer.elem.childNodes.length = 0;\n }\n\n for (var i = 0; i < this.stops.length; i++) {\n\n var stop = this.stops[i];\n var attrs = {};\n\n if (stop._flagOffset) {\n attrs.offset = 100 * stop._offset + '%';\n }\n if (stop._flagColor) {\n attrs['stop-color'] = stop._color;\n }\n if (stop._flagOpacity) {\n attrs['stop-opacity'] = stop._opacity;\n }\n\n if (!stop._renderer.elem) {\n stop._renderer.elem = svg.createElement('stop', attrs);\n } else {\n svg.setAttributes(stop._renderer.elem, attrs);\n }\n\n if (lengthChanged) {\n this._renderer.elem.appendChild(stop._renderer.elem);\n }\n stop.flagReset();\n\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'radial-gradient': {\n\n render: function(domElement, silent) {\n\n if (!silent) {\n this._update();\n }\n\n var changed = {};\n\n if (this._flagCenter) {\n changed.cx = this.center._x;\n changed.cy = this.center._y;\n }\n if (this._flagFocal) {\n changed.fx = this.focal._x;\n changed.fy = this.focal._y;\n }\n\n if (this._flagRadius) {\n changed.r = this._radius;\n }\n\n if (this._flagSpread) {\n changed.spreadMethod = this._spread;\n }\n\n // If there is no attached DOM element yet,\n // create it with all necessary attributes.\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n changed.gradientUnits = 'userSpaceOnUse';\n this._renderer.elem = svg.createElement('radialGradient', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n // Otherwise apply all pending attributes\n } else {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._flagStops) {\n\n var lengthChanged = this._renderer.elem.childNodes.length\n !== this.stops.length;\n\n if (lengthChanged) {\n this._renderer.elem.childNodes.length = 0;\n }\n\n for (var i = 0; i < this.stops.length; i++) {\n\n var stop = this.stops[i];\n var attrs = {};\n\n if (stop._flagOffset) {\n attrs.offset = 100 * stop._offset + '%';\n }\n if (stop._flagColor) {\n attrs['stop-color'] = stop._color;\n }\n if (stop._flagOpacity) {\n attrs['stop-opacity'] = stop._opacity;\n }\n\n if (!stop._renderer.elem) {\n stop._renderer.elem = svg.createElement('stop', attrs);\n } else {\n svg.setAttributes(stop._renderer.elem, attrs);\n }\n\n if (lengthChanged) {\n this._renderer.elem.appendChild(stop._renderer.elem);\n }\n stop.flagReset();\n\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n texture: {\n\n render: function(domElement, silent) {\n\n if (!silent) {\n this._update();\n }\n\n var changed = {};\n var styles = { x: 0, y: 0 };\n var image = this.image;\n\n if (this._flagLoaded && this.loaded) {\n\n switch (image.nodeName.toLowerCase()) {\n\n case 'canvas':\n styles.href = styles['xlink:href'] = image.toDataURL('image/png');\n break;\n case 'img':\n case 'image':\n styles.href = styles['xlink:href'] = this.src;\n break;\n\n }\n\n }\n\n if (this._flagOffset || this._flagLoaded || this._flagScale) {\n\n changed.x = this._offset.x;\n changed.y = this._offset.y;\n\n if (image) {\n\n changed.x -= image.width / 2;\n changed.y -= image.height / 2;\n\n if (this._scale instanceof Two.Vector) {\n changed.x *= this._scale.x;\n changed.y *= this._scale.y;\n } else {\n changed.x *= this._scale;\n changed.y *= this._scale;\n }\n }\n\n if (changed.x > 0) {\n changed.x *= - 1;\n }\n if (changed.y > 0) {\n changed.y *= - 1;\n }\n\n }\n\n if (this._flagScale || this._flagLoaded || this._flagRepeat) {\n\n changed.width = 0;\n changed.height = 0;\n\n if (image) {\n\n styles.width = changed.width = image.width;\n styles.height = changed.height = image.height;\n\n // TODO: Hack / Bandaid\n switch (this._repeat) {\n case 'no-repeat':\n changed.width += 1;\n changed.height += 1;\n break;\n }\n\n if (this._scale instanceof Two.Vector) {\n changed.width *= this._scale.x;\n changed.height *= this._scale.y;\n } else {\n changed.width *= this._scale;\n changed.height *= this._scale;\n }\n }\n\n }\n\n if (this._flagScale || this._flagLoaded) {\n if (!this._renderer.image) {\n this._renderer.image = svg.createElement('image', styles);\n } else if (!_.isEmpty(styles)) {\n svg.setAttributes(this._renderer.image, styles);\n }\n }\n\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n changed.patternUnits = 'userSpaceOnUse';\n this._renderer.elem = svg.createElement('pattern', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n } else if (!_.isEmpty(changed)) {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._renderer.elem && this._renderer.image && !this._renderer.appended) {\n this._renderer.elem.appendChild(this._renderer.image);\n this._renderer.appended = true;\n }\n\n return this.flagReset();\n\n }\n\n }\n\n };\n\n /**\n * @class\n */\n var Renderer = Two[Two.Types.svg] = function(params) {\n\n this.domElement = params.domElement || svg.createElement('svg');\n\n this.scene = new Two.Group();\n this.scene.parent = this;\n\n this.defs = svg.createElement('defs');\n this.domElement.appendChild(this.defs);\n this.domElement.defs = this.defs;\n this.domElement.style.overflow = 'hidden';\n\n };\n\n _.extend(Renderer, {\n\n Utils: svg\n\n });\n\n _.extend(Renderer.prototype, Two.Utils.Events, {\n\n constructor: Renderer,\n\n setSize: function(width, height) {\n\n this.width = width;\n this.height = height;\n\n svg.setAttributes(this.domElement, {\n width: width,\n height: height\n });\n\n return this.trigger(Two.Events.resize, width, height);\n\n },\n\n render: function() {\n\n svg.group.render.call(this.scene, this.domElement);\n\n return this;\n\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n /**\n * Constants\n */\n var mod = Two.Utils.mod, toFixed = Two.Utils.toFixed;\n var getRatio = Two.Utils.getRatio;\n var _ = Two.Utils;\n var emptyArray = [];\n var TWO_PI = Math.PI * 2,\n max = Math.max,\n min = Math.min,\n abs = Math.abs,\n sin = Math.sin,\n cos = Math.cos,\n acos = Math.acos,\n sqrt = Math.sqrt;\n\n // Returns true if this is a non-transforming matrix\n var isDefaultMatrix = function (m) {\n return (m[0] == 1 && m[3] == 0 && m[1] == 0 && m[4] == 1 && m[2] == 0 && m[5] == 0);\n };\n\n var canvas = {\n\n isHidden: /(none|transparent)/i,\n\n alignments: {\n left: 'start',\n middle: 'center',\n right: 'end'\n },\n\n shim: function(elem, name) {\n elem.tagName = elem.nodeName = name || 'canvas';\n elem.nodeType = 1;\n elem.getAttribute = function(prop) {\n return this[prop];\n };\n elem.setAttribute = function(prop, val) {\n this[prop] = val;\n return this;\n };\n return elem;\n },\n\n group: {\n\n renderChild: function(child) {\n canvas[child._renderer.type].render.call(child, this.ctx, true, this.clip);\n },\n\n render: function(ctx) {\n\n // TODO: Add a check here to only invoke _update if need be.\n this._update();\n\n var matrix = this._matrix.elements;\n var parent = this.parent;\n this._renderer.opacity = this._opacity * (parent && parent._renderer ? parent._renderer.opacity : 1);\n\n var defaultMatrix = isDefaultMatrix(matrix);\n\n var mask = this._mask;\n // var clip = this._clip;\n\n if (!this._renderer.context) {\n this._renderer.context = {};\n }\n\n this._renderer.context.ctx = ctx;\n // this._renderer.context.clip = clip;\n\n if (!defaultMatrix) {\n ctx.save();\n ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);\n }\n\n if (mask) {\n canvas[mask._renderer.type].render.call(mask, ctx, true);\n }\n\n if (this.opacity > 0 && this.scale !== 0) {\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n canvas[child._renderer.type].render.call(child, ctx);\n }\n }\n\n if (!defaultMatrix) {\n ctx.restore();\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (clip) {\n // ctx.clip();\n // }\n\n return this.flagReset();\n\n }\n\n },\n\n path: {\n\n render: function(ctx, forced, parentClipped) {\n\n var matrix, stroke, linewidth, fill, opacity, visible, cap, join, miter,\n closed, commands, length, last, next, prev, a, b, c, d, ux, uy, vx, vy,\n ar, bl, br, cl, x, y, mask, clip, defaultMatrix, isOffset, dashes;\n\n // TODO: Add a check here to only invoke _update if need be.\n this._update();\n\n matrix = this._matrix.elements;\n stroke = this._stroke;\n linewidth = this._linewidth;\n fill = this._fill;\n opacity = this._opacity * this.parent._renderer.opacity;\n visible = this._visible;\n cap = this._cap;\n join = this._join;\n miter = this._miter;\n closed = this._closed;\n commands = this._renderer.vertices; // Commands\n length = commands.length;\n last = length - 1;\n defaultMatrix = isDefaultMatrix(matrix);\n dashes = this.dashes;\n\n // mask = this._mask;\n clip = this._clip;\n\n if (!forced && (!visible || clip)) {\n return this;\n }\n\n // Transform\n if (!defaultMatrix) {\n ctx.save();\n ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (mask) {\n // canvas[mask._renderer.type].render.call(mask, ctx, true);\n // }\n\n // Styles\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n canvas[fill._renderer.type].render.call(fill, ctx);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n canvas[stroke._renderer.type].render.call(stroke, ctx);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (miter) {\n ctx.miterLimit = miter;\n }\n if (join) {\n ctx.lineJoin = join;\n }\n if (cap) {\n ctx.lineCap = cap;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n ctx.beginPath();\n\n for (var i = 0; i < commands.length; i++) {\n\n b = commands[i];\n\n x = toFixed(b.x);\n y = toFixed(b.y);\n\n switch (b.command) {\n\n case Two.Commands.close:\n ctx.closePath();\n break;\n\n case Two.Commands.arc:\n\n var rx = b.rx;\n var ry = b.ry;\n var xAxisRotation = b.xAxisRotation;\n var largeArcFlag = b.largeArcFlag;\n var sweepFlag = b.sweepFlag;\n\n prev = closed ? mod(i - 1, length) : max(i - 1, 0);\n a = commands[prev];\n\n var ax = toFixed(a.x);\n var ay = toFixed(a.y);\n\n canvas.renderSvgArcCommand(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y);\n break;\n\n case Two.Commands.curve:\n\n prev = closed ? mod(i - 1, length) : Math.max(i - 1, 0);\n next = closed ? mod(i + 1, length) : Math.min(i + 1, last);\n\n a = commands[prev];\n c = commands[next];\n ar = (a.controls && a.controls.right) || Two.Vector.zero;\n bl = (b.controls && b.controls.left) || Two.Vector.zero;\n\n if (a._relative) {\n vx = (ar.x + toFixed(a.x));\n vy = (ar.y + toFixed(a.y));\n } else {\n vx = toFixed(ar.x);\n vy = toFixed(ar.y);\n }\n\n if (b._relative) {\n ux = (bl.x + toFixed(b.x));\n uy = (bl.y + toFixed(b.y));\n } else {\n ux = toFixed(bl.x);\n uy = toFixed(bl.y);\n }\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n if (i >= last && closed) {\n\n c = d;\n\n br = (b.controls && b.controls.right) || Two.Vector.zero;\n cl = (c.controls && c.controls.left) || Two.Vector.zero;\n\n if (b._relative) {\n vx = (br.x + toFixed(b.x));\n vy = (br.y + toFixed(b.y));\n } else {\n vx = toFixed(br.x);\n vy = toFixed(br.y);\n }\n\n if (c._relative) {\n ux = (cl.x + toFixed(c.x));\n uy = (cl.y + toFixed(c.y));\n } else {\n ux = toFixed(cl.x);\n uy = toFixed(cl.y);\n }\n\n x = toFixed(c.x);\n y = toFixed(c.y);\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n }\n\n break;\n\n case Two.Commands.line:\n ctx.lineTo(x, y);\n break;\n\n case Two.Commands.move:\n d = b;\n ctx.moveTo(x, y);\n break;\n\n }\n }\n\n // Loose ends\n\n if (closed) {\n ctx.closePath();\n }\n\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(emptyArray);\n }\n\n if (!clip && !parentClipped) {\n if (!canvas.isHidden.test(fill)) {\n isOffset = fill._renderer && fill._renderer.offset\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - fill._renderer.offset.x, - fill._renderer.offset.y);\n ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);\n }\n ctx.fill();\n if (isOffset) {\n ctx.restore();\n }\n }\n if (!canvas.isHidden.test(stroke)) {\n isOffset = stroke._renderer && stroke._renderer.offset;\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - stroke._renderer.offset.x, - stroke._renderer.offset.y);\n ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);\n ctx.lineWidth = linewidth / stroke._renderer.scale.x;\n }\n ctx.stroke();\n if (isOffset) {\n ctx.restore();\n }\n }\n }\n\n if (!defaultMatrix) {\n ctx.restore();\n }\n\n if (clip && !parentClipped) {\n ctx.clip();\n }\n\n return this.flagReset();\n\n }\n\n },\n\n text: {\n\n render: function(ctx, forced, parentClipped) {\n\n // TODO: Add a check here to only invoke _update if need be.\n this._update();\n\n var matrix = this._matrix.elements;\n var stroke = this._stroke;\n var linewidth = this._linewidth;\n var fill = this._fill;\n var opacity = this._opacity * this.parent._renderer.opacity;\n var visible = this._visible;\n var defaultMatrix = isDefaultMatrix(matrix);\n var isOffset = fill._renderer && fill._renderer.offset\n && stroke._renderer && stroke._renderer.offset;\n var dashes = this.dashes;\n\n var a, b, c, d, e, sx, sy;\n\n // mask = this._mask;\n var clip = this._clip;\n\n if (!forced && (!visible || clip)) {\n return this;\n }\n\n // Transform\n if (!defaultMatrix) {\n ctx.save();\n ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (mask) {\n // canvas[mask._renderer.type].render.call(mask, ctx, true);\n // }\n\n if (!isOffset) {\n ctx.font = [this._style, this._weight, this._size + 'px/' +\n this._leading + 'px', this._family].join(' ');\n }\n\n ctx.textAlign = canvas.alignments[this._alignment] || this._alignment;\n ctx.textBaseline = this._baseline;\n\n // Styles\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n canvas[fill._renderer.type].render.call(fill, ctx);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n canvas[stroke._renderer.type].render.call(stroke, ctx);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n if (!clip && !parentClipped) {\n\n if (!canvas.isHidden.test(fill)) {\n\n if (fill._renderer && fill._renderer.offset) {\n\n sx = toFixed(fill._renderer.scale.x);\n sy = toFixed(fill._renderer.scale.y);\n\n ctx.save();\n ctx.translate( - toFixed(fill._renderer.offset.x),\n - toFixed(fill._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = this._size / fill._renderer.scale.y;\n b = this._leading / fill._renderer.scale.y;\n ctx.font = [this._style, this._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', this._family].join(' ');\n\n c = fill._renderer.offset.x / fill._renderer.scale.x;\n d = fill._renderer.offset.y / fill._renderer.scale.y;\n\n ctx.fillText(this.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.fillText(this.value, 0, 0);\n }\n\n }\n\n if (!canvas.isHidden.test(stroke)) {\n\n if (stroke._renderer && stroke._renderer.offset) {\n\n sx = toFixed(stroke._renderer.scale.x);\n sy = toFixed(stroke._renderer.scale.y);\n\n ctx.save();\n ctx.translate(- toFixed(stroke._renderer.offset.x),\n - toFixed(stroke._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = this._size / stroke._renderer.scale.y;\n b = this._leading / stroke._renderer.scale.y;\n ctx.font = [this._style, this._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', this._family].join(' ');\n\n c = stroke._renderer.offset.x / stroke._renderer.scale.x;\n d = stroke._renderer.offset.y / stroke._renderer.scale.y;\n e = linewidth / stroke._renderer.scale.x;\n\n ctx.lineWidth = toFixed(e);\n ctx.strokeText(this.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.strokeText(this.value, 0, 0);\n }\n }\n }\n\n if (!defaultMatrix) {\n ctx.restore();\n }\n\n // TODO: Test for text\n if (clip && !parentClipped) {\n ctx.clip();\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'linear-gradient': {\n\n render: function(ctx) {\n\n this._update();\n\n if (!this._renderer.effect || this._flagEndPoints || this._flagStops) {\n\n this._renderer.effect = ctx.createLinearGradient(\n this.left._x, this.left._y,\n this.right._x, this.right._y\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'radial-gradient': {\n\n render: function(ctx) {\n\n this._update();\n\n if (!this._renderer.effect || this._flagCenter || this._flagFocal\n || this._flagRadius || this._flagStops) {\n\n this._renderer.effect = ctx.createRadialGradient(\n this.center._x, this.center._y, 0,\n this.focal._x, this.focal._y, this._radius\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n texture: {\n\n render: function(ctx) {\n\n this._update();\n\n var image = this.image;\n var repeat;\n\n if (!this._renderer.effect || ((this._flagLoaded || this._flagImage || this._flagVideo || this._flagRepeat) && this.loaded)) {\n this._renderer.effect = ctx.createPattern(this.image, this._repeat);\n }\n\n if (this._flagOffset || this._flagLoaded || this._flagScale) {\n\n if (!(this._renderer.offset instanceof Two.Vector)) {\n this._renderer.offset = new Two.Vector();\n }\n\n this._renderer.offset.x = - this._offset.x;\n this._renderer.offset.y = - this._offset.y;\n\n if (image) {\n\n this._renderer.offset.x += image.width / 2;\n this._renderer.offset.y += image.height / 2;\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.offset.x *= this._scale.x;\n this._renderer.offset.y *= this._scale.y;\n } else {\n this._renderer.offset.x *= this._scale;\n this._renderer.offset.y *= this._scale;\n }\n }\n\n }\n\n if (this._flagScale || this._flagLoaded) {\n\n if (!(this._renderer.scale instanceof Two.Vector)) {\n this._renderer.scale = new Two.Vector();\n }\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.scale.copy(this._scale);\n } else {\n this._renderer.scale.set(this._scale, this._scale);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n renderSvgArcCommand: function(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y) {\n\n xAxisRotation = xAxisRotation * Math.PI / 180;\n\n // Ensure radii are positive\n rx = abs(rx);\n ry = abs(ry);\n\n // Compute (x1′, y1′)\n var dx2 = (ax - x) / 2.0;\n var dy2 = (ay - y) / 2.0;\n var x1p = cos(xAxisRotation) * dx2 + sin(xAxisRotation) * dy2;\n var y1p = - sin(xAxisRotation) * dx2 + cos(xAxisRotation) * dy2;\n\n // Compute (cx′, cy′)\n var rxs = rx * rx;\n var rys = ry * ry;\n var x1ps = x1p * x1p;\n var y1ps = y1p * y1p;\n\n // Ensure radii are large enough\n var cr = x1ps / rxs + y1ps / rys;\n\n if (cr > 1) {\n\n // scale up rx,ry equally so cr == 1\n var s = sqrt(cr);\n rx = s * rx;\n ry = s * ry;\n rxs = rx * rx;\n rys = ry * ry;\n\n }\n\n var dq = (rxs * y1ps + rys * x1ps);\n var pq = (rxs * rys - dq) / dq;\n var q = sqrt(max(0, pq));\n if (largeArcFlag === sweepFlag) q = - q;\n var cxp = q * rx * y1p / ry;\n var cyp = - q * ry * x1p / rx;\n\n // Step 3: Compute (cx, cy) from (cx′, cy′)\n var cx = cos(xAxisRotation) * cxp\n - sin(xAxisRotation) * cyp + (ax + x) / 2;\n var cy = sin(xAxisRotation) * cxp\n + cos(xAxisRotation) * cyp + (ay + y) / 2;\n\n // Step 4: Compute θ1 and Δθ\n var startAngle = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n var delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry,\n (- x1p - cxp) / rx, (- y1p - cyp) / ry) % TWO_PI;\n\n var endAngle = startAngle + delta;\n\n var clockwise = sweepFlag === 0;\n\n renderArcEstimate(ctx, cx, cy, rx, ry, startAngle, endAngle,\n clockwise, xAxisRotation);\n\n }\n\n };\n\n var Renderer = Two[Two.Types.canvas] = function(params) {\n // Smoothing property. Defaults to true\n // Set it to false when working with pixel art.\n // false can lead to better performance, since it would use a cheaper interpolation algorithm.\n // It might not make a big difference on GPU backed canvases.\n var smoothing = (params.smoothing !== false);\n this.domElement = params.domElement || document.createElement('canvas');\n this.ctx = this.domElement.getContext('2d');\n this.overdraw = params.overdraw || false;\n\n if (!_.isUndefined(this.ctx.imageSmoothingEnabled)) {\n this.ctx.imageSmoothingEnabled = smoothing;\n }\n\n // Everything drawn on the canvas needs to be added to the scene.\n this.scene = new Two.Group();\n this.scene.parent = this;\n };\n\n\n _.extend(Renderer, {\n\n Utils: canvas\n\n });\n\n _.extend(Renderer.prototype, Two.Utils.Events, {\n\n constructor: Renderer,\n\n setSize: function(width, height, ratio) {\n\n this.width = width;\n this.height = height;\n\n this.ratio = _.isUndefined(ratio) ? getRatio(this.ctx) : ratio;\n\n this.domElement.width = width * this.ratio;\n this.domElement.height = height * this.ratio;\n\n if (this.domElement.style) {\n _.extend(this.domElement.style, {\n width: width + 'px',\n height: height + 'px'\n });\n }\n\n return this.trigger(Two.Events.resize, width, height, ratio);\n\n },\n\n render: function() {\n\n var isOne = this.ratio === 1;\n\n if (!isOne) {\n this.ctx.save();\n this.ctx.scale(this.ratio, this.ratio);\n }\n\n if (!this.overdraw) {\n this.ctx.clearRect(0, 0, this.width, this.height);\n }\n\n canvas.group.render.call(this.scene, this.ctx);\n\n if (!isOne) {\n this.ctx.restore();\n }\n\n return this;\n\n }\n\n });\n\n function renderArcEstimate(ctx, ox, oy, rx, ry, startAngle, endAngle, clockwise, xAxisRotation) {\n\n var epsilon = Two.Utils.Curve.Tolerance.epsilon;\n var deltaAngle = endAngle - startAngle;\n var samePoints = Math.abs(deltaAngle) < epsilon;\n\n // ensures that deltaAngle is 0 .. 2 PI\n deltaAngle = mod(deltaAngle, TWO_PI);\n\n if (deltaAngle < epsilon) {\n\n if (samePoints) {\n\n deltaAngle = 0;\n\n } else {\n\n deltaAngle = TWO_PI;\n\n }\n\n }\n\n if (clockwise === true && ! samePoints) {\n\n if (deltaAngle === TWO_PI) {\n\n deltaAngle = - TWO_PI;\n\n } else {\n\n deltaAngle = deltaAngle - TWO_PI;\n\n }\n\n }\n\n for (var i = 0; i < Two.Resolution; i++) {\n\n var t = i / (Two.Resolution - 1);\n\n var angle = startAngle + t * deltaAngle;\n var x = ox + rx * Math.cos(angle);\n var y = oy + ry * Math.sin(angle);\n\n if (xAxisRotation !== 0) {\n\n var cos = Math.cos(xAxisRotation);\n var sin = Math.sin(xAxisRotation);\n\n var tx = x - ox;\n var ty = y - oy;\n\n // Rotate the point about the center of the ellipse.\n x = tx * cos - ty * sin + ox;\n y = tx * sin + ty * cos + oy;\n\n }\n\n ctx.lineTo(x, y);\n\n }\n\n }\n\n function svgAngle(ux, uy, vx, vy) {\n\n var dot = ux * vx + uy * vy;\n var len = sqrt(ux * ux + uy * uy) * sqrt(vx * vx + vy * vy);\n // floating point precision, slightly over values appear\n var ang = acos(max(-1, min(1, dot / len)));\n if ((ux * vy - uy * vx) < 0) {\n ang = - ang;\n }\n\n return ang;\n\n }\n\n function resetTransform(ctx) {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n /**\n * Constants\n */\n\n var root = Two.root,\n multiplyMatrix = Two.Matrix.Multiply,\n mod = Two.Utils.mod,\n identity = [1, 0, 0, 0, 1, 0, 0, 0, 1],\n transformation = new Two.Array(9),\n getRatio = Two.Utils.getRatio,\n getComputedMatrix = Two.Utils.getComputedMatrix,\n toFixed = Two.Utils.toFixed,\n CanvasUtils = Two[Two.Types.canvas].Utils,\n _ = Two.Utils;\n\n var webgl = {\n\n isHidden: /(none|transparent)/i,\n\n canvas: (root.document ? root.document.createElement('canvas') : { getContext: _.identity }),\n\n alignments: {\n left: 'start',\n middle: 'center',\n right: 'end'\n },\n\n matrix: new Two.Matrix(),\n\n uv: new Two.Array([\n 0, 0,\n 1, 0,\n 0, 1,\n 0, 1,\n 1, 0,\n 1, 1\n ]),\n\n group: {\n\n removeChild: function(child, gl) {\n if (child.children) {\n for (var i = 0; i < child.children.length; i++) {\n webgl.group.removeChild(child.children[i], gl);\n }\n return;\n }\n // Deallocate texture to free up gl memory.\n gl.deleteTexture(child._renderer.texture);\n delete child._renderer.texture;\n },\n\n renderChild: function(child) {\n webgl[child._renderer.type].render.call(child, this.gl, this.program);\n },\n\n render: function(gl, program) {\n\n this._update();\n\n var parent = this.parent;\n var flagParentMatrix = (parent._matrix && parent._matrix.manual) || parent._flagMatrix;\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n\n if (flagParentMatrix || flagMatrix) {\n\n if (!this._renderer.matrix) {\n this._renderer.matrix = new Two.Array(9);\n }\n\n // Reduce amount of object / array creation / deletion\n this._matrix.toArray(true, transformation);\n\n multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);\n this._renderer.scale = this._scale * parent._renderer.scale;\n\n if (flagParentMatrix) {\n this._flagMatrix = true;\n }\n\n }\n\n if (this._mask) {\n\n gl.enable(gl.STENCIL_TEST);\n gl.stencilFunc(gl.ALWAYS, 1, 1);\n\n gl.colorMask(false, false, false, true);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);\n\n webgl[this._mask._renderer.type].render.call(this._mask, gl, program, this);\n\n gl.colorMask(true, true, true, true);\n gl.stencilFunc(gl.NOTEQUAL, 0, 1);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n\n }\n\n this._flagOpacity = parent._flagOpacity || this._flagOpacity;\n\n this._renderer.opacity = this._opacity\n * (parent && parent._renderer ? parent._renderer.opacity : 1);\n\n if (this._flagSubtractions) {\n for (var i = 0; i < this.subtractions.length; i++) {\n webgl.group.removeChild(this.subtractions[i], gl);\n }\n }\n\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n webgl[child._renderer.type].render.call(child, gl, program);\n }\n\n this.children.forEach(webgl.group.renderChild, {\n gl: gl,\n program: program\n });\n\n if (this._mask) {\n\n gl.colorMask(false, false, false, false);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);\n\n webgl[this._mask._renderer.type].render.call(this._mask, gl, program, this);\n\n gl.colorMask(true, true, true, true);\n gl.stencilFunc(gl.NOTEQUAL, 0, 1);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n\n gl.disable(gl.STENCIL_TEST);\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n path: {\n\n updateCanvas: function(elem) {\n\n var next, prev, a, c, ux, uy, vx, vy, ar, bl, br, cl, x, y;\n var isOffset;\n\n var commands = elem._renderer.vertices;\n var canvas = this.canvas;\n var ctx = this.ctx;\n\n // Styles\n var scale = elem._renderer.scale;\n var stroke = elem._stroke;\n var linewidth = elem._linewidth;\n var fill = elem._fill;\n var opacity = elem._renderer.opacity || elem._opacity;\n var cap = elem._cap;\n var join = elem._join;\n var miter = elem._miter;\n var closed = elem._closed;\n var dashes = elem.dashes;\n var length = commands.length;\n var last = length - 1;\n\n canvas.width = Math.max(Math.ceil(elem._renderer.rect.width * scale), 1);\n canvas.height = Math.max(Math.ceil(elem._renderer.rect.height * scale), 1);\n\n var centroid = elem._renderer.rect.centroid;\n var cx = centroid.x;\n var cy = centroid.y;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n webgl[fill._renderer.type].render.call(fill, ctx, elem);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n webgl[stroke._renderer.type].render.call(stroke, ctx, elem);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (miter) {\n ctx.miterLimit = miter;\n }\n if (join) {\n ctx.lineJoin = join;\n }\n if (cap) {\n ctx.lineCap = cap;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n var d;\n ctx.save();\n ctx.scale(scale, scale);\n ctx.translate(cx, cy);\n\n ctx.beginPath();\n for (var i = 0; i < commands.length; i++) {\n\n var b = commands[i];\n\n x = toFixed(b.x);\n y = toFixed(b.y);\n\n switch (b.command) {\n\n case Two.Commands.close:\n ctx.closePath();\n break;\n\n case Two.Commands.arc:\n\n var rx = b.rx;\n var ry = b.ry;\n var xAxisRotation = b.xAxisRotation;\n var largeArcFlag = b.largeArcFlag;\n var sweepFlag = b.sweepFlag;\n\n prev = closed ? mod(i - 1, length) : max(i - 1, 0);\n a = commands[prev];\n\n var ax = toFixed(a.x);\n var ay = toFixed(a.y);\n\n CanvasUtils.renderSvgArcCommand(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y);\n break;\n\n case Two.Commands.curve:\n\n prev = closed ? mod(i - 1, length) : Math.max(i - 1, 0);\n next = closed ? mod(i + 1, length) : Math.min(i + 1, last);\n\n a = commands[prev];\n c = commands[next];\n ar = (a.controls && a.controls.right) || Two.Vector.zero;\n bl = (b.controls && b.controls.left) || Two.Vector.zero;\n\n if (a._relative) {\n vx = toFixed((ar.x + a.x));\n vy = toFixed((ar.y + a.y));\n } else {\n vx = toFixed(ar.x);\n vy = toFixed(ar.y);\n }\n\n if (b._relative) {\n ux = toFixed((bl.x + b.x));\n uy = toFixed((bl.y + b.y));\n } else {\n ux = toFixed(bl.x);\n uy = toFixed(bl.y);\n }\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n if (i >= last && closed) {\n\n c = d;\n\n br = (b.controls && b.controls.right) || Two.Vector.zero;\n cl = (c.controls && c.controls.left) || Two.Vector.zero;\n\n if (b._relative) {\n vx = toFixed((br.x + b.x));\n vy = toFixed((br.y + b.y));\n } else {\n vx = toFixed(br.x);\n vy = toFixed(br.y);\n }\n\n if (c._relative) {\n ux = toFixed((cl.x + c.x));\n uy = toFixed((cl.y + c.y));\n } else {\n ux = toFixed(cl.x);\n uy = toFixed(cl.y);\n }\n\n x = toFixed(c.x);\n y = toFixed(c.y);\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n }\n\n break;\n\n case Two.Commands.line:\n ctx.lineTo(x, y);\n break;\n\n case Two.Commands.move:\n d = b;\n ctx.moveTo(x, y);\n break;\n\n }\n\n }\n\n // Loose ends\n\n if (closed) {\n ctx.closePath();\n }\n\n if (!webgl.isHidden.test(fill)) {\n isOffset = fill._renderer && fill._renderer.offset\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - fill._renderer.offset.x, - fill._renderer.offset.y);\n ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);\n }\n ctx.fill();\n if (isOffset) {\n ctx.restore();\n }\n }\n\n if (!webgl.isHidden.test(stroke)) {\n isOffset = stroke._renderer && stroke._renderer.offset;\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - stroke._renderer.offset.x, - stroke._renderer.offset.y);\n ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);\n ctx.lineWidth = linewidth / stroke._renderer.scale.x;\n }\n ctx.stroke();\n if (isOffset) {\n ctx.restore();\n }\n }\n\n ctx.restore();\n\n },\n\n /**\n * Returns the rect of a set of verts. Typically takes vertices that are\n * \"centered\" around 0 and returns them to be anchored upper-left.\n */\n getBoundingClientRect: function(vertices, border, rect) {\n\n var left = Infinity, right = -Infinity,\n top = Infinity, bottom = -Infinity,\n width, height;\n\n vertices.forEach(function(v) {\n\n var x = v.x, y = v.y, controls = v.controls;\n var a, b, c, d, cl, cr;\n\n top = Math.min(y, top);\n left = Math.min(x, left);\n right = Math.max(x, right);\n bottom = Math.max(y, bottom);\n\n if (!v.controls) {\n return;\n }\n\n cl = controls.left;\n cr = controls.right;\n\n if (!cl || !cr) {\n return;\n }\n\n a = v._relative ? cl.x + x : cl.x;\n b = v._relative ? cl.y + y : cl.y;\n c = v._relative ? cr.x + x : cr.x;\n d = v._relative ? cr.y + y : cr.y;\n\n if (!a || !b || !c || !d) {\n return;\n }\n\n top = Math.min(b, d, top);\n left = Math.min(a, c, left);\n right = Math.max(a, c, right);\n bottom = Math.max(b, d, bottom);\n\n });\n\n // Expand borders\n\n if (_.isNumber(border)) {\n top -= border;\n left -= border;\n right += border;\n bottom += border;\n }\n\n width = right - left;\n height = bottom - top;\n\n rect.top = top;\n rect.left = left;\n rect.right = right;\n rect.bottom = bottom;\n rect.width = width;\n rect.height = height;\n\n if (!rect.centroid) {\n rect.centroid = {};\n }\n\n rect.centroid.x = - left;\n rect.centroid.y = - top;\n\n },\n\n render: function(gl, program, forcedParent) {\n\n if (!this._visible || !this._opacity) {\n return this;\n }\n\n this._update();\n\n // Calculate what changed\n\n var parent = this.parent;\n var flagParentMatrix = parent._matrix.manual || parent._flagMatrix;\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n var flagTexture = this._flagVertices || this._flagFill\n || (this._fill instanceof Two.LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints))\n || (this._fill instanceof Two.RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal))\n || (this._fill instanceof Two.Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale))\n || (this._stroke instanceof Two.LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints))\n || (this._stroke instanceof Two.RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal))\n || (this._stroke instanceof Two.Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale))\n || this._flagStroke || this._flagLinewidth || this._flagOpacity\n || parent._flagOpacity || this._flagVisible || this._flagCap\n || this._flagJoin || this._flagMiter || this._flagScale\n || (this.dashes && this.dashes.length > 0)\n || !this._renderer.texture;\n\n if (flagParentMatrix || flagMatrix) {\n\n if (!this._renderer.matrix) {\n this._renderer.matrix = new Two.Array(9);\n }\n\n // Reduce amount of object / array creation / deletion\n\n this._matrix.toArray(true, transformation);\n\n multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);\n this._renderer.scale = this._scale * parent._renderer.scale;\n\n }\n\n if (flagTexture) {\n\n if (!this._renderer.rect) {\n this._renderer.rect = {};\n }\n\n if (!this._renderer.triangles) {\n this._renderer.triangles = new Two.Array(12);\n }\n\n this._renderer.opacity = this._opacity * parent._renderer.opacity;\n\n webgl.path.getBoundingClientRect(this._renderer.vertices, this._linewidth, this._renderer.rect);\n webgl.getTriangles(this._renderer.rect, this._renderer.triangles);\n\n webgl.updateBuffer.call(webgl, gl, this, program);\n webgl.updateTexture.call(webgl, gl, this);\n\n } else {\n\n // We still need to update child Two elements on the fill and\n // stroke properties.\n if (!_.isString(this._fill)) {\n this._fill._update();\n }\n if (!_.isString(this._stroke)) {\n this._stroke._update();\n }\n\n }\n\n // if (this._mask) {\n // webgl[this._mask._renderer.type].render.call(mask, gl, program, this);\n // }\n\n if (this._clip && !forcedParent) {\n return;\n }\n\n // Draw Texture\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.textureCoordsBuffer);\n\n gl.vertexAttribPointer(program.textureCoords, 2, gl.FLOAT, false, 0, 0);\n\n gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);\n\n\n // Draw Rect\n\n gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.buffer);\n\n gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n return this.flagReset();\n\n }\n\n },\n\n text: {\n\n updateCanvas: function(elem) {\n\n var canvas = this.canvas;\n var ctx = this.ctx;\n\n // Styles\n var scale = elem._renderer.scale;\n var stroke = elem._stroke;\n var linewidth = elem._linewidth * scale;\n var fill = elem._fill;\n var opacity = elem._renderer.opacity || elem._opacity;\n var dashes = elem.dashes;\n\n canvas.width = Math.max(Math.ceil(elem._renderer.rect.width * scale), 1);\n canvas.height = Math.max(Math.ceil(elem._renderer.rect.height * scale), 1);\n\n var centroid = elem._renderer.rect.centroid;\n var cx = centroid.x;\n var cy = centroid.y;\n\n var a, b, c, d, e, sx, sy;\n var isOffset = fill._renderer && fill._renderer.offset\n && stroke._renderer && stroke._renderer.offset;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (!isOffset) {\n ctx.font = [elem._style, elem._weight, elem._size + 'px/' +\n elem._leading + 'px', elem._family].join(' ');\n }\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n // Styles\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n webgl[fill._renderer.type].render.call(fill, ctx, elem);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n webgl[stroke._renderer.type].render.call(stroke, ctx, elem);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n ctx.save();\n ctx.scale(scale, scale);\n ctx.translate(cx, cy);\n\n if (!webgl.isHidden.test(fill)) {\n\n if (fill._renderer && fill._renderer.offset) {\n\n sx = toFixed(fill._renderer.scale.x);\n sy = toFixed(fill._renderer.scale.y);\n\n ctx.save();\n ctx.translate( - toFixed(fill._renderer.offset.x),\n - toFixed(fill._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = elem._size / fill._renderer.scale.y;\n b = elem._leading / fill._renderer.scale.y;\n ctx.font = [elem._style, elem._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', elem._family].join(' ');\n\n c = fill._renderer.offset.x / fill._renderer.scale.x;\n d = fill._renderer.offset.y / fill._renderer.scale.y;\n\n ctx.fillText(elem.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.fillText(elem.value, 0, 0);\n }\n\n }\n\n if (!webgl.isHidden.test(stroke)) {\n\n if (stroke._renderer && stroke._renderer.offset) {\n\n sx = toFixed(stroke._renderer.scale.x);\n sy = toFixed(stroke._renderer.scale.y);\n\n ctx.save();\n ctx.translate(- toFixed(stroke._renderer.offset.x),\n - toFixed(stroke._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = elem._size / stroke._renderer.scale.y;\n b = elem._leading / stroke._renderer.scale.y;\n ctx.font = [elem._style, elem._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', elem._family].join(' ');\n\n c = stroke._renderer.offset.x / stroke._renderer.scale.x;\n d = stroke._renderer.offset.y / stroke._renderer.scale.y;\n e = linewidth / stroke._renderer.scale.x;\n\n ctx.lineWidth = toFixed(e);\n ctx.strokeText(elem.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.strokeText(elem.value, 0, 0);\n }\n\n }\n\n ctx.restore();\n\n },\n\n getBoundingClientRect: function(elem, rect) {\n\n var ctx = webgl.ctx;\n\n ctx.font = [elem._style, elem._weight, elem._size + 'px/' +\n elem._leading + 'px', elem._family].join(' ');\n\n ctx.textAlign = 'center';\n ctx.textBaseline = elem._baseline;\n\n // TODO: Estimate this better\n var width = ctx.measureText(elem._value).width;\n var height = Math.max(elem._size || elem._leading);\n\n if (this._linewidth && !webgl.isHidden.test(this._stroke)) {\n // width += this._linewidth; // TODO: Not sure if the `measure` calcs this.\n height += this._linewidth;\n }\n\n var w = width / 2;\n var h = height / 2;\n\n switch (webgl.alignments[elem._alignment] || elem._alignment) {\n\n case webgl.alignments.left:\n rect.left = 0;\n rect.right = width;\n break;\n case webgl.alignments.right:\n rect.left = - width;\n rect.right = 0;\n break;\n default:\n rect.left = - w;\n rect.right = w;\n }\n\n // TODO: Gradients aren't inherited...\n switch (elem._baseline) {\n case 'bottom':\n rect.top = - height;\n rect.bottom = 0;\n break;\n case 'top':\n rect.top = 0;\n rect.bottom = height;\n break;\n default:\n rect.top = - h;\n rect.bottom = h;\n }\n\n rect.width = width;\n rect.height = height;\n\n if (!rect.centroid) {\n rect.centroid = {};\n }\n\n // TODO:\n rect.centroid.x = w;\n rect.centroid.y = h;\n\n },\n\n render: function(gl, program, forcedParent) {\n\n if (!this._visible || !this._opacity) {\n return this;\n }\n\n this._update();\n\n // Calculate what changed\n\n var parent = this.parent;\n var flagParentMatrix = parent._matrix.manual || parent._flagMatrix;\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n var flagTexture = this._flagVertices || this._flagFill\n || (this._fill instanceof Two.LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints))\n || (this._fill instanceof Two.RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal))\n || (this._fill instanceof Two.Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale))\n || (this._stroke instanceof Two.LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints))\n || (this._stroke instanceof Two.RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal))\n || (this._stroke instanceof Two.Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale))\n || this._flagStroke || this._flagLinewidth || this._flagOpacity\n || parent._flagOpacity || this._flagVisible || this._flagScale\n || this._flagValue || this._flagFamily || this._flagSize\n || this._flagLeading || this._flagAlignment || this._flagBaseline\n || this._flagStyle || this._flagWeight || this._flagDecoration\n || (this.dashes && this.dashes.length > 0)\n || !this._renderer.texture;\n\n if (flagParentMatrix || flagMatrix) {\n\n if (!this._renderer.matrix) {\n this._renderer.matrix = new Two.Array(9);\n }\n\n // Reduce amount of object / array creation / deletion\n\n this._matrix.toArray(true, transformation);\n\n multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);\n this._renderer.scale = this._scale * parent._renderer.scale;\n\n }\n\n if (flagTexture) {\n\n if (!this._renderer.rect) {\n this._renderer.rect = {};\n }\n\n if (!this._renderer.triangles) {\n this._renderer.triangles = new Two.Array(12);\n }\n\n this._renderer.opacity = this._opacity * parent._renderer.opacity;\n\n webgl.text.getBoundingClientRect(this, this._renderer.rect);\n webgl.getTriangles(this._renderer.rect, this._renderer.triangles);\n\n webgl.updateBuffer.call(webgl, gl, this, program);\n webgl.updateTexture.call(webgl, gl, this);\n\n } else {\n\n // We still need to update child Two elements on the fill and\n // stroke properties.\n if (!_.isString(this._fill)) {\n this._fill._update();\n }\n if (!_.isString(this._stroke)) {\n this._stroke._update();\n }\n\n }\n\n // if (this._mask) {\n // webgl[this._mask._renderer.type].render.call(mask, gl, program, this);\n // }\n\n if (this._clip && !forcedParent) {\n return;\n }\n\n // Draw Texture\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.textureCoordsBuffer);\n\n gl.vertexAttribPointer(program.textureCoords, 2, gl.FLOAT, false, 0, 0);\n\n gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);\n\n\n // Draw Rect\n\n gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.buffer);\n\n gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n return this.flagReset();\n\n }\n\n },\n\n 'linear-gradient': {\n\n render: function(ctx, elem) {\n\n if (!ctx.canvas.getContext('2d')) {\n return;\n }\n\n this._update();\n\n if (!this._renderer.effect || this._flagEndPoints || this._flagStops) {\n\n this._renderer.effect = ctx.createLinearGradient(\n this.left._x, this.left._y,\n this.right._x, this.right._y\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'radial-gradient': {\n\n render: function(ctx, elem) {\n\n if (!ctx.canvas.getContext('2d')) {\n return;\n }\n\n this._update();\n\n if (!this._renderer.effect || this._flagCenter || this._flagFocal\n || this._flagRadius || this._flagStops) {\n\n this._renderer.effect = ctx.createRadialGradient(\n this.center._x, this.center._y, 0,\n this.focal._x, this.focal._y, this._radius\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n texture: {\n\n render: function(ctx, elem) {\n\n if (!ctx.canvas.getContext('2d')) {\n return;\n }\n\n this._update();\n\n var image = this.image;\n var repeat;\n\n if (((this._flagLoaded || this._flagImage || this._flagVideo || this._flagRepeat) && this.loaded)) {\n this._renderer.effect = ctx.createPattern(image, this._repeat);\n } else if (!this._renderer.effect) {\n return this.flagReset();\n }\n\n if (this._flagOffset || this._flagLoaded || this._flagScale) {\n\n if (!(this._renderer.offset instanceof Two.Vector)) {\n this._renderer.offset = new Two.Vector();\n }\n\n this._renderer.offset.x = - this._offset.x;\n this._renderer.offset.y = - this._offset.y;\n\n if (image) {\n\n this._renderer.offset.x += image.width / 2;\n this._renderer.offset.y += image.height / 2;\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.offset.x *= this._scale.x;\n this._renderer.offset.y *= this._scale.y;\n } else {\n this._renderer.offset.x *= this._scale;\n this._renderer.offset.y *= this._scale;\n }\n }\n\n }\n\n if (this._flagScale || this._flagLoaded) {\n\n if (!(this._renderer.scale instanceof Two.Vector)) {\n this._renderer.scale = new Two.Vector();\n }\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.scale.copy(this._scale);\n } else {\n this._renderer.scale.set(this._scale, this._scale);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n getTriangles: function(rect, triangles) {\n\n var top = rect.top,\n left = rect.left,\n right = rect.right,\n bottom = rect.bottom;\n\n // First Triangle\n\n triangles[0] = left;\n triangles[1] = top;\n\n triangles[2] = right;\n triangles[3] = top;\n\n triangles[4] = left;\n triangles[5] = bottom;\n\n // Second Triangle\n\n triangles[6] = left;\n triangles[7] = bottom;\n\n triangles[8] = right;\n triangles[9] = top;\n\n triangles[10] = right;\n triangles[11] = bottom;\n\n },\n\n updateTexture: function(gl, elem) {\n\n this[elem._renderer.type].updateCanvas.call(webgl, elem);\n\n if (elem._renderer.texture) {\n gl.deleteTexture(elem._renderer.texture);\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, elem._renderer.textureCoordsBuffer);\n\n // TODO: Is this necessary every time or can we do once?\n // TODO: Create a registry for textures\n elem._renderer.texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, elem._renderer.texture);\n\n // Set the parameters so we can render any size image.\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n if (this.canvas.width <= 0 || this.canvas.height <= 0) {\n return;\n }\n\n // Upload the image into the texture.\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.canvas);\n\n },\n\n updateBuffer: function(gl, elem, program) {\n\n if (_.isObject(elem._renderer.buffer)) {\n gl.deleteBuffer(elem._renderer.buffer);\n }\n\n elem._renderer.buffer = gl.createBuffer();\n\n gl.bindBuffer(gl.ARRAY_BUFFER, elem._renderer.buffer);\n gl.enableVertexAttribArray(program.position);\n\n gl.bufferData(gl.ARRAY_BUFFER, elem._renderer.triangles, gl.STATIC_DRAW);\n\n if (_.isObject(elem._renderer.textureCoordsBuffer)) {\n gl.deleteBuffer(elem._renderer.textureCoordsBuffer);\n }\n\n elem._renderer.textureCoordsBuffer = gl.createBuffer();\n\n gl.bindBuffer(gl.ARRAY_BUFFER, elem._renderer.textureCoordsBuffer);\n gl.enableVertexAttribArray(program.textureCoords);\n\n gl.bufferData(gl.ARRAY_BUFFER, this.uv, gl.STATIC_DRAW);\n\n },\n\n program: {\n\n create: function(gl, shaders) {\n var program, linked, error;\n program = gl.createProgram();\n _.each(shaders, function(s) {\n gl.attachShader(program, s);\n });\n\n gl.linkProgram(program);\n linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (!linked) {\n error = gl.getProgramInfoLog(program);\n gl.deleteProgram(program);\n throw new Two.Utils.Error('unable to link program: ' + error);\n }\n\n return program;\n\n }\n\n },\n\n shaders: {\n\n create: function(gl, source, type) {\n var shader, compiled, error;\n shader = gl.createShader(gl[type]);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (!compiled) {\n error = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Two.Utils.Error('unable to compile shader ' + shader + ': ' + error);\n }\n\n return shader;\n\n },\n\n types: {\n vertex: 'VERTEX_SHADER',\n fragment: 'FRAGMENT_SHADER'\n },\n\n vertex: [\n 'attribute vec2 a_position;',\n 'attribute vec2 a_textureCoords;',\n '',\n 'uniform mat3 u_matrix;',\n 'uniform vec2 u_resolution;',\n '',\n 'varying vec2 v_textureCoords;',\n '',\n 'void main() {',\n ' vec2 projected = (u_matrix * vec3(a_position, 1.0)).xy;',\n ' vec2 normal = projected / u_resolution;',\n ' vec2 clipspace = (normal * 2.0) - 1.0;',\n '',\n ' gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);',\n ' v_textureCoords = a_textureCoords;',\n '}'\n ].join('\\n'),\n\n fragment: [\n 'precision mediump float;',\n '',\n 'uniform sampler2D u_image;',\n 'varying vec2 v_textureCoords;',\n '',\n 'void main() {',\n ' gl_FragColor = texture2D(u_image, v_textureCoords);',\n '}'\n ].join('\\n')\n\n },\n\n TextureRegistry: new Two.Registry()\n\n };\n\n webgl.ctx = webgl.canvas.getContext('2d');\n\n var Renderer = Two[Two.Types.webgl] = function(options) {\n\n var params, gl, vs, fs;\n this.domElement = options.domElement || document.createElement('canvas');\n\n // Everything drawn on the canvas needs to come from the stage.\n this.scene = new Two.Group();\n this.scene.parent = this;\n\n this._renderer = {\n matrix: new Two.Array(identity),\n scale: 1,\n opacity: 1\n };\n this._flagMatrix = true;\n\n // http://games.greggman.com/game/webgl-and-alpha/\n // http://www.khronos.org/registry/webgl/specs/latest/#5.2\n params = _.defaults(options || {}, {\n antialias: false,\n alpha: true,\n premultipliedAlpha: true,\n stencil: true,\n preserveDrawingBuffer: true,\n overdraw: false\n });\n\n this.overdraw = params.overdraw;\n\n gl = this.ctx = this.domElement.getContext('webgl', params) ||\n this.domElement.getContext('experimental-webgl', params);\n\n if (!this.ctx) {\n throw new Two.Utils.Error(\n 'unable to create a webgl context. Try using another renderer.');\n }\n\n // Compile Base Shaders to draw in pixel space.\n vs = webgl.shaders.create(\n gl, webgl.shaders.vertex, webgl.shaders.types.vertex);\n fs = webgl.shaders.create(\n gl, webgl.shaders.fragment, webgl.shaders.types.fragment);\n\n this.program = webgl.program.create(gl, [vs, fs]);\n gl.useProgram(this.program);\n\n // Create and bind the drawing buffer\n\n // look up where the vertex data needs to go.\n this.program.position = gl.getAttribLocation(this.program, 'a_position');\n this.program.matrix = gl.getUniformLocation(this.program, 'u_matrix');\n this.program.textureCoords = gl.getAttribLocation(this.program, 'a_textureCoords');\n\n // Copied from Three.js WebGLRenderer\n gl.disable(gl.DEPTH_TEST);\n\n // Setup some initial statements of the gl context\n gl.enable(gl.BLEND);\n\n // https://code.google.com/p/chromium/issues/detail?id=316393\n // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, gl.TRUE);\n\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA,\n gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n };\n\n _.extend(Renderer, {\n\n Utils: webgl\n\n });\n\n _.extend(Renderer.prototype, Two.Utils.Events, {\n\n constructor: Renderer,\n\n setSize: function(width, height, ratio) {\n\n this.width = width;\n this.height = height;\n\n this.ratio = _.isUndefined(ratio) ? getRatio(this.ctx) : ratio;\n\n this.domElement.width = width * this.ratio;\n this.domElement.height = height * this.ratio;\n\n _.extend(this.domElement.style, {\n width: width + 'px',\n height: height + 'px'\n });\n\n width *= this.ratio;\n height *= this.ratio;\n\n // Set for this.stage parent scaling to account for HDPI\n this._renderer.matrix[0] = this._renderer.matrix[4] = this._renderer.scale = this.ratio;\n\n this._flagMatrix = true;\n\n this.ctx.viewport(0, 0, width, height);\n\n var resolutionLocation = this.ctx.getUniformLocation(\n this.program, 'u_resolution');\n this.ctx.uniform2f(resolutionLocation, width, height);\n\n return this.trigger(Two.Events.resize, width, height, ratio);\n\n },\n\n render: function() {\n\n var gl = this.ctx;\n\n if (!this.overdraw) {\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n }\n\n webgl.group.render.call(this.scene, gl, this.program);\n this._flagMatrix = false;\n\n return this;\n\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n /**\n * @name Two.Shape\n * @class\n * @extends Two.Utils.Events\n * @description The foundational transformation object for the Two.js scenegraph.\n */\n var Shape = Two.Shape = function() {\n\n /**\n * @name Two.Shape#_renderer\n * @property {Object}\n * @private\n * @description A private object to store relevant renderer specific variables.\n * @nota-bene With the {@link Two.SvgRenderer} you can access the underlying SVG element created via `shape._renderer.elem`.\n */\n this._renderer = {};\n this._renderer.flagMatrix = _.bind(Shape.FlagMatrix, this);\n this.isShape = true;\n\n /**\n * @name Two.Shape#id\n * @property {String} - Session specific unique identifier.\n * @nota-bene In the {@link Two.SvgRenderer} change this to change the underlying SVG element's id too.\n */\n this.id = Two.Identifier + Two.uniqueId();\n\n /**\n * @name Two.Shape#classList\n * @property {Array}\n * @description A list of class strings stored if imported / interpreted from an SVG element.\n */\n this.classList = [];\n\n /**\n * @name Two.Shape#_matrix\n * @property\n * @description The transformation matrix of the shape.\n * @nota-bene {@link Two.Shape#translation}, {@link Two.Shape#rotation}, and {@link Two.Shape#scale} apply their values to the matrix when changed. The matrix is what is sent to the renderer to be drawn.\n */\n this._matrix = new Two.Matrix();\n\n /**\n * @name Two.Shape#translation\n * @property {Two.Vector} - The x and y value for where the shape is placed relative to its parent.\n */\n this.translation = new Two.Vector();\n\n /**\n * @name Two.Shape#rotation\n * @property {Radians} - The value in radians for how much the shape is rotated relative to its parent.\n */\n this.rotation = 0;\n\n /**\n * @name Two.Shape#scale\n * @property {Number} - The value for how much the shape is scaled relative to its parent.\n * @nota-bene This value can be replaced with a {@link Two.Vector} to do non-uniform scaling. e.g: `shape.scale = new Two.Vector(2, 1);`\n */\n this.scale = 1;\n\n };\n\n _.extend(Shape, {\n\n /**\n * @name Two.Shape.FlagMatrix\n * @function\n * @description Utility function used in conjunction with event handlers to update the flagMatrix of a shape.\n */\n FlagMatrix: function() {\n this._flagMatrix = true;\n },\n\n /**\n * @name Two.Shape.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Shape` to any object. Handy if you'd like to extend the `Two.Shape` class on a custom class.\n */\n MakeObservable: function(object) {\n\n Object.defineProperty(object, 'translation', {\n enumerable: true,\n get: function() {\n return this._translation;\n },\n set: function(v) {\n if (this._translation) {\n this._translation.unbind(Two.Events.change, this._renderer.flagMatrix);\n }\n this._translation = v;\n this._translation.bind(Two.Events.change, this._renderer.flagMatrix);\n Shape.FlagMatrix.call(this);\n }\n });\n\n Object.defineProperty(object, 'rotation', {\n enumerable: true,\n get: function() {\n return this._rotation;\n },\n set: function(v) {\n this._rotation = v;\n this._flagMatrix = true;\n }\n });\n\n Object.defineProperty(object, 'scale', {\n enumerable: true,\n get: function() {\n return this._scale;\n },\n set: function(v) {\n\n if (this._scale instanceof Two.Vector) {\n this._scale.unbind(Two.Events.change, this._renderer.flagMatrix);\n }\n\n this._scale = v;\n\n if (this._scale instanceof Two.Vector) {\n this._scale.bind(Two.Events.change, this._renderer.flagMatrix);\n }\n\n this._flagMatrix = true;\n this._flagScale = true;\n\n }\n });\n\n }\n\n });\n\n _.extend(Shape.prototype, Two.Utils.Events, {\n\n // Flags\n\n /**\n * @name Two.Shape#_flagMatrix\n * @private\n * @property {Boolean} - Determines whether the matrix needs updating.\n */\n _flagMatrix: true,\n\n /**\n * @name Two.Shape#_flagScale\n * @private\n * @property {Boolean} - Determines whether the scale needs updating.\n */\n _flagScale: false,\n\n // _flagMask: false,\n // _flagClip: false,\n\n // Underlying Properties\n\n /**\n * @name Two.Shape#_translation\n * @private\n * @property {Two.Vector} - The translation values as a {@link Two.Vector}.\n */\n _translation: null,\n\n /**\n * @name Two.Shape#_rotation\n * @private\n * @property {Radians} - The rotation value in radians.\n */\n _rotation: 0,\n\n /**\n * @name Two.Shape#_translation\n * @private\n * @property {Two.Vector} - The translation values as a {@link Two.Vector}.\n */\n _scale: 1,\n\n // _mask: null,\n // _clip: false,\n\n constructor: Shape,\n\n /**\n * @name Two.Shape#addTo\n * @function\n * @param {Two.Group} group - The parent the shape adds itself to.\n * @description Convenience method to add itself to the scenegraph.\n */\n addTo: function(group) {\n group.add(this);\n return this;\n },\n\n /**\n * @name Two.Shape#clone\n * @function\n * @param {Two.Group} [parent] - Optional argument to automatically add the shape to a scenegraph.\n * @returns {Two.Shape}\n * @description Create a new `Two.Shape` with the same values as the current shape.\n */\n clone: function(parent) {\n\n var clone = new Shape();\n\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone._update();\n\n },\n\n /**\n * @name Two.Shape#_update\n * @function\n * @private\n * @param {Boolean} [bubbles=false] - Force the parent to `_update` as well.\n * @description This is called before rendering happens by the renderer. This applies all changes necessary so that rendering is up-to-date but not updated more than it needs to be.\n * @nota-bene Try not to call this method more than once a frame.\n */\n _update: function(bubbles) {\n\n if (!this._matrix.manual && this._flagMatrix) {\n\n this._matrix\n .identity()\n .translate(this.translation.x, this.translation.y);\n\n if (this._scale instanceof Two.Vector) {\n this._matrix.scale(this._scale.x, this._scale.y);\n } else {\n this._matrix.scale(this._scale);\n }\n\n this._matrix.rotate(this.rotation);\n\n }\n\n if (bubbles) {\n if (this.parent && this.parent._update) {\n this.parent._update();\n }\n }\n\n return this;\n\n },\n\n /**\n * @name Two.Shape#flagReset\n * @function\n * @private\n * @description Called internally to reset all flags. Ensures that only properties that change are updated before being sent to the renderer.\n */\n flagReset: function() {\n\n this._flagMatrix = this._flagScale = false;\n\n return this;\n\n }\n\n });\n\n Shape.MakeObservable(Shape.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Constants\n\n var min = Math.min, max = Math.max, round = Math.round,\n ceil = Math.ceil, floor = Math.floor,\n getComputedMatrix = Two.Utils.getComputedMatrix;\n\n var commands = {};\n var _ = Two.Utils;\n\n _.each(Two.Commands, function(v, k) {\n commands[k] = new RegExp(v);\n });\n\n /**\n * @name Two.Path\n * @class\n * @extends Two.Shape\n * @param {Two#Anchor[]} [vertices] - A list of Two.Anchors that represent the order and coordinates to construct the rendered shape.\n * @param {Boolean} [closed=false] - Describes whether the shape is closed or open.\n * @param {Boolean} [curved=false] - Describes whether the shape automatically calculates bezier handles for each vertex.\n * @param {Boolean} [manual=false] - Describes whether the developer controls how vertices are plotted or if Two.js automatically plots coordinates based on closed and curved booleans.\n * @description This is the primary primitive class for creating all drawable shapes in Two.js. Unless specified methods return their instance of `Two.Path` for the purpose of chaining.\n */\n var Path = Two.Path = function(vertices, closed, curved, manual) {\n\n Two.Shape.call(this);\n\n this._renderer.type = 'path';\n this._renderer.flagVertices = _.bind(Path.FlagVertices, this);\n this._renderer.bindVertices = _.bind(Path.BindVertices, this);\n this._renderer.unbindVertices = _.bind(Path.UnbindVertices, this);\n\n this._renderer.flagFill = _.bind(Path.FlagFill, this);\n this._renderer.flagStroke = _.bind(Path.FlagStroke, this);\n this._renderer.vertices = [];\n this._renderer.collection = [];\n\n /**\n * @name Two.Path#closed\n * @property {Boolean} - Determines whether a final line is drawn between the final point in the `vertices` array and the first point.\n */\n this._closed = !!closed;\n\n /**\n * @name Two.Path#curved\n * @property {Boolean} - When the path is `automatic = true` this boolean determines whether the lines between the points are curved or not.\n */\n this._curved = !!curved;\n\n /**\n * @name Two.Path#beginning\n * @property {Number} - Number between zero and one to state the beginning of where the path is rendered.\n * @description `Two.Path.beginning` is a percentage value that represents at what percentage into the path should the renderer start drawing.\n * @nota-bene This is great for animating in and out stroked paths in conjunction with {@link Two.Path#ending}.\n */\n this.beginning = 0;\n\n /**\n * @name Two.Path#ending\n * @property {Number} - Number between zero and one to state the ending of where the path is rendered.\n * @description `Two.Path.ending` is a percentage value that represents at what percentage into the path should the renderer start drawing.\n * @nota-bene This is great for animating in and out stroked paths in conjunction with {@link Two.Path#beginning}.\n */\n this.ending = 1;\n\n // Style properties\n\n /**\n * @name Two.Path#fill\n * @property {(CssColor|Two.Gradient|Two.Texture)} - The value of what the path should be filled in with.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color_value} for more information on CSS Colors.\n */\n this.fill = '#fff';\n\n /**\n * @name Two.Path#stroke\n * @property {(CssColor|Two.Gradient|Two.Texture)} - The value of what the path should be outlined in with.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color_value} for more information on CSS Colors.\n */\n this.stroke = '#000';\n\n /**\n * @name Two.Path#linewidth\n * @property {Number} - The thickness in pixels of the stroke.\n */\n this.linewidth = 1.0;\n\n /**\n * @name Two.Path#opacity\n * @property {Number} - The opaqueness of the path.\n * @nota-bene Can be used in conjunction with CSS Colors that have an alpha value.\n */\n this.opacity = 1.0;\n\n /**\n * @name Two.Path#className\n * @property {String} - A class name to be searched by in {@link Two.Group}s.\n */\n this.className = '';\n\n /**\n * @name Two.Path#visible\n * @property {Boolean} - Display the path or not.\n * @nota-bene For {@link Two.CanvasRenderer} and {@link Two.WebGLRenderer} when set to false all updating is disabled improving performance dramatically with many objects in the scene.\n */\n this.visible = true;\n\n /**\n * @name Two.Path#cap\n * @property {String}\n * @see {@link https://www.w3.org/TR/SVG11/painting.html#StrokeLinecapProperty}\n */\n this.cap = 'butt'; // Default of Adobe Illustrator\n\n /**\n * @name Two.Path#join\n * @property {String}\n * @see {@link https://www.w3.org/TR/SVG11/painting.html#StrokeLinejoinProperty}\n */\n this.join = 'miter'; // Default of Adobe Illustrator\n\n /**\n * @name Two.Path#miter\n * @property {String}\n * @see {@link https://www.w3.org/TR/SVG11/painting.html#StrokeMiterlimitProperty}\n */\n this.miter = 4; // Default of Adobe Illustrator\n\n /**\n * @name Two.Path#vertices\n * @property {Two.Anchor[]} - An ordered list of anchor points for rendering the path.\n * @description An of `Two.Anchor` objects that consist of what form the path takes.\n * @nota-bene The array when manipulating is actually a {@link Two.Utils.Collection}.\n */\n this.vertices = vertices;\n\n /**\n * @name Two.Path#automatic\n * @property {Boolean} - Determines whether or not Two.js should calculate curves, lines, and commands automatically for you or to let the developer manipulate them for themselves.\n */\n this.automatic = !manual;\n\n /**\n * @name Two.Path#dashes\n * @property {String} - List of dash and gap values.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray} for more information on the SVG stroke-dasharray attribute.\n */\n this.dashes = [];\n\n };\n\n _.extend(Path, {\n\n /**\n * @name Two.Path.Properties\n * @property {String[]} - A list of properties that are on every {@link Two.Path}.\n */\n Properties: [\n 'fill',\n 'stroke',\n 'linewidth',\n 'opacity',\n 'className',\n 'visible',\n 'cap',\n 'join',\n 'miter',\n\n 'closed',\n 'curved',\n 'automatic',\n 'beginning',\n 'ending'\n ],\n\n Utils: {\n getCurveLength: getCurveLength\n },\n\n /**\n * @name Two.Path.FlagVertices\n * @function\n * @description Cached method to let renderers know vertices have been updated on a {@link Two.Path}.\n */\n FlagVertices: function() {\n this._flagVertices = true;\n this._flagLength = true;\n if (this.parent) {\n this.parent._flagLength = true;\n }\n },\n\n /**\n * @name Two.Path.BindVertices\n * @function\n * @description Cached method to let {@link Two.Path} know vertices have been added to the instance.\n */\n BindVertices: function(items) {\n\n // This function is called a lot\n // when importing a large SVG\n var i = items.length;\n while (i--) {\n items[i].bind(Two.Events.change, this._renderer.flagVertices);\n }\n\n this._renderer.flagVertices();\n\n },\n\n /**\n * @name Two.Path.BindVertices\n * @function\n * @description Cached method to let {@link Two.Path} know vertices have been removed from the instance.\n */\n UnbindVertices: function(items) {\n\n var i = items.length;\n while (i--) {\n items[i].unbind(Two.Events.change, this._renderer.flagVertices);\n }\n\n this._renderer.flagVertices();\n\n },\n\n /**\n * @name Two.Path.FlagFill\n * @function\n * @description Cached method to let {@link Two.Path} know the fill has changed.\n */\n FlagFill: function() {\n this._flagFill = true;\n },\n\n /**\n * @name Two.Path.FlagFill\n * @function\n * @description Cached method to let {@link Two.Path} know the stroke has changed.\n */\n FlagStroke: function() {\n this._flagStroke = true;\n },\n\n /**\n * @name Two.Path.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Path` to any object. Handy if you'd like to extend the `Two.Path` class on a custom class.\n */\n MakeObservable: function(object) {\n\n Two.Shape.MakeObservable(object);\n\n // Only the 7 defined properties are flagged like this. The subsequent\n // properties behave differently and need to be hand written.\n _.each(Path.Properties.slice(2, 9), Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'fill', {\n enumerable: true,\n get: function() {\n return this._fill;\n },\n set: function(f) {\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.unbind(Two.Events.change, this._renderer.flagFill);\n }\n\n this._fill = f;\n this._flagFill = true;\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.bind(Two.Events.change, this._renderer.flagFill);\n }\n\n }\n });\n\n Object.defineProperty(object, 'stroke', {\n enumerable: true,\n get: function() {\n return this._stroke;\n },\n set: function(f) {\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.unbind(Two.Events.change, this._renderer.flagStroke);\n }\n\n this._stroke = f;\n this._flagStroke = true;\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.bind(Two.Events.change, this._renderer.flagStroke);\n }\n\n }\n });\n\n /**\n * @name Two.Path#length\n * @property {Number} - The sum of distances between all {@link Two.Path#vertices}.\n */\n Object.defineProperty(object, 'length', {\n get: function() {\n if (this._flagLength) {\n this._updateLength();\n }\n return this._length;\n }\n });\n\n Object.defineProperty(object, 'closed', {\n enumerable: true,\n get: function() {\n return this._closed;\n },\n set: function(v) {\n this._closed = !!v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'curved', {\n enumerable: true,\n get: function() {\n return this._curved;\n },\n set: function(v) {\n this._curved = !!v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'automatic', {\n enumerable: true,\n get: function() {\n return this._automatic;\n },\n set: function(v) {\n if (v === this._automatic) {\n return;\n }\n this._automatic = !!v;\n var method = this._automatic ? 'ignore' : 'listen';\n _.each(this.vertices, function(v) {\n v[method]();\n });\n }\n });\n\n Object.defineProperty(object, 'beginning', {\n enumerable: true,\n get: function() {\n return this._beginning;\n },\n set: function(v) {\n this._beginning = v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'ending', {\n enumerable: true,\n get: function() {\n return this._ending;\n },\n set: function(v) {\n this._ending = v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'vertices', {\n\n enumerable: true,\n\n get: function() {\n return this._collection;\n },\n\n set: function(vertices) {\n\n var updateVertices = this._renderer.flagVertices;\n var bindVertices = this._renderer.bindVertices;\n var unbindVertices = this._renderer.unbindVertices;\n\n // Remove previous listeners\n if (this._collection) {\n this._collection\n .unbind(Two.Events.insert, bindVertices)\n .unbind(Two.Events.remove, unbindVertices);\n }\n\n // Create new Collection with copy of vertices\n if (vertices instanceof Two.Utils.Collection) {\n this._collection = vertices;\n } else {\n this._collection = new Two.Utils.Collection(vertices || []);\n }\n\n\n // Listen for Collection changes and bind / unbind\n this._collection\n .bind(Two.Events.insert, bindVertices)\n .bind(Two.Events.remove, unbindVertices);\n\n // Bind Initial Vertices\n bindVertices(this._collection);\n\n }\n\n });\n\n /**\n * @name Two.Path#clip\n * @property {Two.Shape} - Object to define clipping area.\n * @nota-bene This property is currently not working becuase of SVG spec issues found here {@link https://code.google.com/p/chromium/issues/detail?id=370951}.\n */\n Object.defineProperty(object, 'clip', {\n enumerable: true,\n get: function() {\n return this._clip;\n },\n set: function(v) {\n this._clip = v;\n this._flagClip = true;\n }\n });\n\n }\n\n });\n\n _.extend(Path.prototype, Two.Shape.prototype, {\n\n // Flags\n // http://en.wikipedia.org/wiki/Flag\n\n /**\n * @name Two.Path#_flagVertices\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#vertices} need updating.\n */\n _flagVertices: true,\n\n /**\n * @name Two.Path#_flagLength\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#length} needs updating.\n */\n _flagLength: true,\n\n /**\n * @name Two.Path#_flagFill\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#fill} needs updating.\n */\n _flagFill: true,\n\n /**\n * @name Two.Path#_flagStroke\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#stroke} needs updating.\n */\n _flagStroke: true,\n\n /**\n * @name Two.Path#_flagLinewidth\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#linewidth} needs updating.\n */\n _flagLinewidth: true,\n\n /**\n * @name Two.Path#_flagOpacity\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#opacity} needs updating.\n */\n _flagOpacity: true,\n\n /**\n * @name Two.Path#_flagVisible\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#visible} needs updating.\n */\n _flagVisible: true,\n\n /**\n * @name Two.Path#_flagClassName\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#className} needs updating.\n */\n _flagClassName: true,\n\n /**\n * @name Two.Path#_flagCap\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#cap} needs updating.\n */\n _flagCap: true,\n\n /**\n * @name Two.Path#_flagJoin\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#join} needs updating.\n */\n _flagJoin: true,\n\n /**\n * @name Two.Path#_flagMiter\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#miter} needs updating.\n */\n _flagMiter: true,\n\n /**\n * @name Two.Path#_flagClip\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#clip} needs updating.\n */\n _flagClip: false,\n\n // Underlying Properties\n\n /**\n * @name Two.Path#_length\n * @private\n * @see {@link Two.Path#length}\n */\n _length: 0,\n\n /**\n * @name Two.Path#_fill\n * @private\n * @see {@link Two.Path#fill}\n */\n _fill: '#fff',\n\n /**\n * @name Two.Path#_stroke\n * @private\n * @see {@link Two.Path#stroke}\n */\n _stroke: '#000',\n\n /**\n * @name Two.Path#_linewidth\n * @private\n * @see {@link Two.Path#linewidth}\n */\n _linewidth: 1.0,\n\n /**\n * @name Two.Path#_opacity\n * @private\n * @see {@link Two.Path#opacity}\n */\n _opacity: 1.0,\n\n /**\n * @name Two.Path#_className\n * @private\n * @see {@link Two.Path#className}\n */\n _className: '',\n\n /**\n * @name Two.Path#_visible\n * @private\n * @see {@link Two.Path#visible}\n */\n _visible: true,\n\n /**\n * @name Two.Path#_cap\n * @private\n * @see {@link Two.Path#cap}\n */\n _cap: 'round',\n\n /**\n * @name Two.Path#_join\n * @private\n * @see {@link Two.Path#join}\n */\n _join: 'round',\n\n /**\n * @name Two.Path#_miter\n * @private\n * @see {@link Two.Path#miter}\n */\n _miter: 4,\n\n /**\n * @name Two.Path#_closed\n * @private\n * @see {@link Two.Path#closed}\n */\n _closed: true,\n\n /**\n * @name Two.Path#_curved\n * @private\n * @see {@link Two.Path#curved}\n */\n _curved: false,\n\n /**\n * @name Two.Path#_automatic\n * @private\n * @see {@link Two.Path#automatic}\n */\n _automatic: true,\n\n /**\n * @name Two.Path#_beginning\n * @private\n * @see {@link Two.Path#beginning}\n */\n _beginning: 0,\n\n /**\n * @name Two.Path#_ending\n * @private\n * @see {@link Two.Path#ending}\n */\n _ending: 1.0,\n\n /**\n * @name Two.Path#_clip\n * @private\n * @see {@link Two.Path#clip}\n */\n _clip: false,\n\n constructor: Path,\n\n /**\n * @name Two.Path#clone\n * @function\n * @param {Two.Group} parent - The parent group or scene to add the clone to.\n * @returns {Two.Path}\n * @description Create a new instance of {@link Two.Path} with the same properties of the current path.\n */\n clone: function(parent) {\n\n var clone = new Path();\n\n clone.vertices = this.vertices;\n\n for (var i = 0; i < Path.Properties.length; i++) {\n var k = Path.Properties[i];\n clone[k] = this[k];\n }\n\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone._update();\n\n },\n\n /**\n * @name Two.Path#toObject\n * @function\n * @returns {Object}\n * @description Return a JSON compatible plain object that represents the path.\n */\n toObject: function() {\n\n var result = {\n vertices: _.map(this.vertices, function(v) {\n return v.toObject();\n })\n };\n\n _.each(Two.Shape.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n result.translation = this.translation.toObject();\n result.rotation = this.rotation;\n result.scale = this.scale instanceof Two.Vector ? this.scale.toObject() : this.scale;\n\n return result;\n\n },\n\n /**\n * @name Two.Path#noFill\n * @function\n * @description Short hand method to set fill to `transparent`.\n */\n noFill: function() {\n this.fill = 'transparent';\n return this;\n },\n\n /**\n * @name Two.Path#noStroke\n * @function\n * @description Short hand method to set stroke to `transparent`.\n */\n noStroke: function() {\n this.stroke = 'transparent';\n return this;\n },\n\n /**\n * @name Two.Path#corner\n * @function\n * @description Orient the vertices of the shape to the upper left-hand corner of the path.\n */\n corner: function() {\n\n var rect = this.getBoundingClientRect(true);\n\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n _.each(this.vertices, function(v) {\n v.addSelf(rect.centroid);\n });\n\n return this;\n\n },\n\n /**\n * @name Two.Path#center\n * @function\n * @description Orient the vertices of the shape to the center of the path.\n */\n center: function() {\n\n var rect = this.getBoundingClientRect(true);\n\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n _.each(this.vertices, function(v) {\n v.subSelf(rect.centroid);\n });\n\n // this.translation.addSelf(rect.centroid);\n\n return this;\n\n },\n\n /**\n * @name Two.Path#remove\n * @function\n * @description Remove self from the scene / parent.\n */\n remove: function() {\n\n if (!this.parent) {\n return this;\n }\n\n this.parent.remove(this);\n\n return this;\n\n },\n\n /**\n * @name Two.Path#getBoundingClientRect\n * @function\n * @param {Boolean} [shallow=false] - Describes whether to calculate off local matrix or world matrix.\n * @returns {Object} - Returns object with top, left, right, bottom, width, height attributes.\n * @description Return an object with top, left, right, bottom, width, and height parameters of the path.\n */\n getBoundingClientRect: function(shallow) {\n var matrix, border, l, x, y, i, v0, c0, c1, v1;\n\n var left = Infinity, right = -Infinity,\n top = Infinity, bottom = -Infinity;\n\n // TODO: Update this to not __always__ update. Just when it needs to.\n this._update(true);\n\n matrix = !!shallow ? this._matrix : getComputedMatrix(this);\n\n border = this.linewidth / 2;\n l = this._renderer.vertices.length;\n\n if (l <= 0) {\n v = matrix.multiply(0, 0, 1);\n return {\n top: v.y,\n left: v.x,\n right: v.x,\n bottom: v.y,\n width: 0,\n height: 0\n };\n }\n\n for (i = 1; i < l; i++) {\n\n v1 = this._renderer.vertices[i];\n v0 = this._renderer.vertices[i - 1];\n\n if (v0.controls && v1.controls) {\n\n if (v0.relative) {\n c0 = matrix.multiply(\n v0.controls.right.x + v0.x, v0.controls.right.y + v0.y, 1);\n } else {\n c0 = matrix.multiply(\n v0.controls.right.x, v0.controls.right.y, 1);\n }\n v0 = matrix.multiply(v0.x, v0.y, 1);\n\n if (v1.relative) {\n c1 = matrix.multiply(\n v1.controls.left.x + v1.x, v1.controls.left.y + v1.y, 1);\n } else {\n c1 = matrix.multiply(\n v1.controls.left.x, v1.controls.left.y, 1);\n }\n v1 = matrix.multiply(v1.x, v1.y, 1);\n\n var bb = Two.Utils.getCurveBoundingBox(\n v0.x, v0.y, c0.x, c0.y, c1.x, c1.y, v1.x, v1.y);\n\n top = min(bb.min.y - border, top);\n left = min(bb.min.x - border, left);\n right = max(bb.max.x + border, right);\n bottom = max(bb.max.y + border, bottom);\n\n } else {\n\n if (i <= 1) {\n\n v0 = matrix.multiply(v0.x, v0.y, 1);\n\n top = min(v0.y - border, top);\n left = min(v0.x - border, left);\n right = max(v0.x + border, right);\n bottom = max(v0.y + border, bottom);\n\n }\n\n v1 = matrix.multiply(v1.x, v1.y, 1);\n\n top = min(v1.y - border, top);\n left = min(v1.x - border, left);\n right = max(v1.x + border, right);\n bottom = max(v1.y + border, bottom);\n\n }\n\n }\n\n return {\n top: top,\n left: left,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n\n },\n\n /**\n * @name Two.Path#getPointAt\n * @function\n * @param {Boolean} t - Percentage value describing where on the Two.Path to estimate and assign coordinate values.\n * @param {Two.Vector} [obj=undefined] - Object to apply calculated x, y to. If none available returns new Object.\n * @returns {Object}\n * @description Given a float `t` from 0 to 1, return a point or assign a passed `obj`'s coordinates to that percentage on this Two.Path's curve.\n */\n getPointAt: function(t, obj) {\n\n var ia, ib, result;\n var x, x1, x2, x3, x4, y, y1, y2, y3, y4, left, right;\n var target = this.length * Math.min(Math.max(t, 0), 1);\n var length = this.vertices.length;\n var last = length - 1;\n\n var a = null;\n var b = null;\n\n for (var i = 0, l = this._lengths.length, sum = 0; i < l; i++) {\n\n if (sum + this._lengths[i] >= target) {\n\n if (this._closed) {\n ia = Two.Utils.mod(i, length);\n ib = Two.Utils.mod(i - 1, length);\n if (i === 0) {\n ia = ib;\n ib = i;\n }\n } else {\n ia = i;\n ib = Math.min(Math.max(i - 1, 0), last);\n }\n\n a = this.vertices[ia];\n b = this.vertices[ib];\n target -= sum;\n if (this._lengths[i] !== 0) {\n t = target / this._lengths[i];\n } else {\n t = 0;\n }\n\n break;\n\n }\n\n sum += this._lengths[i];\n\n }\n\n if (_.isNull(a) || _.isNull(b)) {\n return null;\n }\n\n if (!a) {\n return b;\n } else if (!b) {\n return a;\n }\n\n right = b.controls && b.controls.right;\n left = a.controls && a.controls.left;\n\n x1 = b.x;\n y1 = b.y;\n x2 = (right || b).x;\n y2 = (right || b).y;\n x3 = (left || a).x;\n y3 = (left || a).y;\n x4 = a.x;\n y4 = a.y;\n\n if (right && b.relative) {\n x2 += b.x;\n y2 += b.y;\n }\n\n if (left && a.relative) {\n x3 += a.x;\n y3 += a.y;\n }\n\n x = Two.Utils.getComponentOnCubicBezier(t, x1, x2, x3, x4);\n y = Two.Utils.getComponentOnCubicBezier(t, y1, y2, y3, y4);\n\n // Higher order points for control calculation.\n var t1x = Two.Utils.lerp(x1, x2, t);\n var t1y = Two.Utils.lerp(y1, y2, t);\n var t2x = Two.Utils.lerp(x2, x3, t);\n var t2y = Two.Utils.lerp(y2, y3, t);\n var t3x = Two.Utils.lerp(x3, x4, t);\n var t3y = Two.Utils.lerp(y3, y4, t);\n\n // Calculate the returned points control points.\n var brx = Two.Utils.lerp(t1x, t2x, t);\n var bry = Two.Utils.lerp(t1y, t2y, t);\n var alx = Two.Utils.lerp(t2x, t3x, t);\n var aly = Two.Utils.lerp(t2y, t3y, t);\n\n if (_.isObject(obj)) {\n\n obj.x = x;\n obj.y = y;\n\n if (!_.isObject(obj.controls)) {\n Two.Anchor.AppendCurveProperties(obj);\n }\n\n obj.controls.left.x = brx;\n obj.controls.left.y = bry;\n obj.controls.right.x = alx;\n obj.controls.right.y = aly;\n\n if (!_.isBoolean(obj.relative) || obj.relative) {\n obj.controls.left.x -= x;\n obj.controls.left.y -= y;\n obj.controls.right.x -= x;\n obj.controls.right.y -= y;\n }\n\n obj.t = t;\n\n return obj;\n\n }\n\n result = new Two.Anchor(\n x, y, brx - x, bry - y, alx - x, aly - y,\n this._curved ? Two.Commands.curve : Two.Commands.line\n );\n\n result.t = t;\n\n return result;\n\n },\n\n /**\n * @name Two.Path#plot\n * @function\n * @description Based on closed / curved and sorting of vertices plot where all points should be and where the respective handles should be too.\n * @nota-bene While this method is public it is internally called by {@link Two.Path#_update} when `automatic = true`.\n */\n plot: function() {\n\n if (this.curved) {\n Two.Utils.getCurveFromPoints(this._collection, this.closed);\n return this;\n }\n\n for (var i = 0; i < this._collection.length; i++) {\n this._collection[i].command = i === 0 ? Two.Commands.move : Two.Commands.line;\n }\n\n return this;\n\n },\n\n /**\n * @name Two.Path#subdivide\n * @function\n * @param {Integer} limit - How many times to recurse subdivisions.\n * @description Insert a {@link Two.Anchor} at the midpoint between every item in {@link Two.Path#vertices}.\n */\n subdivide: function(limit) {\n //TODO: DRYness (function below)\n this._update();\n\n var last = this.vertices.length - 1;\n var b = this.vertices[last];\n var closed = this._closed || this.vertices[last]._command === Two.Commands.close;\n var points = [];\n _.each(this.vertices, function(a, i) {\n\n if (i <= 0 && !closed) {\n b = a;\n return;\n }\n\n if (a.command === Two.Commands.move) {\n points.push(new Two.Anchor(b.x, b.y));\n if (i > 0) {\n points[points.length - 1].command = Two.Commands.line;\n }\n b = a;\n return;\n }\n\n var verts = getSubdivisions(a, b, limit);\n points = points.concat(verts);\n\n // Assign commands to all the verts\n _.each(verts, function(v, i) {\n if (i <= 0 && b.command === Two.Commands.move) {\n v.command = Two.Commands.move;\n } else {\n v.command = Two.Commands.line;\n }\n });\n\n if (i >= last) {\n\n // TODO: Add check if the two vectors in question are the same values.\n if (this._closed && this._automatic) {\n\n b = a;\n\n verts = getSubdivisions(a, b, limit);\n points = points.concat(verts);\n\n // Assign commands to all the verts\n _.each(verts, function(v, i) {\n if (i <= 0 && b.command === Two.Commands.move) {\n v.command = Two.Commands.move;\n } else {\n v.command = Two.Commands.line;\n }\n });\n\n } else if (closed) {\n points.push(new Two.Anchor(a.x, a.y));\n }\n\n points[points.length - 1].command = closed\n ? Two.Commands.close : Two.Commands.line;\n\n }\n\n b = a;\n\n }, this);\n\n this._automatic = false;\n this._curved = false;\n this.vertices = points;\n\n return this;\n\n },\n\n /**\n * @name Two.Path#_updateLength\n * @function\n * @private\n * @param {Integer} [limit=] -\n * @param {Boolean} [silent=false] - If set to `true` then the path isn't updated before calculation. Useful for internal use.\n * @description Recalculate the {@link Two.Path#length} value.\n */\n _updateLength: function(limit, silent) {\n //TODO: DRYness (function above)\n if (!silent) {\n this._update();\n }\n\n var length = this.vertices.length;\n var last = length - 1;\n var b = this.vertices[last];\n var closed = false;//this._closed || this.vertices[last]._command === Two.Commands.close;\n var sum = 0;\n\n if (_.isUndefined(this._lengths)) {\n this._lengths = [];\n }\n\n _.each(this.vertices, function(a, i) {\n\n if ((i <= 0 && !closed) || a.command === Two.Commands.move) {\n b = a;\n this._lengths[i] = 0;\n return;\n }\n\n this._lengths[i] = getCurveLength(a, b, limit);\n this._lengths[i] = Two.Utils.toFixed(this._lengths[i]);\n sum += this._lengths[i];\n\n if (i >= last && closed) {\n\n b = this.vertices[(i + 1) % length];\n\n this._lengths[i + 1] = getCurveLength(a, b, limit);\n this._lengths[i + 1] = Two.Utils.toFixed(this._lengths[i + 1]);\n sum += this._lengths[i + 1];\n\n }\n\n b = a;\n\n }, this);\n\n this._length = sum;\n this._flagLength = false;\n\n return this;\n\n },\n\n /**\n * @name Two.Path#_update\n * @function\n * @private\n * @param {Boolean} [bubbles=false] - Force the parent to `_update` as well.\n * @description This is called before rendering happens by the renderer. This applies all changes necessary so that rendering is up-to-date but not updated more than it needs to be.\n * @nota-bene Try not to call this method more than once a frame.\n */\n _update: function() {\n\n if (this._flagVertices) {\n\n if (this._automatic) {\n this.plot();\n }\n\n if (this._flagLength) {\n this._updateLength(undefined, true);\n }\n\n var l = this._collection.length;\n var last = l - 1;\n var closed = this._closed;\n\n var beginning = Math.min(this._beginning, this._ending);\n var ending = Math.max(this._beginning, this._ending);\n\n var bid = getIdByLength(this, beginning * this._length);\n var eid = getIdByLength(this, ending * this._length);\n\n var low = ceil(bid);\n var high = floor(eid);\n\n var left, right, prev, next, v;\n\n this._renderer.vertices.length = 0;\n\n for (var i = 0; i < l; i++) {\n\n if (this._renderer.collection.length <= i) {\n // Expected to be `relative` anchor points.\n this._renderer.collection.push(new Two.Anchor());\n }\n\n if (i > high && !right) {\n\n v = this._renderer.collection[i];\n v.copy(this._collection[i]);\n this.getPointAt(ending, v);\n v.command = this._renderer.collection[i].command;\n this._renderer.vertices.push(v);\n\n right = v;\n prev = this._collection[i - 1];\n\n // Project control over the percentage `t`\n // of the in-between point\n if (prev && prev.controls) {\n\n v.controls.right.clear();\n\n this._renderer.collection[i - 1].controls.right\n .clear()\n .lerp(prev.controls.right, v.t);\n\n }\n\n } else if (i >= low && i <= high) {\n\n v = this._renderer.collection[i]\n .copy(this._collection[i]);\n this._renderer.vertices.push(v);\n\n if (i === high && contains(this, ending)) {\n right = v;\n if (!closed && right.controls) {\n right.controls.right.clear();\n }\n } else if (i === low && contains(this, beginning)) {\n left = v;\n left.command = Two.Commands.move;\n if (!closed && left.controls) {\n left.controls.left.clear();\n }\n }\n\n }\n\n }\n\n // Prepend the trimmed point if necessary.\n if (low > 0 && !left) {\n\n i = low - 1;\n\n v = this._renderer.collection[i];\n v.copy(this._collection[i]);\n this.getPointAt(beginning, v);\n v.command = Two.Commands.move;\n this._renderer.vertices.unshift(v);\n\n left = v;\n next = this._collection[i + 1];\n\n // Project control over the percentage `t`\n // of the in-between point\n if (next && next.controls) {\n\n v.controls.left.clear();\n\n this._renderer.collection[i + 1].controls.left\n .copy(next.controls.left)\n .lerp(Two.Vector.zero, v.t);\n\n }\n\n }\n\n }\n\n Two.Shape.prototype._update.apply(this, arguments);\n\n return this;\n\n },\n\n /**\n * @name Two.Path#flagReset\n * @function\n * @private\n * @description Called internally to reset all flags. Ensures that only properties that change are updated before being sent to the renderer.\n */\n flagReset: function() {\n\n this._flagVertices = this._flagFill = this._flagStroke =\n this._flagLinewidth = this._flagOpacity = this._flagVisible =\n this._flagCap = this._flagJoin = this._flagMiter =\n this._flagClassName = this._flagClip = false;\n\n Two.Shape.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n Path.MakeObservable(Path.prototype);\n\n // Utility functions\n\n function contains(path, t) {\n\n if (t === 0 || t === 1) {\n return true;\n }\n\n var length = path._length;\n var target = length * t;\n var elapsed = 0;\n\n for (var i = 0; i < path._lengths.length; i++) {\n var dist = path._lengths[i];\n if (elapsed >= target) {\n return target - elapsed >= 0;\n }\n elapsed += dist;\n }\n\n return false;\n\n }\n\n /**\n * @protected\n * @param {Two.Path} path - The path to analyze against.\n * @param {Number} target - The target length at which to find an anchor.\n * @returns {Integer}\n * @description Return the id of an anchor based on a target length.\n */\n function getIdByLength(path, target) {\n\n var total = path._length;\n\n if (target <= 0) {\n return 0;\n } else if (target >= total) {\n return path._lengths.length - 1;\n }\n\n for (var i = 0, sum = 0; i < path._lengths.length; i++) {\n\n if (sum + path._lengths[i] >= target) {\n target -= sum;\n return Math.max(i - 1, 0) + target / path._lengths[i];\n }\n\n sum += path._lengths[i];\n\n }\n\n return - 1;\n\n }\n\n function getCurveLength(a, b, limit) {\n // TODO: DRYness\n var x1, x2, x3, x4, y1, y2, y3, y4;\n\n var right = b.controls && b.controls.right;\n var left = a.controls && a.controls.left;\n\n x1 = b.x;\n y1 = b.y;\n x2 = (right || b).x;\n y2 = (right || b).y;\n x3 = (left || a).x;\n y3 = (left || a).y;\n x4 = a.x;\n y4 = a.y;\n\n if (right && b._relative) {\n x2 += b.x;\n y2 += b.y;\n }\n\n if (left && a._relative) {\n x3 += a.x;\n y3 += a.y;\n }\n\n return Two.Utils.getCurveLength(x1, y1, x2, y2, x3, y3, x4, y4, limit);\n\n }\n\n function getSubdivisions(a, b, limit) {\n // TODO: DRYness\n var x1, x2, x3, x4, y1, y2, y3, y4;\n\n var right = b.controls && b.controls.right;\n var left = a.controls && a.controls.left;\n\n x1 = b.x;\n y1 = b.y;\n x2 = (right || b).x;\n y2 = (right || b).y;\n x3 = (left || a).x;\n y3 = (left || a).y;\n x4 = a.x;\n y4 = a.y;\n\n if (right && b._relative) {\n x2 += b.x;\n y2 += b.y;\n }\n\n if (left && a._relative) {\n x3 += a.x;\n y3 += a.y;\n }\n\n return Two.Utils.subdivide(x1, y1, x2, y2, x3, y3, x4, y4, limit);\n\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path;\n var _ = Two.Utils;\n\n var Line = Two.Line = function(x1, y1, x2, y2) {\n\n var width = x2 - x1;\n var height = y2 - y1;\n\n var w2 = width / 2;\n var h2 = height / 2;\n\n Path.call(this, [\n new Two.Anchor(x1, y1),\n new Two.Anchor(x2, y2)\n ]);\n\n this.vertices[0].command = Two.Commands.move;\n this.vertices[1].command = Two.Commands.line;\n\n this.automatic = false;\n\n };\n\n _.extend(Line.prototype, Path.prototype);\n Line.prototype.constructor = Line;\n\n Path.MakeObservable(Line.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path;\n var _ = Two.Utils;\n\n var Rectangle = Two.Rectangle = function(x, y, width, height) {\n\n Path.call(this, [\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor()\n // new Two.Anchor() // TODO: Figure out how to handle this for `beginning` / `ending` animations\n ], true, false, true);\n\n this.width = width;\n this.height = height;\n\n this.origin = new Two.Vector();\n this.translation.set(x, y);\n\n this._update();\n\n };\n\n _.extend(Rectangle, {\n\n Properties: ['width', 'height'],\n\n MakeObservable: function(object) {\n\n Path.MakeObservable(object);\n _.each(Rectangle.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'origin', {\n enumerable: true,\n get: function() {\n return this._origin;\n },\n set: function(v) {\n if (this._origin) {\n this._origin.unbind(Two.Events.change, this._renderer.flagVertices);\n }\n this._origin = v;\n this._origin.bind(Two.Events.change, this._renderer.flagVertices);\n this._renderer.flagVertices();\n }\n });\n\n }\n\n });\n\n _.extend(Rectangle.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n\n _flagWidth: 0,\n _flagHeight: 0,\n\n _origin: null,\n\n constructor: Rectangle,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight) {\n\n var xr = this._width / 2;\n var yr = this._height / 2;\n\n this.vertices[0].set(-xr, -yr).add(this._origin).command = Two.Commands.move;\n this.vertices[1].set(xr, -yr).add(this._origin).command = Two.Commands.line;\n this.vertices[2].set(xr, yr).add(this._origin).command = Two.Commands.line;\n this.vertices[3].set(-xr, yr).add(this._origin).command = Two.Commands.line;\n // FYI: Two.Sprite and Two.ImageSequence have 4 verts\n if (this.vertices[4]) {\n this.vertices[4].set(-xr, -yr).add(this._origin).command = Two.Commands.line;\n }\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Rectangle(0, 0, this.width, this.height);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Rectangle.MakeObservable(Rectangle.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, HALF_PI = Math.PI / 2;\n var cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n // Circular coefficient\n var c = (4 / 3) * Math.tan(Math.PI / 8);\n\n var Ellipse = Two.Ellipse = function(ox, oy, rx, ry, resolution) {\n\n if (!_.isNumber(ry)) {\n ry = rx;\n }\n\n var amount = resolution || 5;\n\n var points = _.map(_.range(amount), function(i) {\n return new Two.Anchor();\n }, this);\n\n Path.call(this, points, true, true, true);\n\n this.width = rx * 2;\n this.height = ry * 2;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Ellipse, {\n\n Properties: ['width', 'height'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Ellipse.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Ellipse.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n\n _flagWidth: false,\n _flagHeight: false,\n\n constructor: Ellipse,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight) {\n for (var i = 0, l = this.vertices.length, last = l - 1; i < l; i++) {\n\n var pct = i / last;\n var theta = pct * TWO_PI;\n\n var rx = this._width / 2;\n var ry = this._height / 2;\n var ct = cos(theta);\n var st = sin(theta);\n\n var x = rx * cos(theta);\n var y = ry * sin(theta);\n\n var lx = i === 0 ? 0 : rx * c * cos(theta - HALF_PI);\n var ly = i === 0 ? 0 : ry * c * sin(theta - HALF_PI);\n\n var rx = i === last ? 0 : rx * c * cos(theta + HALF_PI);\n var ry = i === last ? 0 : ry * c * sin(theta + HALF_PI);\n\n var v = this.vertices[i];\n\n v.command = i === 0 ? Two.Commands.move : Two.Commands.curve;\n v.set(x, y);\n v.controls.left.set(lx, ly);\n v.controls.right.set(rx, ry);\n\n }\n }\n\n Path.prototype._update.call(this);\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = false;\n\n Path.prototype.flagReset.call(this);\n return this;\n\n },\n\n clone: function(parent) {\n\n var rx = this.width / 2;\n var ry = this.height / 2;\n var resolution = this.vertices.length;\n var clone = new Ellipse(0, 0, rx, ry, resolution);\n\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Ellipse.MakeObservable(Ellipse.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, HALF_PI = Math.PI / 2;\n var cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n // Circular coefficient\n var c = (4 / 3) * Math.tan(Math.PI / 8);\n\n var Circle = Two.Circle = function(ox, oy, r, res) {\n\n var amount = res || 5;\n\n var points = _.map(_.range(amount), function(i) {\n return new Two.Anchor();\n }, this);\n\n Path.call(this, points, true, true, true);\n\n this.radius = r;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Circle, {\n\n Properties: ['radius'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Circle.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Circle.prototype, Path.prototype, {\n\n _radius: 0,\n _flagRadius: false,\n\n constructor: Circle,\n\n _update: function() {\n\n if (this._flagRadius) {\n for (var i = 0, l = this.vertices.length, last = l - 1; i < l; i++) {\n\n var pct = i / last;\n var theta = pct * TWO_PI;\n\n var radius = this._radius;\n var ct = cos(theta);\n var st = sin(theta);\n var rc = radius * c;\n\n var x = radius * cos(theta);\n var y = radius * sin(theta);\n\n var lx = i === 0 ? 0 : rc * cos(theta - HALF_PI);\n var ly = i === 0 ? 0 : rc * sin(theta - HALF_PI);\n\n var rx = i === last ? 0 : rc * cos(theta + HALF_PI);\n var ry = i === last ? 0 : rc * sin(theta + HALF_PI);\n\n var v = this.vertices[i];\n\n v.command = i === 0 ? Two.Commands.move : Two.Commands.curve;\n v.set(x, y);\n v.controls.left.set(lx, ly);\n v.controls.right.set(rx, ry);\n\n }\n }\n\n Path.prototype._update.call(this);\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagRadius = false;\n\n Path.prototype.flagReset.call(this);\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Circle(0, 0, this.radius, this.vertices.length);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Circle.MakeObservable(Circle.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n var Polygon = Two.Polygon = function(ox, oy, r, sides) {\n\n sides = Math.max(sides || 0, 3);\n\n Path.call(this);\n\n this.closed = true;\n this.automatic = false;\n\n this.width = r * 2;\n this.height = r * 2;\n this.sides = sides;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Polygon, {\n\n Properties: ['width', 'height', 'sides'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Polygon.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Polygon.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n _sides: 0,\n\n _flagWidth: false,\n _flagHeight: false,\n _flagSides: false,\n\n constructor: Polygon,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight || this._flagSides) {\n\n var sides = this._sides;\n var amount = sides + 1;\n var length = this.vertices.length;\n\n if (length > sides) {\n this.vertices.splice(sides - 1, length - sides);\n length = sides;\n }\n\n for (var i = 0; i < amount; i++) {\n\n var pct = (i + 0.5) / sides;\n var theta = TWO_PI * pct + Math.PI / 2;\n var x = this._width * cos(theta) / 2;\n var y = this._height * sin(theta) / 2;\n\n if (i >= length) {\n this.vertices.push(new Two.Anchor(x, y));\n } else {\n this.vertices[i].set(x, y);\n }\n\n this.vertices[i].command = i === 0\n ? Two.Commands.move : Two.Commands.line;\n\n }\n\n }\n\n Path.prototype._update.call(this);\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = this._flagSides = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Polygon(0, 0, this.radius, this.sides);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Polygon.MakeObservable(Polygon.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, PI = Math.PI, TWO_PI = Math.PI * 2, HALF_PI = Math.PI / 2,\n cos = Math.cos, sin = Math.sin, abs = Math.abs, _ = Two.Utils;\n\n var ArcSegment = Two.ArcSegment = function(ox, oy, ir, or, sa, ea, res) {\n\n var amount = res || (Two.Resolution * 3);\n var points = _.map(_.range(amount), function() {\n return new Two.Anchor();\n });\n\n Path.call(this, points, true, false, true);\n\n this.innerRadius = ir;\n this.outerRadius = or;\n\n this.startAngle = sa;\n this.endAngle = ea;\n\n this._update();\n this.translation.set(ox, oy);\n\n }\n\n _.extend(ArcSegment, {\n\n Properties: ['startAngle', 'endAngle', 'innerRadius', 'outerRadius'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(ArcSegment.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(ArcSegment.prototype, Path.prototype, {\n\n _flagStartAngle: false,\n _flagEndAngle: false,\n _flagInnerRadius: false,\n _flagOuterRadius: false,\n\n _startAngle: 0,\n _endAngle: TWO_PI,\n _innerRadius: 0,\n _outerRadius: 0,\n\n constructor: ArcSegment,\n\n _update: function() {\n\n if (this._flagStartAngle || this._flagEndAngle || this._flagInnerRadius\n || this._flagOuterRadius) {\n\n var sa = this._startAngle;\n var ea = this._endAngle;\n\n var ir = this._innerRadius;\n var or = this._outerRadius;\n\n var connected = mod(sa, TWO_PI) === mod(ea, TWO_PI);\n var punctured = ir > 0;\n\n var vertices = this.vertices;\n var length = (punctured ? vertices.length / 2 : vertices.length);\n var command, id = 0;\n\n if (connected) {\n length--;\n } else if (!punctured) {\n length -= 2;\n }\n\n /**\n * Outer Circle\n */\n for (var i = 0, last = length - 1; i < length; i++) {\n\n var pct = i / last;\n var v = vertices[id];\n var theta = pct * (ea - sa) + sa;\n var step = (ea - sa) / length;\n\n var x = or * Math.cos(theta);\n var y = or * Math.sin(theta);\n\n switch (i) {\n case 0:\n command = Two.Commands.move;\n break;\n default:\n command = Two.Commands.curve;\n }\n\n v.command = command;\n v.x = x;\n v.y = y;\n v.controls.left.clear();\n v.controls.right.clear();\n\n if (v.command === Two.Commands.curve) {\n var amp = or * step / Math.PI;\n v.controls.left.x = amp * Math.cos(theta - HALF_PI);\n v.controls.left.y = amp * Math.sin(theta - HALF_PI);\n v.controls.right.x = amp * Math.cos(theta + HALF_PI);\n v.controls.right.y = amp * Math.sin(theta + HALF_PI);\n if (i === 1) {\n v.controls.left.multiplyScalar(2);\n }\n if (i === last) {\n v.controls.right.multiplyScalar(2);\n }\n }\n\n id++;\n\n }\n\n if (punctured) {\n\n if (connected) {\n vertices[id].command = Two.Commands.close;\n id++;\n } else {\n length--;\n last = length - 1;\n }\n\n /**\n * Inner Circle\n */\n for (i = 0; i < length; i++) {\n\n pct = i / last;\n v = vertices[id];\n theta = (1 - pct) * (ea - sa) + sa;\n step = (ea - sa) / length;\n\n x = ir * Math.cos(theta);\n y = ir * Math.sin(theta);\n command = Two.Commands.curve;\n if (i <= 0) {\n command = connected ? Two.Commands.move : Two.Commands.line;\n }\n\n v.command = command;\n v.x = x;\n v.y = y;\n v.controls.left.clear();\n v.controls.right.clear();\n\n if (v.command === Two.Commands.curve) {\n amp = ir * step / Math.PI;\n v.controls.left.x = amp * Math.cos(theta + HALF_PI);\n v.controls.left.y = amp * Math.sin(theta + HALF_PI);\n v.controls.right.x = amp * Math.cos(theta - HALF_PI);\n v.controls.right.y = amp * Math.sin(theta - HALF_PI);\n if (i === 1) {\n v.controls.left.multiplyScalar(2);\n }\n if (i === last) {\n v.controls.right.multiplyScalar(2);\n }\n }\n\n id++;\n\n }\n\n // Final Point\n vertices[id].copy(vertices[0]);\n vertices[id].command = Two.Commands.line;\n\n } else if (!connected) {\n\n vertices[id].command = Two.Commands.line;\n vertices[id].x = 0;\n vertices[id].y = 0;\n id++;\n\n // Final Point\n vertices[id].copy(vertices[0]);\n vertices[id].command = Two.Commands.line;\n\n }\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n Path.prototype.flagReset.call(this);\n\n this._flagStartAngle = this._flagEndAngle\n = this._flagInnerRadius = this._flagOuterRadius = false;\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var ir = this.innerRadius;\n var or = this.outerradius;\n var sa = this.startAngle;\n var ea = this.endAngle;\n var resolution = this.vertices.length;\n\n var clone = new ArcSegment(0, 0, ir, or, sa, ea, resolution);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n ArcSegment.MakeObservable(ArcSegment.prototype);\n\n function mod(v, l) {\n while (v < 0) {\n v += l;\n }\n return v % l;\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n var Star = Two.Star = function(ox, oy, ir, or, sides) {\n\n if (arguments.length <= 3) {\n or = ir;\n ir = or / 2;\n }\n\n if (!_.isNumber(sides) || sides <= 0) {\n sides = 5;\n }\n\n var length = sides * 2;\n\n Path.call(this);\n this.closed = true;\n this.automatic = false;\n\n this.innerRadius = ir;\n this.outerRadius = or;\n this.sides = sides;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Star, {\n\n Properties: ['innerRadius', 'outerRadius', 'sides'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Star.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Star.prototype, Path.prototype, {\n\n _innerRadius: 0,\n _outerRadius: 0,\n _sides: 0,\n\n _flagInnerRadius: false,\n _flagOuterRadius: false,\n _flagSides: false,\n\n constructor: Star,\n\n _update: function() {\n\n if (this._flagInnerRadius || this._flagOuterRadius || this._flagSides) {\n\n var sides = this._sides * 2;\n var amount = sides + 1;\n var length = this.vertices.length;\n\n if (length > sides) {\n this.vertices.splice(sides - 1, length - sides);\n length = sides;\n }\n\n for (var i = 0; i < amount; i++) {\n\n var pct = (i + 0.5) / sides;\n var theta = TWO_PI * pct;\n var r = (!(i % 2) ? this._innerRadius : this._outerRadius) / 2;\n var x = r * cos(theta);\n var y = r * sin(theta);\n\n if (i >= length) {\n this.vertices.push(new Two.Anchor(x, y));\n } else {\n this.vertices[i].set(x, y);\n }\n\n this.vertices[i].command = i === 0\n ? Two.Commands.move : Two.Commands.line;\n\n }\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagInnerRadius = this._flagOuterRadius = this._flagSides = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var ir = this.innerRadius;\n var or = this.outerRadius;\n var sides = this.sides;\n\n var clone = new Star(0, 0, ir, or, sides);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Star.MakeObservable(Star.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path;\n var _ = Two.Utils;\n\n var RoundedRectangle = Two.RoundedRectangle = function(ox, oy, width, height, radius) {\n\n if (_.isUndefined(radius)) {\n radius = Math.floor(Math.min(width, height) / 12);\n }\n\n var amount = 10;\n\n var points = _.map(_.range(amount), function(i) {\n return new Two.Anchor(0, 0, 0, 0, 0, 0,\n i === 0 ? Two.Commands.move : Two.Commands.curve);\n });\n\n // points[points.length - 1].command = Two.Commands.close;\n\n Path.call(this, points);\n\n this.closed = true;\n this.automatic = false;\n\n this._renderer.flagRadius = _.bind(RoundedRectangle.FlagRadius, this);\n\n this.width = width;\n this.height = height;\n this.radius = radius;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(RoundedRectangle, {\n\n Properties: ['width', 'height'],\n\n FlagRadius: function() {\n this._flagRadius = true;\n },\n\n MakeObservable: function(object) {\n\n Path.MakeObservable(object);\n _.each(RoundedRectangle.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'radius', {\n enumerable: true,\n get: function() {\n return this._radius;\n },\n set: function(v) {\n\n if (this._radius instanceof Two.Vector) {\n this._radius.unbind(Two.Events.change, this._renderer.flagRadius);\n }\n\n this._radius = v;\n\n if (this._radius instanceof Two.Vector) {\n this._radius.bind(Two.Events.change, this._renderer.flagRadius);\n }\n\n this._flagRadius = true;\n\n }\n });\n\n }\n\n });\n\n _.extend(RoundedRectangle.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n _radius: 0,\n\n _flagWidth: false,\n _flagHeight: false,\n _flagRadius: false,\n\n constructor: RoundedRectangle,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight || this._flagRadius) {\n\n var width = this._width;\n var height = this._height;\n\n var rx, ry;\n\n if (this._radius instanceof Two.Vector) {\n rx = this._radius.x;\n ry = this._radius.y;\n } else {\n rx = this._radius;\n ry = this._radius;\n }\n\n var v;\n var w = width / 2;\n var h = height / 2;\n\n v = this.vertices[0];\n v.x = - (w - rx);\n v.y = - h;\n\n // Upper Right Corner\n\n v = this.vertices[1];\n v.x = (w - rx);\n v.y = - h;\n v.controls.left.clear();\n v.controls.right.x = rx;\n v.controls.right.y = 0;\n\n v = this.vertices[2];\n v.x = w;\n v.y = - (h - ry);\n v.controls.right.clear();\n v.controls.left.clear();\n\n // Bottom Right Corner\n\n v = this.vertices[3];\n v.x = w;\n v.y = (h - ry);\n v.controls.left.clear();\n v.controls.right.x = 0;\n v.controls.right.y = ry;\n\n v = this.vertices[4];\n v.x = (w - rx);\n v.y = h;\n v.controls.right.clear();\n v.controls.left.clear();\n\n // Bottom Left Corner\n\n v = this.vertices[5];\n v.x = - (w - rx);\n v.y = h;\n v.controls.left.clear();\n v.controls.right.x = - rx;\n v.controls.right.y = 0;\n\n v = this.vertices[6];\n v.x = - w;\n v.y = (h - ry);\n v.controls.left.clear();\n v.controls.right.clear();\n\n // Upper Left Corner\n\n v = this.vertices[7];\n v.x = - w;\n v.y = - (h - ry);\n v.controls.left.clear();\n v.controls.right.x = 0;\n v.controls.right.y = - ry;\n\n v = this.vertices[8];\n v.x = - (w - rx);\n v.y = - h;\n v.controls.left.clear();\n v.controls.right.clear();\n\n v = this.vertices[9];\n v.copy(this.vertices[8]);\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = this._flagRadius = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var width = this.width;\n var height = this.height;\n var radius = this.radius;\n\n var clone = new RoundedRectangle(0, 0, width, height, radius);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n RoundedRectangle.MakeObservable(RoundedRectangle.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var root = Two.root;\n var getComputedMatrix = Two.Utils.getComputedMatrix;\n var _ = Two.Utils;\n\n var canvas = getCanvas();\n var ctx = canvas.getContext('2d');\n\n /**\n * @class\n * @name Two.Text\n * @param {String} message - The String to be rendered to the scene.\n * @param {Number} [x=0] - The position in the x direction for the object.\n * @param {Number} [y=0] - The position in the y direction for the object.\n * @param {Object} [styles] - An object where styles are applied. Attribute must exist in Two.Text.Properties.\n */\n var Text = Two.Text = function(message, x, y, styles) {\n\n Two.Shape.call(this);\n\n this._renderer.type = 'text';\n this._renderer.flagFill = _.bind(Two.Text.FlagFill, this);\n this._renderer.flagStroke = _.bind(Two.Text.FlagStroke, this);\n\n this.value = message;\n\n if (_.isNumber(x)) {\n this.translation.x = x;\n }\n if (_.isNumber(y)) {\n this.translation.y = y;\n }\n\n this.dashes = [];\n\n if (!_.isObject(styles)) {\n return this;\n }\n\n _.each(Two.Text.Properties, function(property) {\n\n if (property in styles) {\n this[property] = styles[property];\n }\n\n }, this);\n\n };\n\n _.extend(Two.Text, {\n\n Ratio: 0.6,\n\n Properties: [\n 'value', 'family', 'size', 'leading', 'alignment', 'linewidth', 'style',\n 'className', 'weight', 'decoration', 'baseline', 'opacity', 'visible',\n 'fill', 'stroke',\n ],\n\n FlagFill: function() {\n this._flagFill = true;\n },\n\n FlagStroke: function() {\n this._flagStroke = true;\n },\n\n MakeObservable: function(object) {\n\n Two.Shape.MakeObservable(object);\n\n _.each(Two.Text.Properties.slice(0, 13), Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'fill', {\n enumerable: true,\n get: function() {\n return this._fill;\n },\n set: function(f) {\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.unbind(Two.Events.change, this._renderer.flagFill);\n }\n\n this._fill = f;\n this._flagFill = true;\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.bind(Two.Events.change, this._renderer.flagFill);\n }\n\n }\n });\n\n Object.defineProperty(object, 'stroke', {\n enumerable: true,\n get: function() {\n return this._stroke;\n },\n set: function(f) {\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.unbind(Two.Events.change, this._renderer.flagStroke);\n }\n\n this._stroke = f;\n this._flagStroke = true;\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.bind(Two.Events.change, this._renderer.flagStroke);\n }\n\n }\n });\n\n Object.defineProperty(object, 'clip', {\n enumerable: true,\n get: function() {\n return this._clip;\n },\n set: function(v) {\n this._clip = v;\n this._flagClip = true;\n }\n });\n\n }\n\n });\n\n _.extend(Two.Text.prototype, Two.Shape.prototype, {\n\n // Flags\n // http://en.wikipedia.org/wiki/Flag\n\n _flagValue: true,\n _flagFamily: true,\n _flagSize: true,\n _flagLeading: true,\n _flagAlignment: true,\n _flagBaseline: true,\n _flagStyle: true,\n _flagWeight: true,\n _flagDecoration: true,\n\n _flagFill: true,\n _flagStroke: true,\n _flagLinewidth: true,\n _flagOpacity: true,\n _flagClassName: true,\n _flagVisible: true,\n\n _flagClip: false,\n\n // Underlying Properties\n\n _value: '',\n _family: 'sans-serif',\n _size: 13,\n _leading: 17,\n _alignment: 'center',\n _baseline: 'middle',\n _style: 'normal',\n _weight: 500,\n _decoration: 'none',\n\n _fill: '#000',\n _stroke: 'transparent',\n _linewidth: 1,\n _opacity: 1,\n _className: '',\n _visible: true,\n\n _clip: false,\n\n constructor: Two.Text,\n\n remove: function() {\n\n if (!this.parent) {\n return this;\n }\n\n this.parent.remove(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Two.Text(this.value);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Text.Properties, function(property) {\n clone[property] = this[property];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone._update();\n\n },\n\n toObject: function() {\n\n var result = {\n translation: this.translation.toObject(),\n rotation: this.rotation,\n scale: this.scale\n };\n\n _.each(Two.Text.Properties, function(property) {\n result[property] = this[property];\n }, this);\n\n return result;\n\n },\n\n noStroke: function() {\n this.stroke = 'transparent';\n return this;\n },\n\n noFill: function() {\n this.fill = 'transparent';\n return this;\n },\n\n // /**\n // * A shim to not break `getBoundingClientRect` calls. TODO: Implement a\n // * way to calculate proper bounding boxes of `Two.Text`.\n // */\n getBoundingClientRect: function(shallow) {\n\n var matrix, border, l, x, y, i, v;\n var left, right, top, bottom;\n\n // TODO: Update this to not __always__ update. Just when it needs to.\n this._update(true);\n\n matrix = !!shallow ? this._matrix : getComputedMatrix(this);\n\n var height = this.leading;\n var width = this.value.length * this.size * Text.Ratio;\n\n switch (this.alignment) {\n case 'left':\n left = 0;\n right = width;\n break;\n case 'right':\n left = - width;\n right = 0;\n break;\n default:\n left = - width / 2;\n right = width / 2;\n }\n\n switch (this.baseline) {\n case 'top':\n top = 0;\n bottom = height;\n break;\n case 'bottom':\n top = - height;\n bottom = 0;\n break;\n default:\n top = - height / 2;\n bottom = height / 2;\n }\n\n v = matrix.multiply(left, top, 1);\n\n top = v.y;\n left = v.x;\n\n v = matrix.multiply(right, bottom, 1);\n\n right = v.x;\n bottom = v.y;\n\n return {\n top: top,\n left: left,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n\n },\n\n flagReset: function() {\n\n this._flagValue = this._flagFamily = this._flagSize =\n this._flagLeading = this._flagAlignment = this._flagFill =\n this._flagStroke = this._flagLinewidth = this._flagOpacity =\n this._flagVisible = this._flagClip = this._flagDecoration =\n this._flagClassName = this._flagBaseline = false;\n\n Two.Shape.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n Two.Text.MakeObservable(Two.Text.prototype);\n\n function getCanvas() {\n if (root.document) {\n return root.document.createElement('canvas');\n } else {\n console.warn('Two.js: Unable to create canvas for Two.Text measurements.');\n return {\n getContext: _.identity\n }\n }\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n var Stop = Two.Stop = function(offset, color, opacity) {\n\n this._renderer = {};\n this._renderer.type = 'stop';\n\n this.offset = _.isNumber(offset) ? offset\n : Stop.Index <= 0 ? 0 : 1;\n\n this.opacity = _.isNumber(opacity) ? opacity : 1;\n\n this.color = _.isString(color) ? color\n : Stop.Index <= 0 ? '#fff' : '#000';\n\n Stop.Index = (Stop.Index + 1) % 2;\n\n };\n\n _.extend(Stop, {\n\n Index: 0,\n\n Properties: [\n 'offset',\n 'opacity',\n 'color'\n ],\n\n MakeObservable: function(object) {\n\n _.each(Stop.Properties, function(property) {\n\n var object = this;\n var secret = '_' + property;\n var flag = '_flag' + property.charAt(0).toUpperCase() + property.slice(1);\n\n Object.defineProperty(object, property, {\n enumerable: true,\n get: function() {\n return this[secret];\n },\n set: function(v) {\n this[secret] = v;\n this[flag] = true;\n if (this.parent) {\n this.parent._flagStops = true;\n }\n }\n });\n\n }, object);\n\n }\n\n });\n\n _.extend(Stop.prototype, Two.Utils.Events, {\n\n constructor: Stop,\n\n clone: function() {\n\n var clone = new Stop();\n\n _.each(Stop.Properties, function(property) {\n clone[property] = this[property];\n }, this);\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = {};\n\n _.each(Stop.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n return result;\n\n },\n\n flagReset: function() {\n\n this._flagOffset = this._flagColor = this._flagOpacity = false;\n\n return this;\n\n }\n\n });\n\n Stop.MakeObservable(Stop.prototype);\n Stop.prototype.constructor = Stop;\n\n var Gradient = Two.Gradient = function(stops) {\n\n this._renderer = {};\n this._renderer.type = 'gradient';\n\n this.id = Two.Identifier + Two.uniqueId();\n this.classList = [];\n\n this._renderer.flagStops = _.bind(Gradient.FlagStops, this);\n this._renderer.bindStops = _.bind(Gradient.BindStops, this);\n this._renderer.unbindStops = _.bind(Gradient.UnbindStops, this);\n\n this.spread = 'pad';\n\n this.stops = stops;\n\n };\n\n _.extend(Gradient, {\n\n Stop: Stop,\n\n Properties: [\n 'spread'\n ],\n\n MakeObservable: function(object) {\n\n _.each(Gradient.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'stops', {\n\n enumerable: true,\n\n get: function() {\n return this._stops;\n },\n\n set: function(stops) {\n\n var updateStops = this._renderer.flagStops;\n var bindStops = this._renderer.bindStops;\n var unbindStops = this._renderer.unbindStops;\n\n // Remove previous listeners\n if (this._stops) {\n this._stops\n .unbind(Two.Events.insert, bindStops)\n .unbind(Two.Events.remove, unbindStops);\n }\n\n // Create new Collection with copy of Stops\n this._stops = new Two.Utils.Collection((stops || []).slice(0));\n\n // Listen for Collection changes and bind / unbind\n this._stops\n .bind(Two.Events.insert, bindStops)\n .bind(Two.Events.remove, unbindStops);\n\n // Bind Initial Stops\n bindStops(this._stops);\n\n }\n\n });\n\n },\n\n FlagStops: function() {\n this._flagStops = true;\n },\n\n BindStops: function(items) {\n\n // This function is called a lot\n // when importing a large SVG\n var i = items.length;\n while(i--) {\n items[i].bind(Two.Events.change, this._renderer.flagStops);\n items[i].parent = this;\n }\n\n this._renderer.flagStops();\n\n },\n\n UnbindStops: function(items) {\n\n var i = items.length;\n while(i--) {\n items[i].unbind(Two.Events.change, this._renderer.flagStops);\n delete items[i].parent;\n }\n\n this._renderer.flagStops();\n\n }\n\n });\n\n _.extend(Gradient.prototype, Two.Utils.Events, {\n\n _flagStops: false,\n _flagSpread: false,\n\n clone: function(parent) {\n\n var stops = _.map(this.stops, function(s) {\n return s.clone();\n });\n\n var clone = new Gradient(stops);\n\n _.each(Two.Gradient.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = {\n stops: _.map(this.stops, function(s) {\n return s.toObject();\n })\n };\n\n _.each(Gradient.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n return result;\n\n },\n\n _update: function() {\n\n if (this._flagSpread || this._flagStops) {\n this.trigger(Two.Events.change);\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagSpread = this._flagStops = false;\n\n return this;\n\n }\n\n });\n\n Gradient.MakeObservable(Gradient.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n var LinearGradient = Two.LinearGradient = function(x1, y1, x2, y2, stops) {\n\n Two.Gradient.call(this, stops);\n\n this._renderer.type = 'linear-gradient';\n\n var flagEndPoints = _.bind(LinearGradient.FlagEndPoints, this);\n this.left = new Two.Vector().bind(Two.Events.change, flagEndPoints);\n this.right = new Two.Vector().bind(Two.Events.change, flagEndPoints);\n\n if (_.isNumber(x1)) {\n this.left.x = x1;\n }\n if (_.isNumber(y1)) {\n this.left.y = y1;\n }\n if (_.isNumber(x2)) {\n this.right.x = x2;\n }\n if (_.isNumber(y2)) {\n this.right.y = y2;\n }\n\n };\n\n _.extend(LinearGradient, {\n\n Stop: Two.Gradient.Stop,\n\n MakeObservable: function(object) {\n Two.Gradient.MakeObservable(object);\n },\n\n FlagEndPoints: function() {\n this._flagEndPoints = true;\n }\n\n });\n\n _.extend(LinearGradient.prototype, Two.Gradient.prototype, {\n\n _flagEndPoints: false,\n\n constructor: LinearGradient,\n\n clone: function(parent) {\n\n var stops = _.map(this.stops, function(stop) {\n return stop.clone();\n });\n\n var clone = new LinearGradient(this.left._x, this.left._y,\n this.right._x, this.right._y, stops);\n\n _.each(Two.Gradient.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = Two.Gradient.prototype.toObject.call(this);\n\n result.left = this.left.toObject();\n result.right = this.right.toObject();\n\n return result;\n\n },\n\n _update: function() {\n\n if (this._flagEndPoints || this._flagSpread || this._flagStops) {\n this.trigger(Two.Events.change);\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagEndPoints = false;\n\n Two.Gradient.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n LinearGradient.MakeObservable(LinearGradient.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n var RadialGradient = Two.RadialGradient = function(cx, cy, r, stops, fx, fy) {\n\n Two.Gradient.call(this, stops);\n\n this._renderer.type = 'radial-gradient';\n\n this.center = new Two.Vector()\n .bind(Two.Events.change, _.bind(function() {\n this._flagCenter = true;\n }, this));\n\n this.radius = _.isNumber(r) ? r : 20;\n\n this.focal = new Two.Vector()\n .bind(Two.Events.change, _.bind(function() {\n this._flagFocal = true;\n }, this));\n\n if (_.isNumber(cx)) {\n this.center.x = cx;\n }\n if (_.isNumber(cy)) {\n this.center.y = cy;\n }\n\n this.focal.copy(this.center);\n\n if (_.isNumber(fx)) {\n this.focal.x = fx;\n }\n if (_.isNumber(fy)) {\n this.focal.y = fy;\n }\n\n };\n\n _.extend(RadialGradient, {\n\n Stop: Two.Gradient.Stop,\n\n Properties: [\n 'radius'\n ],\n\n MakeObservable: function(object) {\n\n Two.Gradient.MakeObservable(object);\n\n _.each(RadialGradient.Properties, Two.Utils.defineProperty, object);\n\n }\n\n });\n\n _.extend(RadialGradient.prototype, Two.Gradient.prototype, {\n\n _flagRadius: false,\n _flagCenter: false,\n _flagFocal: false,\n\n constructor: RadialGradient,\n\n clone: function(parent) {\n\n var stops = _.map(this.stops, function(stop) {\n return stop.clone();\n });\n\n var clone = new RadialGradient(this.center._x, this.center._y,\n this._radius, stops, this.focal._x, this.focal._y);\n\n _.each(Two.Gradient.Properties.concat(RadialGradient.Properties), function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = Two.Gradient.prototype.toObject.call(this);\n\n _.each(RadialGradient.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n result.center = this.center.toObject();\n result.focal = this.focal.toObject();\n\n return result;\n\n },\n\n _update: function() {\n\n if (this._flagRadius || this._flatCenter || this._flagFocal\n || this._flagSpread || this._flagStops) {\n this.trigger(Two.Events.change);\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagRadius = this._flagCenter = this._flagFocal = false;\n\n Two.Gradient.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n RadialGradient.MakeObservable(RadialGradient.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var root = Two.root;\n var _ = Two.Utils;\n var anchor;\n var regex = {\n video: /\\.(mp4|webm|ogg)$/i,\n image: /\\.(jpe?g|png|gif|tiff)$/i,\n effect: /texture|gradient/i\n };\n\n if (root.document) {\n anchor = document.createElement('a');\n }\n\n var Texture = Two.Texture = function(src, callback) {\n\n this._renderer = {};\n this._renderer.type = 'texture';\n this._renderer.flagOffset = _.bind(Texture.FlagOffset, this);\n this._renderer.flagScale = _.bind(Texture.FlagScale, this);\n\n this.id = Two.Identifier + Two.uniqueId();\n this.classList = [];\n\n this.offset = new Two.Vector();\n\n if (_.isFunction(callback)) {\n var loaded = _.bind(function() {\n this.unbind(Two.Events.load, loaded);\n if (_.isFunction(callback)) {\n callback();\n }\n }, this);\n this.bind(Two.Events.load, loaded);\n }\n\n if (_.isString(src)) {\n this.src = src;\n } else if (_.isElement(src)) {\n this.image = src;\n }\n\n this._update();\n\n };\n\n _.extend(Texture, {\n\n Properties: [\n 'src',\n 'loaded',\n 'repeat'\n ],\n\n RegularExpressions: regex,\n\n ImageRegistry: new Two.Registry(),\n\n getAbsoluteURL: function(path) {\n if (!anchor) {\n // TODO: Fix for headless environments\n return path;\n }\n anchor.href = path;\n return anchor.href;\n },\n\n loadHeadlessBuffer: new Function('texture', 'loaded', [\n 'var fs = require(\"fs\");',\n 'var buffer = fs.readFileSync(texture.src);',\n\n 'texture.image.src = buffer;',\n 'loaded();'\n ].join('\\n')),\n\n getImage: function(src) {\n\n var absoluteSrc = Texture.getAbsoluteURL(src);\n\n if (Texture.ImageRegistry.contains(absoluteSrc)) {\n return Texture.ImageRegistry.get(absoluteSrc);\n }\n\n var image;\n\n if (Two.Utils.Image) {\n\n // TODO: Fix for headless environments\n image = new Two.Utils.Image();\n Two.CanvasRenderer.Utils.shim(image, 'img');\n\n } else if (root.document) {\n\n if (regex.video.test(absoluteSrc)) {\n image = document.createElement('video');\n } else {\n image = document.createElement('img');\n }\n\n } else {\n\n console.warn('Two.js: no prototypical image defined for Two.Texture');\n\n }\n\n image.crossOrigin = 'anonymous';\n\n return image;\n\n },\n\n Register: {\n canvas: function(texture, callback) {\n texture._src = '#' + texture.id;\n Texture.ImageRegistry.add(texture.src, texture.image);\n if (_.isFunction(callback)) {\n callback();\n }\n },\n img: function(texture, callback) {\n\n var loaded = function(e) {\n if (_.isFunction(texture.image.removeEventListener)) {\n texture.image.removeEventListener('load', loaded, false);\n texture.image.removeEventListener('error', error, false);\n }\n if (_.isFunction(callback)) {\n callback();\n }\n };\n var error = function(e) {\n if (_.isFunction(texture.image.removeEventListener)) {\n texture.image.removeEventListener('load', loaded, false);\n texture.image.removeEventListener('error', error, false);\n }\n throw new Two.Utils.Error('unable to load ' + texture.src);\n };\n\n if (_.isNumber(texture.image.width) && texture.image.width > 0\n && _.isNumber(texture.image.height) && texture.image.height > 0) {\n loaded();\n } else if (_.isFunction(texture.image.addEventListener)) {\n texture.image.addEventListener('load', loaded, false);\n texture.image.addEventListener('error', error, false);\n }\n\n texture._src = Texture.getAbsoluteURL(texture._src);\n\n if (texture.image && texture.image.getAttribute('two-src')) {\n return;\n }\n\n texture.image.setAttribute('two-src', texture.src);\n Texture.ImageRegistry.add(texture.src, texture.image);\n\n if (Two.Utils.isHeadless) {\n\n Texture.loadHeadlessBuffer(texture, loaded);\n\n } else {\n\n texture.image.src = texture.src;\n\n }\n\n },\n video: function(texture, callback) {\n\n var loaded = function(e) {\n texture.image.removeEventListener('canplaythrough', loaded, false);\n texture.image.removeEventListener('error', error, false);\n texture.image.width = texture.image.videoWidth;\n texture.image.height = texture.image.videoHeight;\n texture.image.play();\n if (_.isFunction(callback)) {\n callback();\n }\n };\n var error = function(e) {\n texture.image.removeEventListener('canplaythrough', loaded, false);\n texture.image.removeEventListener('error', error, false);\n throw new Two.Utils.Error('unable to load ' + texture.src);\n };\n\n texture._src = Texture.getAbsoluteURL(texture._src);\n texture.image.addEventListener('canplaythrough', loaded, false);\n texture.image.addEventListener('error', error, false);\n\n if (texture.image && texture.image.getAttribute('two-src')) {\n return;\n }\n\n if (Two.Utils.isHeadless) {\n throw new Two.Utils.Error('video textures are not implemented in headless environments.');\n return;\n }\n\n texture.image.setAttribute('two-src', texture.src);\n Texture.ImageRegistry.add(texture.src, texture.image);\n texture.image.src = texture.src;\n texture.image.loop = true;\n texture.image.load();\n\n }\n },\n\n load: function(texture, callback) {\n\n var src = texture.src;\n var image = texture.image;\n var tag = image && image.nodeName.toLowerCase();\n\n if (texture._flagImage) {\n if (/canvas/i.test(tag)) {\n Texture.Register.canvas(texture, callback);\n } else {\n texture._src = image.getAttribute('two-src') || image.src;\n Texture.Register[tag](texture, callback);\n }\n }\n\n if (texture._flagSrc) {\n if (!image) {\n texture.image = Texture.getImage(texture.src);\n }\n tag = texture.image.nodeName.toLowerCase();\n Texture.Register[tag](texture, callback);\n }\n\n },\n\n FlagOffset: function() {\n this._flagOffset = true;\n },\n\n FlagScale: function() {\n this._flagScale = true;\n },\n\n MakeObservable: function(object) {\n\n _.each(Texture.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'image', {\n enumerable: true,\n get: function() {\n return this._image;\n },\n set: function(image) {\n\n var tag = image && image.nodeName.toLowerCase();\n var index;\n\n switch (tag) {\n case 'canvas':\n index = '#' + image.id;\n break;\n default:\n index = image.src;\n }\n\n if (Texture.ImageRegistry.contains(index)) {\n this._image = Texture.ImageRegistry.get(image.src);\n } else {\n this._image = image;\n }\n\n this._flagImage = true;\n\n }\n\n });\n\n Object.defineProperty(object, 'offset', {\n enumerable: true,\n get: function() {\n return this._offset;\n },\n set: function(v) {\n if (this._offset) {\n this._offset.unbind(Two.Events.change, this._renderer.flagOffset);\n }\n this._offset = v;\n this._offset.bind(Two.Events.change, this._renderer.flagOffset);\n this._flagOffset = true;\n }\n });\n\n Object.defineProperty(object, 'scale', {\n enumerable: true,\n get: function() {\n return this._scale;\n },\n set: function(v) {\n\n if (this._scale instanceof Two.Vector) {\n this._scale.unbind(Two.Events.change, this._renderer.flagScale);\n }\n\n this._scale = v;\n\n if (this._scale instanceof Two.Vector) {\n this._scale.bind(Two.Events.change, this._renderer.flagScale);\n }\n\n this._flagScale = true;\n\n }\n });\n\n }\n\n });\n\n _.extend(Texture.prototype, Two.Utils.Events, Two.Shape.prototype, {\n\n _flagSrc: false,\n _flagImage: false,\n _flagVideo: false,\n _flagLoaded: false,\n _flagRepeat: false,\n\n _flagOffset: false,\n _flagScale: false,\n\n _src: '',\n _image: null,\n _loaded: false,\n _repeat: 'no-repeat',\n\n _scale: 1,\n _offset: null,\n\n constructor: Texture,\n\n clone: function() {\n return new Texture(this.src);\n },\n\n toObject: function() {\n return {\n src: this.src,\n image: this.image\n }\n },\n\n _update: function() {\n\n if (this._flagSrc || this._flagImage) {\n\n this.trigger(Two.Events.change);\n\n if (this._flagSrc || this._flagImage) {\n this.loaded = false;\n Texture.load(this, _.bind(function() {\n this.loaded = true;\n this\n .trigger(Two.Events.change)\n .trigger(Two.Events.load);\n }, this));\n }\n\n }\n\n if (this._image && this._image.readyState >= 4) {\n this._flagVideo = true;\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagSrc = this._flagImage = this._flagLoaded\n = this._flagVideo = this._flagScale = this._flagOffset = false;\n\n return this;\n\n }\n\n });\n\n Texture.MakeObservable(Texture.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n var Path = Two.Path;\n var Rectangle = Two.Rectangle;\n\n var Sprite = Two.Sprite = function(path, ox, oy, cols, rows, frameRate) {\n\n Path.call(this, [\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor()\n ], true);\n\n this.noStroke();\n this.noFill();\n\n if (path instanceof Two.Texture) {\n this.texture = path;\n } else if (_.isString(path)) {\n this.texture = new Two.Texture(path);\n }\n\n this.origin = new Two.Vector();\n\n this._update();\n this.translation.set(ox || 0, oy || 0);\n\n if (_.isNumber(cols)) {\n this.columns = cols;\n }\n if (_.isNumber(rows)) {\n this.rows = rows;\n }\n if (_.isNumber(frameRate)) {\n this.frameRate = frameRate;\n }\n\n };\n\n _.extend(Sprite, {\n\n Properties: [\n 'texture', 'columns', 'rows', 'frameRate', 'index'\n ],\n\n MakeObservable: function(obj) {\n\n Rectangle.MakeObservable(obj);\n _.each(Sprite.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n })\n\n _.extend(Sprite.prototype, Rectangle.prototype, {\n\n _flagTexture: false,\n _flagColumns: false,\n _flagRows: false,\n _flagFrameRate: false,\n flagIndex: false,\n\n // Private variables\n _amount: 1,\n _duration: 0,\n _startTime: 0,\n _playing: false,\n _firstFrame: 0,\n _lastFrame: 0,\n _loop: true,\n\n // Exposed through getter-setter\n _texture: null,\n _columns: 1,\n _rows: 1,\n _frameRate: 0,\n _index: 0,\n _origin: null,\n\n constructor: Sprite,\n\n play: function(firstFrame, lastFrame, onLastFrame) {\n\n this._playing = true;\n this._firstFrame = 0;\n this._lastFrame = this.amount - 1;\n this._startTime = _.performance.now();\n\n if (_.isNumber(firstFrame)) {\n this._firstFrame = firstFrame;\n }\n if (_.isNumber(lastFrame)) {\n this._lastFrame = lastFrame;\n }\n if (_.isFunction(onLastFrame)) {\n this._onLastFrame = onLastFrame;\n } else {\n delete this._onLastFrame;\n }\n\n if (this._index !== this._firstFrame) {\n this._startTime -= 1000 * Math.abs(this._index - this._firstFrame)\n / this._frameRate;\n }\n\n return this;\n\n },\n\n pause: function() {\n\n this._playing = false;\n return this;\n\n },\n\n stop: function() {\n\n this._playing = false;\n this._index = 0;\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Sprite(\n this.texture, this.translation.x, this.translation.y,\n this.columns, this.rows, this.frameRate\n );\n\n if (this.playing) {\n clone.play(this._firstFrame, this._lastFrame);\n clone._loop = this._loop;\n }\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n _update: function() {\n\n var effect = this._texture;\n var cols = this._columns;\n var rows = this._rows;\n\n var width, height, elapsed, amount, duration;\n var index, iw, ih, isRange, frames;\n\n if (this._flagColumns || this._flagRows) {\n this._amount = this._columns * this._rows;\n }\n\n if (this._flagFrameRate) {\n this._duration = 1000 * this._amount / this._frameRate;\n }\n\n if (this._flagTexture) {\n this.fill = this._texture;\n }\n\n if (this._texture.loaded) {\n\n iw = effect.image.width;\n ih = effect.image.height;\n\n width = iw / cols;\n height = ih / rows;\n amount = this._amount;\n\n if (this.width !== width) {\n this.width = width;\n }\n if (this.height !== height) {\n this.height = height;\n }\n\n if (this._playing && this._frameRate > 0) {\n\n if (_.isNaN(this._lastFrame)) {\n this._lastFrame = amount - 1;\n }\n\n // TODO: Offload perf logic to instance of `Two`.\n elapsed = _.performance.now() - this._startTime;\n frames = this._lastFrame + 1;\n duration = 1000 * (frames - this._firstFrame) / this._frameRate;\n\n if (this._loop) {\n elapsed = elapsed % duration;\n } else {\n elapsed = Math.min(elapsed, duration);\n }\n\n index = _.lerp(this._firstFrame, frames, elapsed / duration);\n index = Math.floor(index);\n\n if (index !== this._index) {\n this._index = index;\n if (index >= this._lastFrame - 1 && this._onLastFrame) {\n this._onLastFrame(); // Shortcut for chainable sprite animations\n }\n }\n\n }\n\n var col = this._index % cols;\n var row = Math.floor(this._index / cols);\n\n var ox = - width * col + (iw - width) / 2;\n var oy = - height * row + (ih - height) / 2;\n\n // TODO: Improve performance\n if (ox !== effect.offset.x) {\n effect.offset.x = ox;\n }\n if (oy !== effect.offset.y) {\n effect.offset.y = oy;\n }\n\n }\n\n Rectangle.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagTexture = this._flagColumns = this._flagRows\n = this._flagFrameRate = false;\n\n Rectangle.prototype.flagReset.call(this);\n\n return this;\n }\n\n\n });\n\n Sprite.MakeObservable(Sprite.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n var Path = Two.Path;\n var Rectangle = Two.Rectangle;\n\n var ImageSequence = Two.ImageSequence = function(paths, ox, oy, frameRate) {\n\n Path.call(this, [\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor()\n ], true);\n\n this._renderer.flagTextures = _.bind(ImageSequence.FlagTextures, this);\n this._renderer.bindTextures = _.bind(ImageSequence.BindTextures, this);\n this._renderer.unbindTextures = _.bind(ImageSequence.UnbindTextures, this);\n\n this.noStroke();\n this.noFill();\n\n this.textures = _.map(paths, ImageSequence.GenerateTexture, this);\n this.origin = new Two.Vector();\n\n this._update();\n this.translation.set(ox || 0, oy || 0);\n\n if (_.isNumber(frameRate)) {\n this.frameRate = frameRate;\n } else {\n this.frameRate = ImageSequence.DefaultFrameRate;\n }\n\n };\n\n _.extend(ImageSequence, {\n\n Properties: [\n 'frameRate',\n 'index'\n ],\n\n DefaultFrameRate: 30,\n\n FlagTextures: function() {\n this._flagTextures = true;\n },\n\n BindTextures: function(items) {\n\n var i = items.length;\n while (i--) {\n items[i].bind(Two.Events.change, this._renderer.flagTextures);\n }\n\n this._renderer.flagTextures();\n\n },\n\n UnbindTextures: function(items) {\n\n var i = items.length;\n while (i--) {\n items[i].unbind(Two.Events.change, this._renderer.flagTextures);\n }\n\n this._renderer.flagTextures();\n\n },\n\n MakeObservable: function(obj) {\n\n Rectangle.MakeObservable(obj);\n _.each(ImageSequence.Properties, Two.Utils.defineProperty, obj);\n\n Object.defineProperty(obj, 'textures', {\n\n enumerable: true,\n\n get: function() {\n return this._textures;\n },\n\n set: function(textures) {\n\n var updateTextures = this._renderer.flagTextures;\n var bindTextures = this._renderer.bindTextures;\n var unbindTextures = this._renderer.unbindTextures;\n\n // Remove previous listeners\n if (this._textures) {\n this._textures\n .unbind(Two.Events.insert, bindTextures)\n .unbind(Two.Events.remove, unbindTextures);\n }\n\n // Create new Collection with copy of vertices\n this._textures = new Two.Utils.Collection((textures || []).slice(0));\n\n // Listen for Collection changes and bind / unbind\n this._textures\n .bind(Two.Events.insert, bindTextures)\n .bind(Two.Events.remove, unbindTextures);\n\n // Bind Initial Textures\n bindTextures(this._textures);\n\n }\n\n });\n\n },\n\n GenerateTexture: function(obj) {\n if (obj instanceof Two.Texture) {\n return obj;\n } else if (_.isString(obj)) {\n return new Two.Texture(obj);\n }\n }\n\n });\n\n _.extend(ImageSequence.prototype, Rectangle.prototype, {\n\n _flagTextures: false,\n _flagFrameRate: false,\n _flagIndex: false,\n\n // Private variables\n _amount: 1,\n _duration: 0,\n _index: 0,\n _startTime: 0,\n _playing: false,\n _firstFrame: 0,\n _lastFrame: 0,\n _loop: true,\n\n // Exposed through getter-setter\n _textures: null,\n _frameRate: 0,\n _origin: null,\n\n constructor: ImageSequence,\n\n play: function(firstFrame, lastFrame, onLastFrame) {\n\n this._playing = true;\n this._firstFrame = 0;\n this._lastFrame = this.amount - 1;\n this._startTime = _.performance.now();\n\n if (_.isNumber(firstFrame)) {\n this._firstFrame = firstFrame;\n }\n if (_.isNumber(lastFrame)) {\n this._lastFrame = lastFrame;\n }\n if (_.isFunction(onLastFrame)) {\n this._onLastFrame = onLastFrame;\n } else {\n delete this._onLastFrame;\n }\n\n if (this._index !== this._firstFrame) {\n this._startTime -= 1000 * Math.abs(this._index - this._firstFrame)\n / this._frameRate;\n }\n\n return this;\n\n },\n\n pause: function() {\n\n this._playing = false;\n return this;\n\n },\n\n stop: function() {\n\n this._playing = false;\n this._index = 0;\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new ImageSequence(this.textures, this.translation.x,\n this.translation.y, this.frameRate)\n\n clone._loop = this._loop;\n\n if (this._playing) {\n clone.play();\n }\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n _update: function() {\n\n var effects = this._textures;\n var width, height, elapsed, amount, duration, texture;\n var index, frames;\n\n if (this._flagTextures) {\n this._amount = effects.length;\n }\n\n if (this._flagFrameRate) {\n this._duration = 1000 * this._amount / this._frameRate;\n }\n\n if (this._playing && this._frameRate > 0) {\n\n amount = this._amount;\n\n if (_.isNaN(this._lastFrame)) {\n this._lastFrame = amount - 1;\n }\n\n // TODO: Offload perf logic to instance of `Two`.\n elapsed = _.performance.now() - this._startTime;\n frames = this._lastFrame + 1;\n duration = 1000 * (frames - this._firstFrame) / this._frameRate;\n\n if (this._loop) {\n elapsed = elapsed % duration;\n } else {\n elapsed = Math.min(elapsed, duration);\n }\n\n index = _.lerp(this._firstFrame, frames, elapsed / duration);\n index = Math.floor(index);\n\n if (index !== this._index) {\n\n this._index = index;\n texture = effects[this._index];\n\n if (texture.loaded) {\n\n width = texture.image.width;\n height = texture.image.height;\n\n if (this.width !== width) {\n this.width = width;\n }\n if (this.height !== height) {\n this.height = height;\n }\n\n this.fill = texture;\n\n if (index >= this._lastFrame - 1 && this._onLastFrame) {\n this._onLastFrame(); // Shortcut for chainable sprite animations\n }\n\n }\n\n }\n\n } else if (this._flagIndex || !(this.fill instanceof Two.Texture)) {\n\n texture = effects[this._index];\n\n if (texture.loaded) {\n\n width = texture.image.width;\n height = texture.image.height;\n\n if (this.width !== width) {\n this.width = width;\n }\n if (this.height !== height) {\n this.height = height;\n }\n\n }\n\n this.fill = texture;\n\n }\n\n Rectangle.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagTextures = this._flagFrameRate = false;\n Rectangle.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n ImageSequence.MakeObservable(ImageSequence.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Constants\n\n var min = Math.min, max = Math.max;\n var _ = Two.Utils;\n\n /**\n * @class\n * @name Two.Group.Children\n * @extends Two.Utils.Collection\n * @description A children collection which is accesible both by index and by object id\n */\n var Children = function() {\n\n Two.Utils.Collection.apply(this, arguments);\n\n Object.defineProperty(this, '_events', {\n value : {},\n enumerable: false\n });\n\n this.ids = {};\n\n this.on(Two.Events.insert, this.attach);\n this.on(Two.Events.remove, this.detach);\n Children.prototype.attach.apply(this, arguments);\n\n };\n\n Children.prototype = new Two.Utils.Collection();\n\n _.extend(Children.prototype, {\n\n constructor: Children,\n\n attach: function(children) {\n for (var i = 0; i < children.length; i++) {\n this.ids[children[i].id] = children[i];\n }\n return this;\n },\n\n detach: function(children) {\n for (var i = 0; i < children.length; i++) {\n delete this.ids[children[i].id];\n }\n return this;\n }\n\n });\n\n /**\n * @class\n * @name Two.Group\n */\n var Group = Two.Group = function(children) {\n\n Two.Shape.call(this, true);\n\n this._renderer.type = 'group';\n\n this.additions = [];\n this.subtractions = [];\n\n this.children = _.isArray(children) ? children : arguments;\n\n };\n\n _.extend(Group, {\n\n Children: Children,\n\n InsertChildren: function(children) {\n for (var i = 0; i < children.length; i++) {\n replaceParent.call(this, children[i], this);\n }\n },\n\n RemoveChildren: function(children) {\n for (var i = 0; i < children.length; i++) {\n replaceParent.call(this, children[i]);\n }\n },\n\n OrderChildren: function(children) {\n this._flagOrder = true;\n },\n\n Properties: [\n 'fill',\n 'stroke',\n 'linewidth',\n 'visible',\n 'cap',\n 'join',\n 'miter',\n ],\n\n MakeObservable: function(object) {\n\n var properties = Two.Group.Properties;\n\n Object.defineProperty(object, 'opacity', {\n\n enumerable: true,\n\n get: function() {\n return this._opacity;\n },\n\n set: function(v) {\n this._flagOpacity = this._opacity !== v;\n this._opacity = v;\n }\n\n });\n\n Object.defineProperty(object, 'className', {\n\n enumerable: true,\n\n get: function() {\n return this._className;\n },\n\n set: function(v) {\n this._flagClassName = this._className !== v;\n this._className = v;\n }\n\n });\n\n Object.defineProperty(object, 'beginning', {\n\n enumerable: true,\n\n get: function() {\n return this._beginning;\n },\n\n set: function(v) {\n this._flagBeginning = this._beginning !== v;\n this._beginning = v;\n }\n\n });\n\n Object.defineProperty(object, 'ending', {\n\n enumerable: true,\n\n get: function() {\n return this._ending;\n },\n\n set: function(v) {\n this._flagEnding = this._ending !== v;\n this._ending = v;\n }\n\n });\n\n Object.defineProperty(object, 'length', {\n\n enumerable: true,\n\n get: function() {\n if (this._flagLength || this._length <= 0) {\n this._length = 0;\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n this._length += child.length;\n }\n }\n return this._length;\n }\n\n });\n\n Two.Shape.MakeObservable(object);\n Group.MakeGetterSetters(object, properties);\n\n Object.defineProperty(object, 'children', {\n\n enumerable: true,\n\n get: function() {\n return this._children;\n },\n\n set: function(children) {\n\n var insertChildren = _.bind(Group.InsertChildren, this);\n var removeChildren = _.bind(Group.RemoveChildren, this);\n var orderChildren = _.bind(Group.OrderChildren, this);\n\n if (this._children) {\n this._children.unbind();\n }\n\n this._children = new Children(children);\n this._children.bind(Two.Events.insert, insertChildren);\n this._children.bind(Two.Events.remove, removeChildren);\n this._children.bind(Two.Events.order, orderChildren);\n\n }\n\n });\n\n Object.defineProperty(object, 'mask', {\n\n enumerable: true,\n\n get: function() {\n return this._mask;\n },\n\n set: function(v) {\n this._mask = v;\n this._flagMask = true;\n if (!v.clip) {\n v.clip = true;\n }\n }\n\n });\n\n },\n\n MakeGetterSetters: function(group, properties) {\n\n if (!_.isArray(properties)) {\n properties = [properties];\n }\n\n _.each(properties, function(k) {\n Group.MakeGetterSetter(group, k);\n });\n\n },\n\n MakeGetterSetter: function(group, k) {\n\n var secret = '_' + k;\n\n Object.defineProperty(group, k, {\n\n enumerable: true,\n\n get: function() {\n return this[secret];\n },\n\n set: function(v) {\n this[secret] = v;\n _.each(this.children, function(child) { // Trickle down styles\n child[k] = v;\n });\n }\n\n });\n\n }\n\n });\n\n _.extend(Group.prototype, Two.Shape.prototype, {\n\n // Flags\n // http://en.wikipedia.org/wiki/Flag\n\n _flagAdditions: false,\n _flagSubtractions: false,\n _flagOrder: false,\n _flagOpacity: true,\n _flagClassName: false,\n _flagBeginning: false,\n _flagEnding: false,\n\n _flagLength: false,\n _flagMask: false,\n\n // Underlying Properties\n\n _fill: '#fff',\n _stroke: '#000',\n _linewidth: 1.0,\n _opacity: 1.0,\n _className: '',\n _visible: true,\n\n _cap: 'round',\n _join: 'round',\n _miter: 4,\n\n _closed: true,\n _curved: false,\n _automatic: true,\n _beginning: 0,\n _ending: 1.0,\n\n _length: 0,\n _mask: null,\n\n constructor: Group,\n\n // /**\n // * TODO: Group has a gotcha in that it's at the moment required to be bound to\n // * an instance of two in order to add elements correctly. This needs to\n // * be rethought and fixed.\n // */\n clone: function(parent) {\n\n var group = new Group();\n var children = _.map(this.children, function(child) {\n return child.clone();\n });\n\n group.add(children);\n\n group.opacity = this.opacity;\n\n if (this.mask) {\n group.mask = this.mask;\n }\n\n group.translation.copy(this.translation);\n group.rotation = this.rotation;\n group.scale = this.scale;\n group.className = this.className;\n\n if (parent) {\n parent.add(group);\n }\n\n return group._update();\n\n },\n\n // /**\n // * Export the data from the instance of Two.Group into a plain JavaScript\n // * object. This also makes all children plain JavaScript objects. Great\n // * for turning into JSON and storing in a database.\n // */\n toObject: function() {\n\n var result = {\n children: [],\n translation: this.translation.toObject(),\n rotation: this.rotation,\n scale: this.scale instanceof Two.Vector ? this.scale.toObject() : this.scale,\n opacity: this.opacity,\n className: this.className,\n mask: (this.mask ? this.mask.toObject() : null)\n };\n\n _.each(this.children, function(child, i) {\n result.children[i] = child.toObject();\n }, this);\n\n return result;\n\n },\n\n // /**\n // * Anchor all children to the upper left hand corner\n // * of the group.\n // */\n corner: function() {\n\n var rect = this.getBoundingClientRect(true),\n corner = { x: rect.left, y: rect.top };\n\n this.children.forEach(function(child) {\n child.translation.sub(corner);\n });\n\n return this;\n\n },\n\n // /**\n // * Anchors all children around the center of the group,\n // * effectively placing the shape around the unit circle.\n // */\n center: function() {\n\n var rect = this.getBoundingClientRect(true);\n\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n this.children.forEach(function(child) {\n if (child.isShape) {\n child.translation.sub(rect.centroid);\n }\n });\n\n // this.translation.copy(rect.centroid);\n\n return this;\n\n },\n\n // /**\n // * Recursively search for id. Returns the first element found.\n // * Returns null if none found.\n // */\n getById: function (id) {\n var search = function (node, id) {\n if (node.id === id) {\n return node;\n } else if (node.children) {\n var i = node.children.length;\n while (i--) {\n var found = search(node.children[i], id);\n if (found) return found;\n }\n }\n\n };\n return search(this, id) || null;\n },\n\n // /**\n // * Recursively search for classes. Returns an array of matching elements.\n // * Empty array if none found.\n // */\n getByClassName: function (cl) {\n var found = [];\n var search = function (node, cl) {\n if (node.classList.indexOf(cl) != -1) {\n found.push(node);\n } else if (node.children) {\n node.children.forEach(function (child) {\n search(child, cl);\n });\n }\n return found;\n };\n return search(this, cl);\n },\n\n // /**\n // * Recursively search for children of a specific type,\n // * e.g. Two.Polygon. Pass a reference to this type as the param.\n // * Returns an empty array if none found.\n // */\n getByType: function(type) {\n var found = [];\n var search = function (node, type) {\n for (var id in node.children) {\n if (node.children[id] instanceof type) {\n found.push(node.children[id]);\n } else if (node.children[id] instanceof Two.Group) {\n search(node.children[id], type);\n }\n }\n return found;\n };\n return search(this, type);\n },\n\n // /**\n // * Add objects to the group.\n // */\n add: function(objects) {\n\n // Allow to pass multiple objects either as array or as multiple arguments\n // If it's an array also create copy of it in case we're getting passed\n // a childrens array directly.\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n } else {\n objects = objects.slice();\n }\n\n // Add the objects\n for (var i = 0; i < objects.length; i++) {\n if (!(objects[i] && objects[i].id)) continue;\n this.children.push(objects[i]);\n }\n\n return this;\n\n },\n\n // /**\n // * Remove objects from the group.\n // */\n remove: function(objects) {\n\n var l = arguments.length,\n grandparent = this.parent;\n\n // Allow to call remove without arguments\n // This will detach the object from its own parent.\n if (l <= 0 && grandparent) {\n grandparent.remove(this);\n return this;\n }\n\n // Allow to pass multiple objects either as array or as multiple arguments\n // If it's an array also create copy of it in case we're getting passed\n // a childrens array directly.\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n } else {\n objects = objects.slice();\n }\n\n // Remove the objects\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i] || !(this.children.ids[objects[i].id])) continue;\n this.children.splice(_.indexOf(this.children, objects[i]), 1);\n }\n\n return this;\n\n },\n\n // /**\n // * Return an object with top, left, right, bottom, width, and height\n // * parameters of the group.\n // */\n getBoundingClientRect: function(shallow) {\n var rect;\n\n // TODO: Update this to not __always__ update. Just when it needs to.\n this._update(true);\n\n // Variables need to be defined here, because of nested nature of groups.\n var left = Infinity, right = -Infinity,\n top = Infinity, bottom = -Infinity;\n\n var regex = Two.Texture.RegularExpressions.effect;\n\n for (var i = 0; i < this.children.length; i++) {\n\n var child = this.children[i];\n\n if (!child.visible || regex.test(child._renderer.type)) {\n continue;\n }\n\n rect = child.getBoundingClientRect(shallow);\n\n if (!_.isNumber(rect.top) || !_.isNumber(rect.left) ||\n !_.isNumber(rect.right) || !_.isNumber(rect.bottom)) {\n continue;\n }\n\n top = min(rect.top, top);\n left = min(rect.left, left);\n right = max(rect.right, right);\n bottom = max(rect.bottom, bottom);\n\n }\n\n return {\n top: top,\n left: left,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n\n },\n\n // /**\n // * Trickle down of noFill\n // */\n noFill: function() {\n this.children.forEach(function(child) {\n child.noFill();\n });\n return this;\n },\n\n // /**\n // * Trickle down of noStroke\n // */\n noStroke: function() {\n this.children.forEach(function(child) {\n child.noStroke();\n });\n return this;\n },\n\n // /**\n // * Trickle down subdivide\n // */\n subdivide: function() {\n var args = arguments;\n this.children.forEach(function(child) {\n child.subdivide.apply(child, args);\n });\n return this;\n },\n\n _update: function() {\n\n if (this._flagBeginning || this._flagEnding) {\n\n var beginning = Math.min(this._beginning, this._ending);\n var ending = Math.max(this._beginning, this._ending);\n var length = this.length;\n var sum = 0;\n\n var bd = beginning * length;\n var ed = ending * length;\n var distance = (ed - bd);\n\n for (var i = 0; i < this.children.length; i++) {\n\n var child = this.children[i];\n var l = child.length;\n\n if (bd > sum + l) {\n child.beginning = 1;\n child.ending = 1;\n } else if (ed < sum) {\n child.beginning = 0;\n child.ending = 0;\n } else if (bd > sum && bd < sum + l) {\n child.beginning = (bd - sum) / l;\n child.ending = 1;\n } else if (ed > sum && ed < sum + l) {\n child.beginning = 0;\n child.ending = (ed - sum) / l;\n } else {\n child.beginning = 0;\n child.ending = 1;\n }\n\n sum += l;\n\n }\n\n }\n\n return Two.Shape.prototype._update.apply(this, arguments);\n\n },\n\n flagReset: function() {\n\n if (this._flagAdditions) {\n this.additions.length = 0;\n this._flagAdditions = false;\n }\n\n if (this._flagSubtractions) {\n this.subtractions.length = 0;\n this._flagSubtractions = false;\n }\n\n this._flagOrder = this._flagMask = this._flagOpacity = this._flagClassName\n this._flagBeginning = this._flagEnding = false;\n\n Two.Shape.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n Group.MakeObservable(Group.prototype);\n\n // /**\n // * Helper function used to sync parent-child relationship within the\n // * `Two.Group.children` object.\n // *\n // * Set the parent of the passed object to another object\n // * and updates parent-child relationships\n // * Calling with one arguments will simply remove the parenting\n // */\n function replaceParent(child, newParent) {\n\n var parent = child.parent;\n var index;\n\n if (parent === newParent) {\n this.additions.push(child);\n this._flagAdditions = true;\n return;\n }\n\n if (parent && parent.children.ids[child.id]) {\n\n index = _.indexOf(parent.children, child);\n parent.children.splice(index, 1);\n\n // If we're passing from one parent to another...\n index = _.indexOf(parent.additions, child);\n\n if (index >= 0) {\n parent.additions.splice(index, 1);\n } else {\n parent.subtractions.push(child);\n parent._flagSubtractions = true;\n }\n\n }\n\n if (newParent) {\n child.parent = newParent;\n this.additions.push(child);\n this._flagAdditions = true;\n return;\n }\n\n // If we're passing from one parent to another...\n index = _.indexOf(this.additions, child);\n\n if (index >= 0) {\n this.additions.splice(index, 1);\n } else {\n this.subtractions.push(child);\n this._flagSubtractions = true;\n }\n\n delete child.parent;\n\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n\nexport default (this || window).Two;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/** @license React v16.8.6\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var k=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.concurrent_mode\"):60111,y=n?Symbol.for(\"react.forward_ref\"):60112,z=n?Symbol.for(\"react.suspense\"):60113,aa=n?Symbol.for(\"react.memo\"):\n60115,ba=n?Symbol.for(\"react.lazy\"):60116,A=\"function\"===typeof Symbol&&Symbol.iterator;function ca(a,b,d,c,e,g,h,f){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[d,c,e,g,h,f],m=0;a=Error(b.replace(/%s/g,function(){return l[m++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction B(a){for(var b=arguments.length-1,d=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=0;cP.length&&P.push(a)}\nfunction S(a,b,d,c){var e=typeof a;if(\"undefined\"===e||\"boolean\"===e)a=null;var g=!1;if(null===a)g=!0;else switch(e){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return d(c,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var h=0;hthis.eventPool.length&&this.eventPool.push(a)}\nfunction hb(a){a.eventPool=[];a.getPooled=ib;a.release=jb}var kb=y.extend({data:null}),lb=y.extend({data:null}),mb=[9,13,27,32],nb=Ra&&\"CompositionEvent\"in window,ob=null;Ra&&\"documentMode\"in document&&(ob=document.documentMode);\nvar pb=Ra&&\"TextEvent\"in window&&!ob,qb=Ra&&(!nb||ob&&8=ob),rb=String.fromCharCode(32),sb={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},tb=!1;\nfunction ub(a,b){switch(a){case \"keyup\":return-1!==mb.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function vb(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var wb=!1;function xb(a,b){switch(a){case \"compositionend\":return vb(b);case \"keypress\":if(32!==b.which)return null;tb=!0;return rb;case \"textInput\":return a=b.data,a===rb&&tb?null:a;default:return null}}\nfunction yb(a,b){if(wb)return\"compositionend\"===a||!nb&&ub(a,b)?(a=eb(),db=cb=bb=null,wb=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1b}return!1}function C(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new C(a,0,!1,a,null)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new C(b,1,!1,a[1],null)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new C(a,2,!1,a.toLowerCase(),null)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new C(a,2,!1,a,null)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new C(a,3,!1,a.toLowerCase(),null)});[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new C(a,3,!0,a,null)});\n[\"capture\",\"download\"].forEach(function(a){D[a]=new C(a,4,!1,a,null)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new C(a,6,!1,a,null)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new C(a,5,!1,a.toLowerCase(),null)});var rc=/[\\-:]([a-z])/g;function sc(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(rc,\nsc);D[b]=new C(b,1,!1,a,null)});\"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/1999/xlink\")});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\")});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new C(a,1,!1,a.toLowerCase(),null)});\nfunction tc(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2zd.length&&zd.push(a)}}}var Fd={},Gd=0,Hd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);\nfunction Id(a){Object.prototype.hasOwnProperty.call(a,Hd)||(a[Hd]=Gd++,Fd[a[Hd]]={});return Fd[a[Hd]]}function Jd(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function Kd(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ld(a,b){var c=Kd(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Kd(c)}}function Md(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Md(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Nd(){for(var a=window,b=Jd();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Jd(a.document)}return b}function Od(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Pd(){var a=Nd();if(Od(a)){if(\"selectionStart\"in a)var b={start:a.selectionStart,end:a.selectionEnd};else a:{b=(b=a.ownerDocument)&&b.defaultView||window;var c=b.getSelection&&b.getSelection();if(c&&0!==c.rangeCount){b=c.anchorNode;var d=c.anchorOffset,e=c.focusNode;c=c.focusOffset;try{b.nodeType,e.nodeType}catch(A){b=null;break a}var f=0,g=-1,h=-1,l=0,k=0,m=a,p=null;b:for(;;){for(var t;;){m!==b||0!==d&&3!==m.nodeType||(g=f+d);m!==e||0!==c&&3!==m.nodeType||(h=f+c);3===m.nodeType&&(f+=m.nodeValue.length);\nif(null===(t=m.firstChild))break;p=m;m=t}for(;;){if(m===a)break b;p===b&&++l===d&&(g=f);p===e&&++k===c&&(h=f);if(null!==(t=m.nextSibling))break;m=p;p=m.parentNode}m=t}b=-1===g||-1===h?null:{start:g,end:h}}else b=null}b=b||{start:0,end:0}}else b=null;return{focusedElem:a,selectionRange:b}}\nfunction Qd(a){var b=Nd(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Md(c.ownerDocument.documentElement,c)){if(null!==d&&Od(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ld(c,f);var g=Ld(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Sd={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},Td=null,Ud=null,Vd=null,Wd=!1;\nfunction Xd(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(Wd||null==Td||Td!==Jd(c))return null;c=Td;\"selectionStart\"in c&&Od(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return Vd&&dd(Vd,c)?null:(Vd=c,a=y.getPooled(Sd.select,Ud,a,b),a.type=\"select\",a.target=Td,Qa(a),a)}\nvar Yd={eventTypes:Sd,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Id(e);f=sa.onSelect;for(var g=0;g=b.length?void 0:x(\"93\"),b=b[0]),c=b),null==c&&(c=\"\"));a._wrapperState={initialValue:uc(c)}}\nfunction de(a,b){var c=uc(b.value),d=uc(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function ee(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var fe={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction ge(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function he(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?ge(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ie=void 0,je=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==fe.svg||\"innerHTML\"in a)a.innerHTML=b;else{ie=ie||document.createElement(\"div\");ie.innerHTML=\"\"+b+\"\";for(b=ie.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ke(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar le={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(le).forEach(function(a){me.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);le[b]=le[a]})});function ne(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||le.hasOwnProperty(a)&&le[a]?(\"\"+b).trim():b+\"px\"}\nfunction oe(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ne(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var pe=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction qe(a,b){b&&(pe[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?x(\"137\",a,\"\"):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?x(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:x(\"61\")),null!=b.style&&\"object\"!==typeof b.style?x(\"62\",\"\"):void 0)}\nfunction re(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}\nfunction se(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Id(a);b=sa[b];for(var d=0;dGe||(a.current=Fe[Ge],Fe[Ge]=null,Ge--)}function G(a,b){Ge++;Fe[Ge]=a.current;a.current=b}var He={},H={current:He},I={current:!1},Ie=He;\nfunction Je(a,b){var c=a.type.contextTypes;if(!c)return He;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function J(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Ke(a){F(I,a);F(H,a)}function Le(a){F(I,a);F(H,a)}\nfunction Me(a,b,c){H.current!==He?x(\"168\"):void 0;G(H,b,a);G(I,c,a)}function Ne(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)e in a?void 0:x(\"108\",ic(b)||\"Unknown\",e);return n({},c,d)}function Oe(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||He;Ie=H.current;G(H,b,a);G(I,I.current,a);return!0}\nfunction Pe(a,b,c){var d=a.stateNode;d?void 0:x(\"169\");c?(b=Ne(a,b,Ie),d.__reactInternalMemoizedMergedChildContext=b,F(I,a),F(H,a),G(H,b,a)):F(I,a);G(I,c,a)}var Qe=null,Re=null;function Se(a){return function(b){try{return a(b)}catch(c){}}}\nfunction Te(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Qe=Se(function(a){return b.onCommitFiberRoot(c,a)});Re=Se(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}\nfunction Ue(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function K(a,b,c,d){return new Ue(a,b,c,d)}\nfunction Ve(a){a=a.prototype;return!(!a||!a.isReactComponent)}function We(a){if(\"function\"===typeof a)return Ve(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===cc)return 11;if(a===ec)return 14}return 2}\nfunction Xe(a,b){var c=a.alternate;null===c?(c=K(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;c.contextDependencies=a.contextDependencies;c.sibling=a.sibling;\nc.index=a.index;c.ref=a.ref;return c}\nfunction Ye(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)Ve(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case Xb:return Ze(c.children,e,f,b);case bc:return $e(c,e|3,f,b);case Yb:return $e(c,e|2,f,b);case Zb:return a=K(12,c,b,e|4),a.elementType=Zb,a.type=Zb,a.expirationTime=f,a;case dc:return a=K(13,c,b,e),a.elementType=dc,a.type=dc,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case $b:g=10;break a;case ac:g=9;break a;case cc:g=11;break a;case ec:g=\n14;break a;case fc:g=16;d=null;break a}x(\"130\",null==a?a:typeof a,\"\")}b=K(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Ze(a,b,c,d){a=K(7,a,d,b);a.expirationTime=c;return a}function $e(a,b,c,d){a=K(8,a,d,b);b=0===(b&1)?Yb:bc;a.elementType=b;a.type=b;a.expirationTime=c;return a}function af(a,b,c){a=K(6,a,null,b);a.expirationTime=c;return a}\nfunction bf(a,b,c){b=K(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function cf(a,b){a.didError=!1;var c=a.earliestPendingTime;0===c?a.earliestPendingTime=a.latestPendingTime=b:cb&&(a.latestPendingTime=b);df(b,a)}\nfunction ef(a,b){a.didError=!1;if(0===b)a.earliestPendingTime=0,a.latestPendingTime=0,a.earliestSuspendedTime=0,a.latestSuspendedTime=0,a.latestPingedTime=0;else{bb?a.earliestPendingTime=a.latestPendingTime=0:a.earliestPendingTime>b&&(a.earliestPendingTime=a.latestPendingTime));c=a.earliestSuspendedTime;0===c?cf(a,b):bc&&cf(a,b)}df(0,a)}function ff(a,b){a.didError=!1;a.latestPingedTime>=b&&(a.latestPingedTime=0);var c=a.earliestPendingTime,d=a.latestPendingTime;c===b?a.earliestPendingTime=d===b?a.latestPendingTime=0:d:d===b&&(a.latestPendingTime=c);c=a.earliestSuspendedTime;d=a.latestSuspendedTime;0===c?a.earliestSuspendedTime=a.latestSuspendedTime=b:cb&&(a.latestSuspendedTime=b);df(b,a)}\nfunction gf(a,b){var c=a.earliestPendingTime;a=a.earliestSuspendedTime;c>b&&(b=c);a>b&&(b=a);return b}function df(a,b){var c=b.earliestSuspendedTime,d=b.latestSuspendedTime,e=b.earliestPendingTime,f=b.latestPingedTime;e=0!==e?e:f;0===e&&(0===a||da&&(a=c);b.nextExpirationTimeToWorkOn=e;b.expirationTime=a}function L(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}\nfunction hf(a){var b=a._result;switch(a._status){case 1:return b;case 2:throw b;case 0:throw b;default:a._status=0;b=a._ctor;b=b();b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)});switch(a._status){case 1:return a._result;case 2:throw a._result;}a._result=b;throw b;}}var jf=(new aa.Component).refs;\nfunction kf(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}\nvar tf={isMounted:function(a){return(a=a._reactInternalFiber)?2===ed(a):!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.tag=rf;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=lf();c=mf(c,a);var d=nf(c);d.tag=\nsf;void 0!==b&&null!==b&&(d.callback=b);of();pf(a,d);qf(a,c)}};function uf(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!dd(c,d)||!dd(e,f):!0}\nfunction vf(a,b,c){var d=!1,e=He;var f=b.contextType;\"object\"===typeof f&&null!==f?f=M(f):(e=J(b)?Ie:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Je(a,e):He);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=tf;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction wf(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&tf.enqueueReplaceState(b,b.state,null)}\nfunction xf(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=jf;var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=M(f):(f=J(b)?Ie:H.current,e.context=Je(a,f));f=a.updateQueue;null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;\"function\"===typeof f&&(kf(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==\ntypeof e.componentWillMount||(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&tf.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState));\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var zf=Array.isArray;\nfunction Af(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;var d=void 0;c&&(1!==c.tag?x(\"309\"):void 0,d=c.stateNode);d?void 0:x(\"147\",a);var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===jf&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}\"string\"!==typeof a?x(\"284\"):void 0;c._owner?void 0:x(\"290\",a)}return a}\nfunction Bf(a,b){\"textarea\"!==a.type&&x(\"31\",\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\")}\nfunction Cf(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=Xe(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,du?(B=q,q=null):B=q.sibling;var w=t(e,q,h[u],k);if(null===w){null===q&&(q=B);break}a&&\nq&&null===w.alternate&&b(e,q);g=f(w,g,u);null===m?l=w:m.sibling=w;m=w;q=B}if(u===h.length)return c(e,q),l;if(null===q){for(;uu?(B=q,q=null):B=q.sibling;var v=t(e,q,w.value,k);if(null===v){q||(q=B);break}a&&q&&null===v.alternate&&b(e,q);g=f(v,g,u);null===m?l=v:m.sibling=v;m=v;q=B}if(w.done)return c(e,q),l;if(null===q){for(;!w.done;u++,w=h.next())w=p(e,w.value,k),null!==w&&(g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);return l}for(q=d(e,q);!w.done;u++,w=h.next())w=A(q,e,u,w.value,k),null!==w&&(a&&null!==w.alternate&&q.delete(null===w.key?u:\nw.key),g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);a&&q.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===Xb&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Vb:a:{l=f.key;for(k=d;null!==k;){if(k.key===l)if(7===k.tag?f.type===Xb:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===Xb?f.props.children:f.props,h);d.ref=Af(a,k,f);d.return=a;a=d;break a}else{c(a,k);break}else b(a,k);k=\nk.sibling}f.type===Xb?(d=Ze(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ye(f.type,f.key,f.props,null,a.mode,h),h.ref=Af(a,d,f),h.return=a,a=h)}return g(a);case Wb:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=bf(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\n\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return=a,a=d):(c(a,d),d=af(f,a.mode,h),d.return=a,a=d),g(a);if(zf(f))return v(a,d,f,h);if(hc(f))return R(a,d,f,h);l&&Bf(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:h=a.type,x(\"152\",h.displayName||h.name||\"Component\")}return c(a,d)}}var Df=Cf(!0),Ef=Cf(!1),Ff={},N={current:Ff},Gf={current:Ff},Hf={current:Ff};function If(a){a===Ff?x(\"174\"):void 0;return a}\nfunction Jf(a,b){G(Hf,b,a);G(Gf,a,a);G(N,Ff,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:he(null,\"\");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=he(b,c)}F(N,a);G(N,b,a)}function Kf(a){F(N,a);F(Gf,a);F(Hf,a)}function Lf(a){If(Hf.current);var b=If(N.current);var c=he(b,a.type);b!==c&&(G(Gf,a,a),G(N,c,a))}function Mf(a){Gf.current===a&&(F(N,a),F(Gf,a))}\nvar Nf=0,Of=2,Pf=4,Qf=8,Rf=16,Sf=32,Tf=64,Uf=128,Vf=Tb.ReactCurrentDispatcher,Wf=0,Xf=null,O=null,P=null,Yf=null,Q=null,Zf=null,$f=0,ag=null,bg=0,cg=!1,dg=null,eg=0;function fg(){x(\"321\")}function gg(a,b){if(null===b)return!1;for(var c=0;c$f&&($f=m)):f=l.eagerReducer===a?l.eagerState:a(f,l.action);g=l;l=l.next}while(null!==l&&l!==d);k||(h=g,e=f);bd(f,b.memoizedState)||(qg=!0);b.memoizedState=f;b.baseUpdate=h;b.baseState=e;c.lastRenderedState=f}return[b.memoizedState,c.dispatch]}\nfunction rg(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};null===ag?(ag={lastEffect:null},ag.lastEffect=a.next=a):(b=ag.lastEffect,null===b?ag.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,ag.lastEffect=a));return a}function sg(a,b,c,d){var e=mg();bg|=a;e.memoizedState=rg(b,c,void 0,void 0===d?null:d)}\nfunction tg(a,b,c,d){var e=ng();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&gg(d,g.deps)){rg(Nf,c,f,d);return}}bg|=a;e.memoizedState=rg(b,c,f,d)}function ug(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function vg(){}\nfunction wg(a,b,c){25>eg?void 0:x(\"301\");var d=a.alternate;if(a===Xf||null!==d&&d===Xf)if(cg=!0,a={expirationTime:Wf,action:c,eagerReducer:null,eagerState:null,next:null},null===dg&&(dg=new Map),c=dg.get(b),void 0===c)dg.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{of();var e=lf();e=mf(e,a);var f={expirationTime:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.last;if(null===g)f.next=f;else{var h=g.next;null!==h&&(f.next=h);g.next=f}b.last=f;if(0===a.expirationTime&&(null===\nd||0===d.expirationTime)&&(d=b.lastRenderedReducer,null!==d))try{var l=b.lastRenderedState,k=d(l,c);f.eagerReducer=d;f.eagerState=k;if(bd(k,l))return}catch(m){}finally{}qf(a,e)}}\nvar kg={readContext:M,useCallback:fg,useContext:fg,useEffect:fg,useImperativeHandle:fg,useLayoutEffect:fg,useMemo:fg,useReducer:fg,useRef:fg,useState:fg,useDebugValue:fg},ig={readContext:M,useCallback:function(a,b){mg().memoizedState=[a,void 0===b?null:b];return a},useContext:M,useEffect:function(a,b){return sg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return sg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,b){return sg(4,Pf|Sf,a,b)},\nuseMemo:function(a,b){var c=mg();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=mg();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=wg.bind(null,Xf,a);return[d.memoizedState,a]},useRef:function(a){var b=mg();a={current:a};return b.memoizedState=a},useState:function(a){var b=mg();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={last:null,dispatch:null,\nlastRenderedReducer:og,lastRenderedState:a};a=a.dispatch=wg.bind(null,Xf,a);return[b.memoizedState,a]},useDebugValue:vg},jg={readContext:M,useCallback:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];c.memoizedState=[a,b];return a},useContext:M,useEffect:function(a,b){return tg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return tg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,\nb){return tg(4,Pf|Sf,a,b)},useMemo:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:pg,useRef:function(){return ng().memoizedState},useState:function(a){return pg(og,a)},useDebugValue:vg},xg=null,yg=null,zg=!1;\nfunction Ag(a,b){var c=K(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function Bg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Cg(a){if(zg){var b=yg;if(b){var c=b;if(!Bg(a,b)){b=De(c);if(!b||!Bg(a,b)){a.effectTag|=2;zg=!1;xg=a;return}Ag(xg,c)}xg=a;yg=Ee(b)}else a.effectTag|=2,zg=!1,xg=a}}function Dg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&18!==a.tag;)a=a.return;xg=a}function Eg(a){if(a!==xg)return!1;if(!zg)return Dg(a),zg=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!xe(b,a.memoizedProps))for(b=yg;b;)Ag(a,b),b=De(b);Dg(a);yg=xg?De(a.stateNode):null;return!0}function Fg(){yg=xg=null;zg=!1}\nvar Gg=Tb.ReactCurrentOwner,qg=!1;function S(a,b,c,d){b.child=null===a?Ef(b,null,c,d):Df(b,a.child,c,d)}function Hg(a,b,c,d,e){c=c.render;var f=b.ref;Ig(b,e);d=hg(a,b,c,d,f,e);if(null!==a&&!qg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),Jg(a,b,e);b.effectTag|=1;S(a,b,d,e);return b.child}\nfunction Kg(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!Ve(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,Lg(a,b,g,d,e,f);a=Ye(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e=c)return Sg(a,b,c);b=Jg(a,b,c);return null!==b?b.sibling:null}}return Jg(a,b,c)}}else qg=!1;b.expirationTime=0;switch(b.tag){case 2:d=\nb.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;var e=Je(b,H.current);Ig(b,c);e=hg(null,b,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;lg();if(J(d)){var f=!0;Oe(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var g=d.getDerivedStateFromProps;\"function\"===typeof g&&kf(b,d,g,a);e.updater=tf;b.stateNode=e;e._reactInternalFiber=b;xf(b,d,a,c);b=Qg(null,b,d,!0,f,\nc)}else b.tag=0,S(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);f=b.pendingProps;a=hf(e);b.type=a;e=b.tag=We(a);f=L(a,f);g=void 0;switch(e){case 0:g=Mg(null,b,a,f,c);break;case 1:g=Og(null,b,a,f,c);break;case 11:g=Hg(null,b,a,f,c);break;case 14:g=Kg(null,b,a,L(a.type,f),d,c);break;default:x(\"306\",a,\"\")}return g;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Mg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,\ne=b.elementType===d?e:L(d,e),Og(a,b,d,e,c);case 3:Rg(b);d=b.updateQueue;null===d?x(\"282\"):void 0;e=b.memoizedState;e=null!==e?e.element:null;yf(b,d,b.pendingProps,null,c);d=b.memoizedState.element;if(d===e)Fg(),b=Jg(a,b,c);else{e=b.stateNode;if(e=(null===a||null===a.child)&&e.hydrate)yg=Ee(b.stateNode.containerInfo),xg=b,e=zg=!0;e?(b.effectTag|=2,b.child=Ef(b,null,d,c)):(S(a,b,d,c),Fg());b=b.child}return b;case 5:return Lf(b),null===a&&Cg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,\ng=e.children,xe(d,e)?g=null:null!==f&&xe(d,f)&&(b.effectTag|=16),Ng(a,b),1!==c&&b.mode&1&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(S(a,b,g,c),b=b.child),b;case 6:return null===a&&Cg(b),null;case 13:return Sg(a,b,c);case 4:return Jf(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Df(b,null,d,c):S(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Hg(a,b,d,e,c);case 7:return S(a,b,b.pendingProps,c),b.child;case 8:return S(a,b,b.pendingProps.children,\nc),b.child;case 12:return S(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;Ug(b,f);if(null!==g){var h=g.value;f=bd(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!I.current){b=Jg(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var l=h.contextDependencies;if(null!==l){g=h.child;for(var k=l.first;null!==k;){if(k.context===d&&0!==\n(k.observedBits&f)){1===h.tag&&(k=nf(c),k.tag=sf,pf(h,k));h.expirationTime=b&&(qg=!0);a.contextDependencies=null}\nfunction M(a,b){if(Yg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)Yg=a,b=1073741823;b={context:a,observedBits:b,next:null};null===Xg?(null===Wg?x(\"308\"):void 0,Xg=b,Wg.contextDependencies={first:b,expirationTime:0}):Xg=Xg.next=b}return a._currentValue}var $g=0,rf=1,sf=2,ah=3,Pg=!1;function bh(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}\nfunction ch(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function nf(a){return{expirationTime:a,tag:$g,payload:null,callback:null,next:null,nextEffect:null}}function dh(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}\nfunction pf(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=bh(a.memoizedState))}else d=a.updateQueue,e=c.updateQueue,null===d?null===e?(d=a.updateQueue=bh(a.memoizedState),e=c.updateQueue=bh(c.memoizedState)):d=a.updateQueue=ch(e):null===e&&(e=c.updateQueue=ch(d));null===e||d===e?dh(d,b):null===d.lastUpdate||null===e.lastUpdate?(dh(d,b),dh(e,b)):(dh(d,b),e.lastUpdate=b)}\nfunction eh(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=bh(a.memoizedState):fh(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function fh(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=ch(b));return b}\nfunction gh(a,b,c,d,e,f){switch(c.tag){case rf:return a=c.payload,\"function\"===typeof a?a.call(f,d,e):a;case ah:a.effectTag=a.effectTag&-2049|64;case $g:a=c.payload;e=\"function\"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return n({},d,e);case sf:Pg=!0}return d}\nfunction yf(a,b,c,d,e){Pg=!1;b=fh(a,b);for(var f=b.baseState,g=null,h=0,l=b.firstUpdate,k=f;null!==l;){var m=l.expirationTime;md?e:d);Ih.current=null;d=void 0;1c?b:c;0===b&&(Fh=null);$h(a,b)}\nfunction ai(a){for(;;){var b=a.alternate,c=a.return,d=a.sibling;if(0===(a.effectTag&1024)){T=a;a:{var e=b;b=a;var f=U;var g=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:J(b.type)&&Ke(b);break;case 3:Kf(b);Le(b);g=b.stateNode;g.pendingContext&&(g.context=g.pendingContext,g.pendingContext=null);if(null===e||null===e.child)Eg(b),b.effectTag&=-3;mh(b);break;case 5:Mf(b);var h=If(Hf.current);f=b.type;if(null!==e&&null!=b.stateNode)nh(e,b,f,g,h),e.ref!==b.ref&&(b.effectTag|=\n128);else if(g){var l=If(N.current);if(Eg(b)){g=b;e=g.stateNode;var k=g.type,m=g.memoizedProps,p=h;e[Fa]=g;e[Ga]=m;f=void 0;h=k;switch(h){case \"iframe\":case \"object\":E(\"load\",e);break;case \"video\":case \"audio\":for(k=0;k\\x3c/script>\",k=e.removeChild(e.firstChild)):\"string\"===typeof e.is?k=k.createElement(p,{is:e.is}):(k=k.createElement(p),\"select\"===p&&(p=k,e.multiple?p.multiple=!0:e.size&&(p.size=e.size))):k=k.createElementNS(l,p);e=k;e[Fa]=m;e[Ga]=g;lh(e,b,!1,!1);p=e;k=f;m=g;var t=h,A=re(k,m);switch(k){case \"iframe\":case \"object\":E(\"load\",\np);h=m;break;case \"video\":case \"audio\":for(h=0;hg&&(g=e),h>g&&(g=h),f=f.sibling;b.childExpirationTime=g}if(null!==T)return T;null!==c&&0===(c.effectTag&1024)&&(null===c.firstEffect&&\n(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1=v)t=0;else if(-1===t||v component higher in the tree to provide a loading indicator or placeholder to display.\"+jc(k))}Nh=!0;m=jh(m,k);h=l;do{switch(h.tag){case 3:h.effectTag|=2048;h.expirationTime=g;g=Ch(h,m,g);eh(h,g);break a;case 1:if(t=m,A=h.type,k=h.stateNode,0===(h.effectTag&64)&&(\"function\"===typeof A.getDerivedStateFromError||null!==k&&\"function\"===typeof k.componentDidCatch&&(null===Fh||!Fh.has(k)))){h.effectTag|=2048;\nh.expirationTime=g;g=Eh(h,t,g);eh(h,g);break a}}h=h.return}while(null!==h)}T=ai(f);continue}}}break}while(1);Kh=!1;Hh.current=c;Yg=Xg=Wg=null;lg();if(e)Lh=null,a.finishedWork=null;else if(null!==T)a.finishedWork=null;else{c=a.current.alternate;null===c?x(\"281\"):void 0;Lh=null;if(Nh){e=a.latestPendingTime;f=a.latestSuspendedTime;g=a.latestPingedTime;if(0!==e&&eb?0:b)):(a.pendingCommitExpirationTime=d,a.finishedWork=c)}}\nfunction sh(a,b){for(var c=a.return;null!==c;){switch(c.tag){case 1:var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Fh||!Fh.has(d))){a=jh(b,a);a=Eh(c,a,1073741823);pf(c,a);qf(c,1073741823);return}break;case 3:a=jh(b,a);a=Ch(c,a,1073741823);pf(c,a);qf(c,1073741823);return}c=c.return}3===a.tag&&(c=jh(b,a),c=Ch(a,c,1073741823),pf(a,c),qf(a,1073741823))}\nfunction mf(a,b){var c=r.unstable_getCurrentPriorityLevel(),d=void 0;if(0===(b.mode&1))d=1073741823;else if(Kh&&!Oh)d=U;else{switch(c){case r.unstable_ImmediatePriority:d=1073741823;break;case r.unstable_UserBlockingPriority:d=1073741822-10*(((1073741822-a+15)/10|0)+1);break;case r.unstable_NormalPriority:d=1073741822-25*(((1073741822-a+500)/25|0)+1);break;case r.unstable_LowPriority:case r.unstable_IdlePriority:d=1;break;default:x(\"313\")}null!==Lh&&d===U&&--d}c===r.unstable_UserBlockingPriority&&\n(0===gi||d=d){a.didError=!1;b=a.latestPingedTime;if(0===b||b>c)a.latestPingedTime=c;df(c,a);c=a.expirationTime;0!==c&&Xh(a,c)}}function Ah(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=lf();b=mf(b,a);a=hi(a,b);null!==a&&(cf(a,b),b=a.expirationTime,0!==b&&Xh(a,b))}\nfunction hi(a,b){a.expirationTimeU&&Sh(),cf(a,b),Kh&&!Oh&&Lh===a||Xh(a,a.expirationTime),ii>ji&&(ii=0,x(\"185\")))}function ki(a,b,c,d,e){return r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){return a(b,c,d,e)})}var li=null,Y=null,mi=0,ni=void 0,W=!1,oi=null,Z=0,gi=0,pi=!1,qi=null,X=!1,ri=!1,si=null,ti=r.unstable_now(),ui=1073741822-(ti/10|0),vi=ui,ji=50,ii=0,wi=null;function xi(){ui=1073741822-((r.unstable_now()-ti)/10|0)}\nfunction yi(a,b){if(0!==mi){if(ba.expirationTime&&(a.expirationTime=b);W||(X?ri&&(oi=a,Z=1073741823,Di(a,1073741823,!1)):1073741823===b?Yh(1073741823,!1):yi(a,b))}\nfunction Ci(){var a=0,b=null;if(null!==Y)for(var c=Y,d=li;null!==d;){var e=d.expirationTime;if(0===e){null===c||null===Y?x(\"244\"):void 0;if(d===d.nextScheduledRoot){li=Y=d.nextScheduledRoot=null;break}else if(d===li)li=e=d.nextScheduledRoot,Y.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===Y){Y=c;Y.nextScheduledRoot=li;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{e>a&&(a=e,b=d);if(d===Y)break;if(1073741823===\na)break;c=d;d=d.nextScheduledRoot}}oi=b;Z=a}var Ei=!1;function di(){return Ei?!0:r.unstable_shouldYield()?Ei=!0:!1}function zi(){try{if(!di()&&null!==li){xi();var a=li;do{var b=a.expirationTime;0!==b&&ui<=b&&(a.nextExpirationTimeToWorkOn=ui);a=a.nextScheduledRoot}while(a!==li)}Yh(0,!0)}finally{Ei=!1}}\nfunction Yh(a,b){Ci();if(b)for(xi(),vi=ui;null!==oi&&0!==Z&&a<=Z&&!(Ei&&ui>Z);)Di(oi,Z,ui>Z),Ci(),xi(),vi=ui;else for(;null!==oi&&0!==Z&&a<=Z;)Di(oi,Z,!1),Ci();b&&(mi=0,ni=null);0!==Z&&yi(oi,Z);ii=0;wi=null;if(null!==si)for(a=si,si=null,b=0;b=c&&(null===si?si=[d]:si.push(d),d._defer)){a.finishedWork=b;a.expirationTime=0;return}a.finishedWork=null;a===wi?ii++:(wi=a,ii=0);r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){Zh(a,b)})}function Dh(a){null===oi?x(\"246\"):void 0;oi.expirationTime=0;pi||(pi=!0,qi=a)}function Gi(a,b){var c=X;X=!0;try{return a(b)}finally{(X=c)||W||Yh(1073741823,!1)}}\nfunction Hi(a,b){if(X&&!ri){ri=!0;try{return a(b)}finally{ri=!1}}return a(b)}function Ii(a,b,c){X||W||0===gi||(Yh(gi,!1),gi=0);var d=X;X=!0;try{return r.unstable_runWithPriority(r.unstable_UserBlockingPriority,function(){return a(b,c)})}finally{(X=d)||W||Yh(1073741823,!1)}}\nfunction Ji(a,b,c,d,e){var f=b.current;a:if(c){c=c._reactInternalFiber;b:{2===ed(c)&&1===c.tag?void 0:x(\"170\");var g=c;do{switch(g.tag){case 3:g=g.stateNode.context;break b;case 1:if(J(g.type)){g=g.stateNode.__reactInternalMemoizedMergedChildContext;break b}}g=g.return}while(null!==g);x(\"171\");g=void 0}if(1===c.tag){var h=c.type;if(J(h)){c=Ne(c,h,g);break a}}c=g}else c=He;null===b.context?b.context=c:b.pendingContext=c;b=e;e=nf(d);e.payload={element:a};b=void 0===b?null:b;null!==b&&(e.callback=b);\nof();pf(f,e);qf(f,d);return d}function Ki(a,b,c,d){var e=b.current,f=lf();e=mf(f,e);return Ji(a,b,c,e,d)}function Li(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function Mi(a,b,c){var d=3=Jh&&(b=Jh-1);this._expirationTime=Jh=b;this._root=a;this._callbacks=this._next=null;this._hasChildren=this._didComplete=!1;this._children=null;this._defer=!0}Ni.prototype.render=function(a){this._defer?void 0:x(\"250\");this._hasChildren=!0;this._children=a;var b=this._root._internalRoot,c=this._expirationTime,d=new Oi;Ji(a,b,null,c,d._onCommit);return d};\nNi.prototype.then=function(a){if(this._didComplete)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};\nNi.prototype.commit=function(){var a=this._root._internalRoot,b=a.firstBatch;this._defer&&null!==b?void 0:x(\"251\");if(this._hasChildren){var c=this._expirationTime;if(b!==this){this._hasChildren&&(c=this._expirationTime=b._expirationTime,this.render(this._children));for(var d=null,e=b;e!==this;)d=e,e=e._next;null===d?x(\"251\"):void 0;d._next=e._next;this._next=b;a.firstBatch=this}this._defer=!1;Bi(a,c);b=this._next;this._next=null;b=a.firstBatch=b;null!==b&&b._hasChildren&&b.render(b._children)}else this._next=\nnull,this._defer=!1};Ni.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var a=this._callbacks;if(null!==a)for(var b=0;b=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};function Qi(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}Gb=Gi;Hb=Ii;Ib=function(){W||0===gi||(Yh(gi,!1),gi=0)};\nfunction Ri(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new Pi(a,!1,b)}\nfunction Si(a,b,c,d,e){var f=c._reactRootContainer;if(f){if(\"function\"===typeof e){var g=e;e=function(){var a=Li(f._internalRoot);g.call(a)}}null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)}else{f=c._reactRootContainer=Ri(c,d);if(\"function\"===typeof e){var h=e;e=function(){var a=Li(f._internalRoot);h.call(a)}}Hi(function(){null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)})}return Li(f._internalRoot)}\nfunction Ti(a,b){var c=2=b){c=a;break}a=a.next}while(a!==d);null===c?c=d:c===d&&(d=h,p());b=c.previous;b.next=c.previous=h;h.next=c;h.previous=\nb}}function v(){if(-1===k&&null!==d&&1===d.priorityLevel){m=!0;try{do u();while(null!==d&&1===d.priorityLevel)}finally{m=!1,null!==d?p():n=!1}}}function t(a){m=!0;var b=e;e=a;try{if(a)for(;null!==d;){var c=exports.unstable_now();if(d.expirationTime<=c){do u();while(null!==d&&d.expirationTime<=c)}else break}else if(null!==d){do u();while(null!==d&&!w())}}finally{m=!1,e=b,null!==d?p():n=!1,v()}}\nvar x=Date,y=\"function\"===typeof setTimeout?setTimeout:void 0,z=\"function\"===typeof clearTimeout?clearTimeout:void 0,A=\"function\"===typeof requestAnimationFrame?requestAnimationFrame:void 0,B=\"function\"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0,C,D;function E(a){C=A(function(b){z(D);a(b)});D=y(function(){B(C);a(exports.unstable_now())},100)}\nif(\"object\"===typeof performance&&\"function\"===typeof performance.now){var F=performance;exports.unstable_now=function(){return F.now()}}else exports.unstable_now=function(){return x.now()};var r,q,w,G=null;\"undefined\"!==typeof window?G=window:\"undefined\"!==typeof global&&(G=global);\nif(G&&G._schedMock){var H=G._schedMock;r=H[0];q=H[1];w=H[2];exports.unstable_now=H[3]}else if(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var I=null,J=function(a){if(null!==I)try{I(a)}finally{I=null}};r=function(a){null!==I?setTimeout(r,0,a):(I=a,setTimeout(J,0,!1))};q=function(){I=null};w=function(){return!1}}else{\"undefined\"!==typeof console&&(\"function\"!==typeof A&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\n\"function\"!==typeof B&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"));var K=null,L=!1,M=-1,N=!1,O=!1,P=0,R=33,S=33;w=function(){return P<=exports.unstable_now()};var T=new MessageChannel,U=T.port2;T.port1.onmessage=function(){L=!1;var a=K,b=M;K=null;M=-1;var c=exports.unstable_now(),f=!1;if(0>=P-c)if(-1!==b&&b<=c)f=!0;else{N||(N=!0,E(V));K=a;M=b;return}if(null!==a){O=!0;try{a(f)}finally{O=!1}}};\nvar V=function(a){if(null!==K){E(V);var b=a-P+S;bb&&(b=8),S=bb?U.postMessage(void 0):N||(N=!0,E(V))};q=function(){K=null;L=!1;M=-1}}exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;\nexports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=g,f=k;g=a;k=exports.unstable_now();try{return b()}finally{g=c,k=f,v()}};exports.unstable_next=function(a){switch(g){case 1:case 2:case 3:var b=3;break;default:b=g}var c=g,f=k;g=b;k=exports.unstable_now();try{return a()}finally{g=c,k=f,v()}};\nexports.unstable_scheduleCallback=function(a,b){var c=-1!==k?k:exports.unstable_now();if(\"object\"===typeof b&&null!==b&&\"number\"===typeof b.timeout)b=c+b.timeout;else switch(g){case 1:b=c+-1;break;case 2:b=c+250;break;case 5:b=c+1073741823;break;case 4:b=c+1E4;break;default:b=c+5E3}a={callback:a,priorityLevel:g,expirationTime:b,next:null,previous:null};if(null===d)d=a.next=a.previous=a,p();else{c=null;var f=d;do{if(f.expirationTime>b){c=f;break}f=f.next}while(f!==d);null===c?c=d:c===d&&(d=a,p());\nb=c.previous;b.next=c.previous=a;a.next=c;a.previous=b}return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)d=null;else{a===d&&(d=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=g;return function(){var c=g,f=k;g=b;k=exports.unstable_now();try{return a.apply(this,arguments)}finally{g=c,k=f,v()}}};exports.unstable_getCurrentPriorityLevel=function(){return g};\nexports.unstable_shouldYield=function(){return!e&&(null!==d&&d.expirationTime) => {\n const { size, color } = {\n ...defaultOption,\n ...option\n }\n const two = new Two({\n type: Two.Types.canvas,\n width: size,\n height: size\n })\n\n const a = two.makeLine(two.width / 2, 0, two.width / 2, two.height)\n const b = two.makeLine(0, two.height / 2, two.width, two.height / 2)\n a.stroke = b.stroke = color\n\n two.update()\n\n return two\n}\n","import Two, { ConstructorParams } from 'two.js'\nexport interface DrawingOption extends ConstructorParams {\n el: SvgDrawing['el']\n penColor?: SvgDrawing['penColor']\n penWidth?: SvgDrawing['penWidth']\n strokeCap?: SvgDrawing['strokeCap'] // butt | round | square | inherit\n strokeLineJoin?: SvgDrawing['strokeLineJoin'] // miter | round | bevel\n}\n\nexport class SvgDrawing extends Two {\n public penColor: Two.Color\n public penWidth: number\n public strokeCap: string\n public strokeLineJoin: string\n private line: Two.Path | null\n private current: Two.Vector\n private el: HTMLElement\n constructor(params: DrawingOption) {\n super(params)\n /**\n * bind methods\n */\n this.drawingStart = this.drawingStart.bind(this)\n this.clearListner = this.clearListner.bind(this)\n this.toSvgXml = this.toSvgXml.bind(this)\n this.toSvgBase64 = this.toSvgBase64.bind(this)\n this.move = this.move.bind(this)\n this.mouseUp = this.mouseUp.bind(this)\n this.mouseMove = this.mouseMove.bind(this)\n this.mouseDown = this.mouseDown.bind(this)\n this.touchStart = this.touchStart.bind(this)\n this.touchMove = this.touchMove.bind(this)\n this.touchEnd = this.touchEnd.bind(this)\n /**\n * Setup parameter\n */\n this.line = null\n // TODO: Fix Two.vector constructor params\n this.current = new Two.Vector(0, 0)\n this.penColor = params.penColor || '#333'\n this.penWidth = params.penWidth || 10\n this.strokeCap = params.strokeCap || 'round'\n this.strokeLineJoin = params.strokeLineJoin || 'round'\n this.type = params.type || Two.Types.svg\n this.el = params.el\n this.width = this.el.clientWidth\n this.height = this.el.clientHeight\n this.drawingStart()\n }\n\n /**\n * toSvgXML\n */\n public toSvgXml(): string | null {\n const domElement: HTMLElement = (this.renderer as any).domElement\n if (!domElement) return null\n return `${\n domElement.innerHTML\n }`\n }\n /**\n * toSvgXML\n */\n public toSvgBase64(): string | null {\n const svgXml = this.toSvgXml()\n if (!svgXml) return null\n return `data:image/svg+xml;base64,${btoa(svgXml)}`\n }\n /**\n * listner clear\n */\n public clearListner() {\n this.el.removeEventListener('mousedown', this.mouseDown)\n this.el.removeEventListener('touchstart', this.touchStart)\n }\n /**\n * DrawingStart\n */\n private drawingStart() {\n this.appendTo(this.el)\n this.el.addEventListener('mousedown', this.mouseDown)\n this.el.addEventListener('touchstart', this.touchStart)\n return this\n }\n /**\n * Drawing Line methods\n */\n private move({ x, y }: { x: number; y: number }): void {\n const rect: ClientRect | DOMRect = this.el.getBoundingClientRect()\n const makePoint = (mx: number, my: number) =>\n new Two.Vector(mx - rect.left, my - rect.top)\n this.current.set(x, y)\n if (this.line) {\n const v = makePoint(x, y)\n this.line.vertices.push(v as Two.Anchor)\n return\n }\n const vprev: Two.Vector = makePoint(this.current.x, this.current.y)\n const vnext: Two.Vector = makePoint(x, y)\n this.line = this.makeCurve([vprev, vnext], true)\n this.line.noFill().stroke = this.penColor\n this.line.linewidth = this.penWidth\n this.line.cap = this.strokeCap\n this.line.join = this.strokeLineJoin\n this.line.vertices.map(v => {\n if (!this.line) return\n v.addSelf(this.line.translation)\n })\n this.line.translation.clear()\n }\n\n /**\n * Drawing MouseEvent\n */\n private mouseMove(e: MouseEvent): void {\n this.move({ x: e.clientX, y: e.clientY })\n }\n private mouseUp(e: MouseEvent) {\n this.el.removeEventListener('mousemove', this.mouseMove)\n this.el.removeEventListener('mouseup', this.mouseUp)\n }\n private mouseDown(e: MouseEvent) {\n this.current.set(e.clientX, e.clientY)\n this.line = null\n this.el.addEventListener('mousemove', this.mouseMove)\n this.el.addEventListener('mouseup', this.mouseUp)\n }\n\n /**\n * Drawing TouchEvent\n */\n private touchMove(e: TouchEvent) {\n e.preventDefault()\n const touch = e.touches[0]\n this.move({\n x: touch.pageX,\n y: touch.pageY\n })\n return false\n }\n private touchEnd(e: TouchEvent) {\n e.preventDefault()\n this.el.removeEventListener('touchmove', this.touchMove)\n this.el.removeEventListener('touchend', this.touchEnd)\n return false\n }\n private touchStart(e: TouchEvent) {\n e.preventDefault()\n const touch = e.touches[0]\n this.current.set(touch.pageX, touch.pageY)\n this.line = null\n this.el.addEventListener('touchmove', this.touchMove)\n this.el.addEventListener('touchend', this.touchEnd)\n return false\n }\n}\n","import Two, { ConstructorParams } from 'two.js'\nexport interface AnimationOption extends ConstructorParams {\n el: SvgAnimation['el']\n shakingRange?: SvgAnimation['shakingRange']\n}\n\nexport class SvgAnimation extends Two {\n public shakingRange: number\n private el: HTMLElement\n constructor(params: AnimationOption) {\n super(params)\n /**\n * bind methods\n */\n this.animationStart = this.animationStart.bind(this)\n this.shaking = this.shaking.bind(this)\n this.initSvgXml = this.initSvgXml.bind(this)\n this.strokeAnimation = this.strokeAnimation.bind(this)\n /**\n * Setup parameter\n */\n // TODO: Fix Two.vector constructor params\n this.shakingRange = params.shakingRange || 2\n this.type = params.type || Two.Types.canvas\n this.el = params.el\n this.width = this.el.clientWidth\n this.height = this.el.clientHeight\n this.animationStart()\n }\n /**\n * Shaking Drawing line\n */\n public shaking(): () => void {\n const randomShaking = (): number =>\n Math.random() * this.shakingRange - this.shakingRange / 2\n const updateShake = (frameCount: any, timeDelta: any) => {\n // shake speed\n if (frameCount % 5 !== 0) return\n this.scene.children.map((child: Two.Object) => {\n if (!(child as Two.Path).vertices) return\n ;(child as Two.Path).vertices.map((v: Two.Anchor | any) => {\n // TODO: define position types\n // v.position is base position\n if (!v.position) {\n v.position = v.clone()\n }\n v.x = v.position.x + randomShaking()\n v.y = v.position.y + randomShaking()\n })\n })\n }\n\n // to fix original position\n const toBasePosition = () =>\n this.scene.children.map((child: Two.Object) => {\n this.scene.children.map((child: Two.Object) => {\n const vertices = (child as Two.Path).vertices\n if (!vertices) return\n vertices.map((v: Two.Anchor | any) => {\n // TODO: define position types\n if (!v.position) {\n return\n }\n v.x = v.position.x\n v.y = v.position.y\n delete v.position\n })\n })\n })\n this.bind('update', updateShake).play()\n return () => {\n this.unbind('update', updateShake)\n toBasePosition()\n }\n }\n /**\n * DrawingStart\n */\n private animationStart(): SvgAnimation {\n this.appendTo(this.el)\n return this\n }\n // TODO: SvgElement XML test\n public initSvgXml(svgNode: SVGElement) {\n this.clear()\n const fresh: Two.Group = this.interpret(svgNode)\n ;(fresh as any).subdivide()\n this.scene.add(fresh)\n }\n\n public strokeAnimation() {\n const distances = calculateDistances(this.scene)\n const total = distances.reduce((to: number, d: number) => to + d, 0)\n const setEnding = (group: Two.Group, ti: number) => {\n const traversed: number = ti * total\n let current = 0\n group.children.map((child: Two.Object, i: number) => {\n const distance = distances[i]\n const min = current\n const max = current + distance\n ;(child as Two.Path).ending = cmap(traversed, min, max, 0, 1)\n current = max\n })\n }\n let t = 0\n const update = (...arg: any[]) => {\n if (t < 0.9999) {\n t += 0.00625\n } else {\n t = 0\n }\n setEnding(this.scene, t)\n }\n this.bind('update', update).play()\n return () => this.unbind('update', update)\n }\n}\n\nfunction calculateDistances(group: Two.Group): number[] {\n return group.children.reduce((distances: number[], child: Two.Object) => {\n let d: number = 0\n let a: Two.Vector\n if (!(child as Two.Path).vertices) return distances\n ;(child as Two.Path).vertices.map((b: Two.Vector, i: number) => {\n if (i > 0) {\n d += a.distanceTo(b)\n }\n a = b\n })\n return [...distances, d]\n }, [])\n}\n\nconst clamp = (v: number, min: number, max: number) =>\n Math.max(Math.min(v, max), min)\n\nconst map = (v: number, i1: number, i2: number, o1: number, o2: number) =>\n o1 + (o2 - o1) * ((v - i1) / (i2 - i1))\n\nconst cmap = (v: number, i1: number, i2: number, o1: number, o2: number) =>\n clamp(map(v, i1, i2, o1, o2), o1, o2)\n","import React, { useEffect, useRef, Fragment, useCallback } from 'react'\nimport Two from 'two.js'\nimport { render } from 'react-dom'\nimport { createGrid } from './createGrid'\nimport { SvgDrawing, SvgAnimation } from '../'\n\nconst size = 30\nconst gridImage = (createGrid({\n size\n}).renderer as any).domElement.toDataURL('image/png')\n\nconst mimeTypeMap = {\n png: 'image/png',\n jpg: 'image/jpeg',\n svg: 'image/svg+xml'\n}\nconst getRandomInt = (max: number): number =>\n Math.floor(Math.random() * Math.floor(max))\nconst getRandomColor = (): string =>\n `#${Array.from({ length: 3 }, () =>\n String(getRandomInt(255).toString(16)).padStart(2, '0')\n ).join('')}`\n\nconst getMimeType = (extention: keyof typeof mimeTypeMap) =>\n mimeTypeMap.hasOwnProperty(extention)\n ? mimeTypeMap[extention]\n : mimeTypeMap['png']\nconst downloadBlob = (base64: string, extention: keyof typeof mimeTypeMap) => {\n const bin = atob(base64.replace(/^.*,/, ''))\n const buffer = new Uint8Array(bin.length)\n for (let i = 0; i < bin.length; i++) {\n buffer[i] = bin.charCodeAt(i)\n }\n const filename = `${new Date().toISOString()}.${extention}`\n const blob = new Blob([buffer.buffer], {\n type: getMimeType(extention)\n })\n if (window.navigator.msSaveBlob) {\n // IE\n window.navigator.msSaveBlob(blob, filename)\n } else if (window.URL && window.URL.createObjectURL) {\n // Firefox, Chrome, Safari\n const a = document.createElement('a')\n a.download = filename\n a.href = window.URL.createObjectURL(blob)\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n } else {\n // Other\n window.open(base64, '_blank')\n }\n}\n\nconst Example = () => {\n const divRef = useRef(null)\n const svgDrawingRef = useRef(null)\n const animationRef = useRef(null)\n const svgAnimationRef = useRef(null)\n const stopShakingRef = useRef<(() => void) | null>(null)\n const stopStrokeRef = useRef<(() => void) | null>(null)\n const stopShaking = useCallback(() => {\n if (stopShakingRef.current) {\n stopShakingRef.current()\n stopShakingRef.current = null\n return true\n }\n return false\n }, [])\n const clickShaking = useCallback(\n (e: React.MouseEvent) => {\n if (stopShaking()) return\n if (!svgAnimationRef.current) return\n stopShakingRef.current = svgAnimationRef.current.shaking()\n },\n [stopShaking]\n )\n const stopStroke = useCallback(() => {\n if (stopStrokeRef.current) {\n stopStrokeRef.current()\n stopStrokeRef.current = null\n return true\n }\n return false\n }, [])\n const clickStroke = useCallback(\n (e: React.MouseEvent) => {\n if (stopStroke()) return\n if (!svgAnimationRef.current) return\n stopStrokeRef.current = svgAnimationRef.current.strokeAnimation()\n },\n [stopStroke]\n )\n const animationFrameUpdate = useCallback(() => {\n if (!svgAnimationRef.current || !svgDrawingRef.current) return\n svgAnimationRef.current.clear()\n // This is nesting dom\n // animation.current.makeGroup(svgDrawingRef.current.scene.clone())\n svgDrawingRef.current.scene.children.map((twoObj: Two.Object) => {\n if (!svgAnimationRef.current) return\n svgAnimationRef.current.scene.add(twoObj.clone())\n })\n svgAnimationRef.current.update()\n }, [])\n const clickDownload = useCallback(\n (extention: keyof typeof mimeTypeMap) => (\n e: React.MouseEvent\n ) => {\n if (!svgAnimationRef.current) return\n const domElemet = (svgAnimationRef.current.renderer as any).domElement\n const blob = domElemet.toDataURL(getMimeType(extention))\n downloadBlob(blob, extention)\n },\n []\n )\n const clickDownloadSVG = useCallback(() => {\n if (!svgDrawingRef.current) return\n const data = svgDrawingRef.current.toSvgBase64()\n if (!data) return\n downloadBlob(data, 'svg')\n }, [])\n const clickClear = useCallback(() => {\n if (svgDrawingRef.current) svgDrawingRef.current.clear()\n stopShaking()\n stopStroke()\n animationFrameUpdate()\n }, [animationFrameUpdate, stopStroke, stopShaking])\n const clickUndo = useCallback(() => {\n if (!svgDrawingRef.current) return\n const path = svgDrawingRef.current.scene.children\n if (path.length === 0) return\n svgDrawingRef.current.remove(path[path.length - 1])\n animationFrameUpdate()\n }, [animationFrameUpdate])\n const clickRandomColor = useCallback(() => {\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.penColor = getRandomColor()\n }, [])\n\n const changePenWidth = useCallback(\n (e: React.ChangeEvent) => {\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.penWidth = Number(e.target.value)\n },\n []\n )\n const changeShakingRange = useCallback(\n (e: React.ChangeEvent) => {\n if (!svgAnimationRef.current) return\n svgAnimationRef.current.shakingRange = Number(e.target.value)\n },\n []\n )\n const changeCap = useCallback((e: React.ChangeEvent) => {\n const cap = e.target.value\n if (!['butt', 'round', 'square'].includes(e.target.value)) return\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.strokeCap = cap\n }, [])\n const changeLineJoin = useCallback(\n (e: React.ChangeEvent) => {\n const lineJoin = e.target.value\n if (!['miter', 'round', 'bevel'].includes(e.target.value)) return\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.strokeLineJoin = lineJoin\n },\n []\n )\n useEffect(() => {\n if (svgDrawingRef.current) return\n if (!divRef.current) return\n svgDrawingRef.current = new SvgDrawing({\n el: divRef.current,\n autostart: true,\n penWidth: 5\n })\n })\n useEffect(() => {\n if (!animationRef.current) return\n svgAnimationRef.current = new SvgAnimation({\n el: animationRef.current,\n type: Two.Types.canvas,\n shakingRange: 5\n })\n })\n return (\n \n
\n pen width\n \n
\n
\n stroke cap\n \n
\n
\n stroke line join\n \n
\n \n \n \n
\n \n \n \n \n \n
\n
\n \n \n \n
\n Shaking Range\n \n
\n
\n \n
\n )\n}\n\nconst app = document.createElement('div')\ndocument.body.appendChild(app)\nrender(, app)\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/react/index.js","webpack:///./node_modules/two.js/build/two.module.js","webpack:///./node_modules/object-assign/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/react-dom/index.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./src/example/createGrid.ts","webpack:///./src/SvgDrawing.ts","webpack:///./src/SvgAnimation.ts","webpack:///./src/example/index.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","Two","_","Registry","window","previousTwo","root","toString","_indexAmount","natural","slice","Array","indexOf","keys","Function","identity","isArguments","obj","isFunction","isString","isNumber","isDate","isRegExp","isError","isFinite","isNaN","parseFloat","isBoolean","isNull","isUndefined","isEmpty","isArrayLike","isArray","length","isElement","nodeType","isObject","type","toArray","map","values","range","start","stop","step","Math","max","ceil","idx","list","item","has","func","ctx","apply","arguments","args","extend","base","sources","k","defaults","push","each","iteratee","context","this","result","once","init","after","times","uniqueId","prefix","id","sin","cos","sqrt","acos","atan2","abs","round","PI","HALF_PI","pow","min","count","perf","performance","now","Date","MAX_ARRAY_INDEX","collection","dom","temp","document","createElement","hasEventListeners","addEventListener","elem","event","bool","attachEvent","unbind","removeEventListeners","detachEvent","getRequestAnimationFrame","cancel","lastTime","vendors","request","requestAnimationFrame","callback","element","currTime","getTime","timeToCall","setTimeout","loop","options","params","fullscreen","width","height","Types","svg","autostart","v","test","domElement","tagName","toLowerCase","renderer","Utils","setPlaying","frameCount","fitted","fitToWindow","body","style","overflow","margin","padding","top","left","right","bottom","position","display","setSize","ratio","Events","resize","updateDimensions","scene","Instances","raf","nextFrameID","Float32Array","webgl","canvas","Version","PublishDate","Identifier","play","pause","update","render","change","remove","insert","order","load","Commands","move","line","curve","arc","close","Resolution","noConflict","secret","flag","charAt","toUpperCase","set","Image","isHeadless","shim","CanvasRenderer","release","vertices","children","xhr","path","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","Curve","CollinearityEpsilon","RecursionLimit","CuspLimit","Tolerance","distance","angle","epsilon","Number","EPSILON","abscissas","weights","devicePixelRatio","getBackingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","getRatio","b","playing","getComputedMatrix","matrix","Matrix","parent","matrices","_matrix","reverse","e","elements","multiply","deltaTransformPoint","x","y","dx","a","dy","Vector","decomposeMatrix","px","py","skewX","skewY","translateX","translateY","f","scaleX","scaleY","rotation","extractCSSText","text","styles","commands","command","split","replace","getSvgStyles","node","applySvgViewBox","translation","scale","applySvgAttributes","parentStyles","attr","attributes","extracted","getComputedStyle","computedStyles","nodeName","opacity","visible","visibility","transform","baseVal","getCTM","transforms","cap","join","miter","linewidth","Group","getById","classList","read","g","getAttribute","group","childNodes","tag","add","polygon","points","verts","match","p1","p2","Anchor","poly","Path","noStroke","fill","polyline","closed","control","coords","coord","relative","last","number","numbers","first","j","ct","bin","lower","items","trim","hasDoubleDecimals","lastIndexOf","splice","concat","x1","y1","x2","y2","x3","y3","x4","y4","reflection","n1","n2","undefined","point","addSelf","getReflection","controls","AppendCurveProperties","isZero","rx","ry","xAxisRotation","largeArcFlag","sweepFlag","anchor","rect","getBoundingClientRect","centroid","subSelf","circle","Circle","ellipse","Ellipse","w2","h2","Rectangle","rounded-rect","radius","RoundedRectangle","Line","noFill","lineargradient","ox","oy","stops","matches","child","offset","color","Gradient","Stop","gradient","LinearGradient","radialgradient","cx","cy","fx","fy","RadialGradient","subdivide","limit","amount","getComponentOnCubicBezier","getCurveLength","ax","bx","ay","by","integrate","getCurveBoundingBox","t1","t2","b2ac","sqrtb2ac","tvalues","bounds","mt","jlen","w","A","B","sum","Ax","getCurveFromPoints","prev","mod","next","getControlPoints","a1","angleBetween","a2","d1","distanceBetween","d2","mid","copy","getAnchorsFromArcData","center","ts","td","ccw","translate","rotate","pct","theta","lerp","toFixed","floor","Collection","Error","message","on","handler","_events","off","names","events","ev","trigger","listen","bound","ignore","method","constructor","pop","popped","shift","shifted","pushed","unshift","unshifted","inserted","spliced","sort","solveSegmentIntersection","decoupleShapes","wr","appendTo","appendChild","animated","_lastFrame","timeDelta","objects","clear","makeLine","makeRectangle","makeRoundedRectangle","sides","makeCircle","makeEllipse","makeStar","outerRadius","innerRadius","star","Star","makeCurve","makePolygon","Polygon","makeArcSegment","ir","or","sa","ea","res","arcSegment","ArcSegment","makePath","makeText","Text","makeLinearGradient","makeRadialGradient","makeSprite","cols","rows","frameRate","sprite","Sprite","makeImageSequence","paths","imageSequence","ImageSequence","makeTexture","Texture","makeGroup","interpret","svgNode","shallow","attach","data","innerHTML","define","contains","zero","v1","v2","sub","subtract","ratioBetween","distanceBetweenSquared","MakeObservable","_bound","_x","_y","xgs","ygs","BoundProto","clone","subtractSelf","multiplySelf","multiplyScalar","divide","divideSelf","divideScalar","negate","dot","lengthSquared","normalize","distanceTo","distanceToSquared","setLength","equals","eps","toObject","radians","lx","ly","_broadcast","_command","_relative","ilx","ily","irx","iry","AnchorProto","tan","fix","array","Identity","Multiply","C","z","A0","A1","A2","A3","A4","A5","A6","A7","A8","B0","B1","B2","B3","B4","B5","B6","B7","B8","manual","h","inverse","out","a00","a01","a02","a10","a11","a12","a20","a21","a22","b01","b11","b21","det","sx","sy","fullMatrix","output","hasOutput","version","xlink","alignments","attrs","createElementNS","setAttributes","setAttributeNS","setAttribute","removeAttributes","removeAttribute","string","vx","vy","ux","uy","ar","bl","br","cl","getClip","shape","clip","_renderer","defs","_clip","removeChild","parentNode","orderChild","renderChild","_update","_opacity","_flagOpacity","flagMatrix","_flagMatrix","_flagClassName","_className","_flagAdditions","additions","forEach","_flagSubtractions","subtractions","_flagOrder","_flagMask","_mask","flagReset","changed","_flagVertices","_closed","_fill","_flagFill","_stroke","_flagStroke","stroke","_flagLinewidth","_linewidth","_flagVisible","_visible","_flagCap","_cap","_flagJoin","_join","_flagMiter","_miter","dashes","_flagClip","_flagFamily","_family","_flagSize","_size","_flagLeading","_leading","_flagAlignment","_alignment","_flagBaseline","_baseline","_flagStyle","_style","_flagWeight","_weight","_flagDecoration","_decoration","_flagValue","textContent","_value","linear-gradient","silent","_flagEndPoints","_flagSpread","spreadMethod","_spread","gradientUnits","_flagStops","lengthChanged","_flagOffset","_offset","_flagColor","_color","radial-gradient","_flagCenter","_flagFocal","focal","_flagRadius","_radius","texture","image","_flagLoaded","loaded","href","toDataURL","src","_flagScale","_scale","_flagRepeat","_repeat","patternUnits","appended","Renderer","emptyArray","TWO_PI","isDefaultMatrix","isHidden","middle","prop","val","defaultMatrix","mask","save","restore","forced","parentClipped","isOffset","fillStyle","effect","strokeStyle","lineWidth","miterLimit","lineJoin","lineCap","globalAlpha","setLineDash","beginPath","closePath","renderSvgArcCommand","bezierCurveTo","lineTo","moveTo","font","textAlign","textBaseline","fillText","strokeText","createLinearGradient","addColorStop","createRadialGradient","_flagImage","_flagVideo","createPattern","dx2","dy2","x1p","y1p","rxs","rys","x1ps","y1ps","cr","dq","q","cxp","cyp","startAngle","svgAngle","endAngle","clockwise","deltaAngle","samePoints","tx","ty","renderArcEstimate","smoothing","getContext","overdraw","imageSmoothingEnabled","len","ang","isOne","clearRect","multiplyMatrix","transformation","CanvasUtils","uv","gl","deleteTexture","program","flagParentMatrix","enable","STENCIL_TEST","stencilFunc","ALWAYS","colorMask","stencilOp","KEEP","INCR","NOTEQUAL","DECR","disable","updateCanvas","border","Infinity","forcedParent","flagTexture","triangles","getTriangles","updateBuffer","updateTexture","bindBuffer","ARRAY_BUFFER","textureCoordsBuffer","vertexAttribPointer","textureCoords","FLOAT","bindTexture","TEXTURE_2D","uniformMatrix3fv","buffer","drawArrays","TRIANGLES","measureText","createTexture","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","texImage2D","RGBA","UNSIGNED_BYTE","deleteBuffer","createBuffer","enableVertexAttribArray","bufferData","STATIC_DRAW","shaders","error","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","deleteProgram","source","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","types","vertex","fragment","TextureRegistry","vs","fs","antialias","alpha","premultipliedAlpha","stencil","preserveDrawingBuffer","useProgram","getAttribLocation","getUniformLocation","DEPTH_TEST","BLEND","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","ONE","viewport","resolutionLocation","uniform2f","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","Shape","FlagMatrix","isShape","_translation","_rotation","addTo","bubbles","RegExp","curved","flagVertices","FlagVertices","bindVertices","BindVertices","unbindVertices","UnbindVertices","flagFill","FlagFill","flagStroke","FlagStroke","_curved","beginning","ending","className","automatic","target","_length","elapsed","_lengths","dist","getIdByLength","total","getSubdivisions","Properties","_flagLength","_updateLength","_automatic","_beginning","_ending","_collection","corner","v0","c0","c1","bb","getPointAt","ia","ib","t1x","t1y","t2x","t2y","t3x","t3y","brx","bry","alx","aly","plot","bid","eid","low","high","origin","_origin","_width","_height","_flagWidth","_flagHeight","xr","yr","resolution","rc","_sides","_flagSides","_flagStartAngle","_flagEndAngle","_flagInnerRadius","_flagOuterRadius","_startAngle","_endAngle","_innerRadius","_outerRadius","connected","punctured","amp","outerradius","flagRadius","FlagRadius","console","warn","Ratio","leading","size","alignment","baseline","Index","flagStops","FlagStops","bindStops","BindStops","unbindStops","UnbindStops","spread","_stops","flagEndPoints","FlagEndPoints","_flatCenter","regex","video","flagOffset","FlagOffset","flagScale","FlagScale","RegularExpressions","ImageRegistry","getAbsoluteURL","loadHeadlessBuffer","getImage","absoluteSrc","crossOrigin","Register","_src","img","removeEventListener","videoWidth","videoHeight","_flagSrc","_image","index","_loaded","columns","_flagTexture","_flagColumns","_flagRows","_flagFrameRate","flagIndex","_amount","_duration","_startTime","_playing","_firstFrame","_loop","_texture","_columns","_rows","_frameRate","_index","firstFrame","lastFrame","onLastFrame","_onLastFrame","duration","iw","ih","frames","flagTextures","FlagTextures","bindTextures","BindTextures","unbindTextures","UnbindTextures","textures","GenerateTexture","DefaultFrameRate","_flagTextures","_textures","_flagIndex","effects","Children","ids","detach","replaceParent","newParent","InsertChildren","RemoveChildren","OrderChildren","properties","_flagBeginning","_flagEnding","MakeGetterSetters","_children","insertChildren","removeChildren","orderChildren","MakeGetterSetter","search","found","getByClassName","getByType","grandparent","bd","ed","__webpack_exports__","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","assign","test1","String","getOwnPropertyNames","test2","fromCharCode","test3","letter","err","shouldUseNative","from","symbols","to","TypeError","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","for","u","aa","ba","iterator","encodeURIComponent","framesToPop","ca","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","D","E","props","refs","updater","F","G","isReactComponent","setState","forceUpdate","H","isPureReactComponent","I","current","J","K","L","ref","__self","__source","M","defaultProps","$$typeof","_owner","N","O","P","Q","keyPrefix","R","U","S","T","done","=",":","escape","fa","V","da","W","X","only","createRef","Component","PureComponent","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","forwardRef","lazy","_ctor","_status","_result","memo","compare","useCallback","useContext","useEffect","useImperativeHandle","useDebugValue","useLayoutEffect","useMemo","useReducer","useRef","useState","Fragment","StrictMode","Suspense","cloneElement","createFactory","isValidElement","unstable_ConcurrentMode","unstable_Profiler","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentDispatcher","ReactCurrentOwner","Y","default","Z","originalModule","webpackPolyfill","__webpack_amd_options__","ha","onError","ja","la","ma","na","oa","extractEvents","eventTypes","pa","phasedRegistrationNames","qa","registrationName","ra","dependencies","ta","ua","va","wa","currentTarget","ka","xa","ya","za","Aa","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","Ba","injectEventPluginOrder","injectEventPluginsByName","Ca","stateNode","disabled","Da","Ea","random","Fa","Ga","Ha","Ia","Ja","Ka","La","return","Ma","dispatchConfig","Na","_targetInst","Oa","Pa","Qa","Ra","Sa","Ta","animationend","animationiteration","animationstart","transitionend","Ua","Va","Wa","animation","transition","Xa","Ya","Za","$a","ab","cb","db","eb","fb","gb","nativeEvent","Interface","isDefaultPrevented","defaultPrevented","returnValue","eventPool","jb","destructor","hb","getPooled","preventDefault","stopPropagation","cancelBubble","persist","eventPhase","cancelable","timeStamp","isTrusted","kb","lb","mb","nb","ob","documentMode","pb","qb","rb","sb","beforeInput","bubbled","captured","compositionEnd","compositionStart","compositionUpdate","tb","ub","keyCode","vb","detail","wb","zb","locale","which","xb","ctrlKey","altKey","metaKey","char","yb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","date","datetime","datetime-local","email","month","password","tel","time","url","week","Mb","Nb","srcElement","correspondingUseElement","Ob","Pb","Rb","_valueTracker","getOwnPropertyDescriptor","configurable","getValue","setValue","stopTracking","Qb","Sb","checked","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","fc","gc","hc","ic","displayName","jc","_debugOwner","_debugSource","fileName","lineNumber","kc","lc","mc","nc","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sc","tc","pc","qc","oc","uc","vc","defaultChecked","defaultValue","_wrapperState","initialChecked","wc","initialValue","controlled","xc","yc","zc","Ac","ownerDocument","activeElement","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","_isInputEventSupported","Qc","view","Rc","Alt","Control","Meta","Shift","Sc","getModifierState","Tc","Uc","Vc","Wc","Xc","Yc","screenX","screenY","clientX","clientY","pageX","pageY","shiftKey","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Zc","pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","$c","mouseEnter","mouseLeave","pointerEnter","pointerLeave","ad","defaultView","parentWindow","alternate","cd","dd","effectTag","fd","hd","sibling","gd","animationName","elapsedTime","pseudoElement","jd","clipboardData","kd","ld","charCode","md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","nd","8","9","12","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","od","location","repeat","pd","dataTransfer","qd","touches","targetTouches","changedTouches","rd","sd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","ud","vd","wd","isInteractive","xd","isInteractiveTopLevelEventType","yd","zd","Ad","targetInst","ancestors","containerInfo","topLevelType","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","firstChild","Ld","nextSibling","Nd","HTMLIFrameElement","contentWindow","Od","contentEditable","Qd","focusedElem","selectionRange","Md","compareDocumentPosition","documentElement","end","selectionStart","selectionEnd","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","focus","Rd","Sd","select","Td","Ud","Vd","Wd","Xd","Yd","onSelect","$d","Zd","ae","selected","defaultSelected","be","dangerouslySetInnerHTML","ce","de","ee","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","fe","html","mathml","ge","he","ie","je","namespaceURI","MSApp","execUnsafeLocalFunction","ke","lastChild","nodeValue","le","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","me","ne","oe","setProperty","substring","pe","menuitem","area","col","embed","hr","input","keygen","link","meta","param","track","wbr","qe","re","is","se","blur","te","ue","ve","we","autoFocus","xe","__html","ye","ze","clearTimeout","Ae","unstable_scheduleCallback","Be","unstable_cancelCallback","De","Ee","Set","Fe","Ge","He","Ie","Je","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","childContextTypes","Ke","Le","Me","Ne","getChildContext","Oe","__reactInternalMemoizedMergedChildContext","Pe","Qe","Re","Se","Ue","elementType","pendingProps","contextDependencies","memoizedState","updateQueue","memoizedProps","lastEffect","firstEffect","nextEffect","childExpirationTime","expirationTime","Ve","Xe","Ye","Ze","$e","af","bf","pendingChildren","implementation","cf","didError","earliestPendingTime","latestPendingTime","df","ff","latestPingedTime","earliestSuspendedTime","latestSuspendedTime","gf","nextExpirationTimeToWorkOn","jf","kf","baseState","tf","_reactInternalFiber","lf","nf","mf","payload","of","pf","qf","rf","sf","uf","shouldComponentUpdate","vf","contextType","state","wf","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","xf","yf","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","zf","Af","_stringRef","Bf","Cf","Map","delete","Df","Ef","Ff","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","queue","baseUpdate","ng","og","pg","lastRenderedReducer","dispatch","action","qg","lastRenderedState","eagerReducer","eagerState","rg","destroy","deps","sg","tg","ug","vg","wg","readContext","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","Qg","getDerivedStateFromError","Rg","pendingContext","Sg","timedOutAt","fallback","Tg","Ug","then","hf","We","hydrate","hidden","observedBits","unstable_observedBits","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","firstUpdate","lastUpdate","firstCapturedUpdate","lastCapturedUpdate","firstCapturedEffect","lastCapturedEffect","ch","dh","eh","fh","gh","hh","jh","stack","kh","lh","mh","nh","oh","onClick","onclick","ph","WeakSet","qh","rh","sh","th","vh","componentWillUnmount","wh","xh","yh","insertBefore","_reactRootContainer","zh","wasMultiple","multiple","Ce","uh","hi","Xh","Bh","WeakMap","Ch","Dh","Eh","componentDidCatch","Fh","componentStack","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","__reactInternalSnapshotBeforeUpdate","Vh","Zh","pendingCommitExpirationTime","ef","Pd","Yh","unstable_runWithPriority","unstable_NormalPriority","finishedWork","$h","ai","createTextNode","bi","ci","di","maxDuration","pingCache","ei","fi","unstable_getCurrentPriorityLevel","unstable_ImmediatePriority","unstable_UserBlockingPriority","unstable_LowPriority","unstable_IdlePriority","gi","ii","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","unstable_now","ui","vi","wi","xi","yi","zi","timeout","timeoutHandle","Bi","Ci","nextScheduledRoot","Di","Ei","unstable_shouldYield","_onComplete","Fi","firstBatch","_expirationTime","_defer","Gi","Hi","Ii","Ji","Ki","Li","Ni","_root","_callbacks","_next","_hasChildren","_didComplete","Oi","_didCommit","_onCommit","Pi","_internalRoot","Qi","Si","legacy_renderSubtreeIntoContainer","hasAttribute","Ri","Ti","Mi","querySelectorAll","JSON","stringify","form","commit","unmount","createBatch","Vi","createPortal","findDOMNode","unstable_renderSubtreeIntoContainer","unmountComponentAtNode","unstable_createPortal","unstable_batchedUpdates","unstable_interactiveUpdates","flushSync","unstable_createRoot","unstable_flushControlled","findFiberByHostInstance","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Te","overrideProps","currentDispatcherRef","findHostInstanceByFiber","bundleType","rendererPackageName","Wi","Xi","previous","priorityLevel","cancelAnimationFrame","_schedMock","MessageChannel","port2","port1","onmessage","postMessage","unstable_next","unstable_wrapCallback","unstable_continueExecution","unstable_pauseExecution","unstable_getFirstCallbackNode","defaultOption","SvgDrawing_SvgDrawing","_super","SvgDrawing","_this","drawingStart","clearListner","toSvgXml","toSvgBase64","mouseUp","mouseMove","mouseDown","touchStart","touchMove","touchEnd","two_module","penColor","penWidth","strokeCap","strokeLineJoin","el","clientWidth","clientHeight","__extends","svgXml","btoa","_a","makePoint","mx","my","vprev","vnext","touch","SvgAnimation_SvgAnimation","SvgAnimation","animationStart","shaking","initSvgXml","strokeAnimation","shakingRange","SvgAnimation_extends","randomShaking","updateShake","fresh","distances","reduce","__spread","traversed","arg","_i","cmap","option","two","i1","i2","o1","o2","clamp","gridImage","__assign","mimeTypeMap","png","jpg","getRandomColor","padStart","getMimeType","extention","downloadBlob","base64","atob","Uint8Array","charCodeAt","filename","toISOString","blob","Blob","navigator","msSaveBlob","URL","createObjectURL","download","click","app","react_dom","react_default","divRef","react","svgDrawingRef","animationRef","svgAnimationRef","stopShakingRef","stopStrokeRef","stopShaking","clickShaking","stopStroke","clickStroke","animationFrameUpdate","twoObj","clickDownload","clickDownloadSVG","clickClear","clickUndo","clickRandomColor","changePenWidth","changeShakingRange","changeCap","includes","changeLineJoin","onChange","justifyContent","onTouchEnd","onMouseUp","background","backgroundSize","example_size"],"mappings":"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","file":"main.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n\nMIT License\n\nCopyright (c) 2012 - 2017 jonobr1 / http://jonobr1.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n(this || window).Two = (function(previousTwo) {\n\n var root = typeof window != 'undefined' ? window : typeof global != 'undefined' ? global : null;\n var toString = Object.prototype.toString;\n /**\n * @name _\n * @interface\n * @private\n * @description A collection of useful functions borrowed and repurposed from Underscore.js.\n * @see {@link http://underscorejs.org/}\n */\n var _ = {\n // http://underscorejs.org/ • 1.8.3\n _indexAmount: 0,\n natural: {\n slice: Array.prototype.slice,\n indexOf: Array.prototype.indexOf,\n keys: Object.keys,\n bind: Function.prototype.bind,\n create: Object.create\n },\n identity: function(value) {\n return value;\n },\n isArguments: function(obj) {\n return toString.call(obj) === '[object Arguments]';\n },\n isFunction: function(obj) {\n return toString.call(obj) === '[object Function]';\n },\n isString: function(obj) {\n return toString.call(obj) === '[object String]';\n },\n isNumber: function(obj) {\n return toString.call(obj) === '[object Number]';\n },\n isDate: function(obj) {\n return toString.call(obj) === '[object Date]';\n },\n isRegExp: function(obj) {\n return toString.call(obj) === '[object RegExp]';\n },\n isError: function(obj) {\n return toString.call(obj) === '[object Error]';\n },\n isFinite: function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n },\n isNaN: function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n },\n isBoolean: function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n },\n isNull: function(obj) {\n return obj === null;\n },\n isUndefined: function(obj) {\n return obj === void 0;\n },\n isEmpty: function(obj) {\n if (obj == null) return true;\n if (isArrayLike && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n },\n isElement: function(obj) {\n return !!(obj && obj.nodeType === 1);\n },\n isArray: Array.isArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n },\n isObject: function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n },\n toArray: function(obj) {\n if (!obj) {\n return [];\n }\n if (_.isArray(obj)) {\n return slice.call(obj);\n }\n if (isArrayLike(obj)) {\n return _.map(obj, _.identity);\n }\n return _.values(obj);\n },\n range: function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n },\n indexOf: function(list, item) {\n if (!!_.natural.indexOf) {\n return _.natural.indexOf.call(list, item);\n }\n for (var i = 0; i < list.length; i++) {\n if (list[i] === item) {\n return i;\n }\n }\n return -1;\n },\n has: function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n },\n bind: function(func, ctx) {\n var natural = _.natural.bind;\n if (natural && func.bind === natural) {\n return natural.apply(func, slice.call(arguments, 1));\n }\n var args = slice.call(arguments, 2);\n return function() {\n func.apply(ctx, args);\n };\n },\n extend: function(base) {\n var sources = slice.call(arguments, 1);\n for (var i = 0; i < sources.length; i++) {\n var obj = sources[i];\n for (var k in obj) {\n base[k] = obj[k];\n }\n }\n return base;\n },\n defaults: function(base) {\n var sources = slice.call(arguments, 1);\n for (var i = 0; i < sources.length; i++) {\n var obj = sources[i];\n for (var k in obj) {\n if (base[k] === void 0) {\n base[k] = obj[k];\n }\n }\n }\n return base;\n },\n keys: function(obj) {\n if (!_.isObject(obj)) {\n return [];\n }\n if (_.natural.keys) {\n return _.natural.keys(obj);\n }\n var keys = [];\n for (var k in obj) {\n if (_.has(obj, k)) {\n keys.push(k);\n }\n }\n return keys;\n },\n values: function(obj) {\n var keys = _.keys(obj);\n var values = [];\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i];\n values.push(obj[k]);\n }\n return values;\n },\n each: function(obj, iteratee, context) {\n var ctx = context || this;\n var keys = !isArrayLike(obj) && _.keys(obj);\n var length = (keys || obj).length;\n for (var i = 0; i < length; i++) {\n var k = keys ? keys[i] : i;\n iteratee.call(ctx, obj[k], k, obj);\n }\n return obj;\n },\n map: function(obj, iteratee, context) {\n var ctx = context || this;\n var keys = !isArrayLike(obj) && _.keys(obj);\n var length = (keys || obj).length;\n var result = [];\n for (var i = 0; i < length; i++) {\n var k = keys ? keys[i] : i;\n result[i] = iteratee.call(ctx, obj[k], k, obj);\n }\n return result;\n },\n once: function(func) {\n var init = false;\n return function() {\n if (!!init) {\n return func;\n }\n init = true;\n return func.apply(this, arguments);\n }\n },\n after: function(times, func) {\n return function() {\n while (--times < 1) {\n return func.apply(this, arguments);\n }\n }\n },\n uniqueId: function(prefix) {\n var id = ++_._indexAmount + '';\n return prefix ? prefix + id : id;\n }\n };\n\n // Constants\n\n var sin = Math.sin,\n cos = Math.cos,\n acos = Math.acos,\n atan2 = Math.atan2,\n sqrt = Math.sqrt,\n round = Math.round,\n abs = Math.abs,\n PI = Math.PI,\n TWO_PI = PI * 2,\n HALF_PI = PI / 2,\n pow = Math.pow,\n min = Math.min,\n max = Math.max;\n\n // Localized variables\n\n var count = 0;\n var slice = _.natural.slice;\n var perf = ((root.performance && root.performance.now) ? root.performance : Date);\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = function(obj) {\n return obj == null ? void 0 : obj['length'];\n };\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Cross browser dom events.\n\n var dom = {\n\n temp: (root.document ? root.document.createElement('div') : {}),\n\n hasEventListeners: _.isFunction(root.addEventListener),\n\n bind: function(elem, event, func, bool) {\n if (this.hasEventListeners) {\n elem.addEventListener(event, func, !!bool);\n } else {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n\n unbind: function(elem, event, func, bool) {\n if (dom.hasEventListeners) {\n elem.removeEventListeners(event, func, !!bool);\n } else {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n\n getRequestAnimationFrame: function() {\n\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n var request = root.requestAnimationFrame, cancel;\n\n if(!request) {\n for (var i = 0; i < vendors.length; i++) {\n request = root[vendors[i] + 'RequestAnimationFrame'] || request;\n cancel = root[vendors[i] + 'CancelAnimationFrame']\n || root[vendors[i] + 'CancelRequestAnimationFrame'] || cancel;\n }\n\n request = request || function(callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = root.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n // cancel = cancel || function(id) {\n // clearTimeout(id);\n // };\n }\n\n request.init = _.once(loop);\n\n return request;\n\n }\n\n };\n\n /**\n * @name Two\n * @class\n * @global\n * @param {Object} [options]\n * @param {Boolean} [options.fullscreen=false] - Set to `true` to automatically make the stage adapt to the width and height of the parent document. This parameter overrides `width` and `height` parameters if set to `true`.\n * @param {Number} [options.width=640] - The width of the stage on construction. This can be set at a later time.\n * @param {Number} [options.height=480] - The height of the stage on construction. This can be set at a later time.\n * @param {String} [options.type=Two.Types.svg] - The type of renderer to setup drawing with. See [`Two.Types`]{@link Two.Types} for available options.\n * @param {Boolean} [options.autostart=false] - Set to `true` to add the instance to draw on `requestAnimationFrame`. This is a convenient substitute for {@link Two#play}.\n * @description The entrypoint for Two.js. Instantiate a `new Two` in order to setup a scene to render to. `Two` is also the publicly accessible namespace that all other sub-classes, functions, and utilities attach to.\n */\n var Two = root.Two = function(options) {\n\n // Determine what Renderer to use and setup a scene.\n\n var params = _.defaults(options || {}, {\n fullscreen: false,\n width: 640,\n height: 480,\n type: Two.Types.svg,\n autostart: false\n });\n\n _.each(params, function(v, k) {\n if (/fullscreen/i.test(k) || /autostart/i.test(k)) {\n return;\n }\n this[k] = v;\n }, this);\n\n // Specified domElement overrides type declaration only if the element does not support declared renderer type.\n if (_.isElement(params.domElement)) {\n var tagName = params.domElement.tagName.toLowerCase();\n // TODO: Reconsider this if statement's logic.\n if (!/^(CanvasRenderer-canvas|WebGLRenderer-canvas|SVGRenderer-svg)$/.test(this.type+'-'+tagName)) {\n this.type = Two.Types[tagName];\n }\n }\n\n this.renderer = new Two[this.type](this);\n Two.Utils.setPlaying.call(this, params.autostart);\n this.frameCount = 0;\n\n if (params.fullscreen) {\n\n var fitted = _.bind(fitToWindow, this);\n _.extend(document.body.style, {\n overflow: 'hidden',\n margin: 0,\n padding: 0,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n position: 'fixed'\n });\n _.extend(this.renderer.domElement.style, {\n display: 'block',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n position: 'fixed'\n });\n dom.bind(root, 'resize', fitted);\n fitted();\n\n\n } else if (!_.isElement(params.domElement)) {\n\n this.renderer.setSize(params.width, params.height, this.ratio);\n this.width = params.width;\n this.height = params.height;\n\n }\n\n this.renderer.bind(Two.Events.resize, _.bind(updateDimensions, this));\n this.scene = this.renderer.scene;\n\n Two.Instances.push(this);\n if (params.autostart) {\n raf.init();\n }\n\n };\n\n _.extend(Two, {\n\n // Access to root in other files.\n\n /**\n * @name Two.root\n * @description The root of the session context. In the browser this is the `window` variable. This varies in headless environments.\n */\n root: root,\n\n /**\n * @name Two.nextFrameID\n * @property {Integer}\n * @description The id of the next requestAnimationFrame function.\n */\n nextFrameID: null,\n\n // Primitive\n\n /**\n * @name Two.Array\n * @description A simple polyfill for Float32Array.\n */\n Array: root.Float32Array || Array,\n\n /**\n * @name Two.Types\n * @property {Object} - The different rendering types availabe in the library.\n */\n Types: {\n webgl: 'WebGLRenderer',\n svg: 'SVGRenderer',\n canvas: 'CanvasRenderer'\n },\n\n /**\n * @name Two.Version\n * @property {String} - The current working version of the library.\n */\n Version: 'v0.7.0-beta.3',\n\n /**\n * @name Two.PublishDate\n * @property {String} - The automatically generated publish date in the build process to verify version release candidates.\n */\n PublishDate: '2018-12-08T22:41:43+01:00',\n\n /**\n * @name Two.Identifier\n * @property {String} - String prefix for all Two.js object's ids. This trickles down to SVG ids.\n */\n Identifier: 'two-',\n\n /**\n * @name Two.Events\n * @property {Object} - Map of possible events in Two.js.\n */\n Events: {\n play: 'play',\n pause: 'pause',\n update: 'update',\n render: 'render',\n resize: 'resize',\n change: 'change',\n remove: 'remove',\n insert: 'insert',\n order: 'order',\n load: 'load'\n },\n\n /**\n * @name Two.Commands\n * @property {Object} - Map of possible path commands. Taken from the SVG specification.\n */\n Commands: {\n move: 'M',\n line: 'L',\n curve: 'C',\n arc: 'A',\n close: 'Z'\n },\n\n /**\n * @name Two.Resolution\n * @property {Number} - Default amount of vertices to be used for interpreting Arcs and ArcSegments.\n */\n Resolution: 12,\n\n /**\n * @name Two.Instances\n * @property {Array} - Registered list of all Two.js instances in the current session.\n */\n Instances: [],\n\n /**\n * @function Two.noConflict\n * @description A function to revert the global namespaced `Two` variable to its previous incarnation.\n * @returns {Two} Returns access to the top-level Two.js library for local use.\n */\n noConflict: function() {\n root.Two = previousTwo;\n return Two;\n },\n\n /**\n * @function Two.uniqueId\n * @description Simple method to access an incrementing value. Used for `id` allocation on all Two.js objects.\n * @returns {Number} Ever increasing integer.\n */\n uniqueId: function() {\n var id = count;\n count++;\n return id;\n },\n\n /**\n * @name Two.Utils\n * @interface\n * @implements {_}\n * @description A hodgepodge of handy functions, math, and properties are stored here.\n */\n Utils: _.extend(_, {\n\n /**\n * @name Two.Utils.performance\n * @property {Date} - A special `Date` like object to get the current millis of the session. Used internally to calculate time between frames.\n * e.g: `Two.Utils.performance.now() // milliseconds since epoch`\n */\n performance: perf,\n\n /**\n * @name Two.Utils.defineProperty\n * @function\n * @this Two#\n * @param {String} property - The property to add an enumerable getter / setter to.\n * @description Convenience function to setup the flag based getter / setter that most properties are defined as in Two.js.\n */\n defineProperty: function(property) {\n\n var object = this;\n var secret = '_' + property;\n var flag = '_flag' + property.charAt(0).toUpperCase() + property.slice(1);\n\n Object.defineProperty(object, property, {\n enumerable: true,\n get: function() {\n return this[secret];\n },\n set: function(v) {\n this[secret] = v;\n this[flag] = true;\n }\n });\n\n },\n\n Image: null,\n\n isHeadless: false,\n\n /**\n * @name Two.Utils.shim\n * @function\n * @param {canvas} canvas - The instanced `Canvas` object provided by `node-canvas`.\n * @param {Image} [Image] - The prototypical `Image` object provided by `node-canvas`. This is only necessary to pass if you're going to load bitmap imagery.\n * @returns {canvas} Returns the instanced canvas object you passed from with additional attributes needed for Two.js.\n * @description Convenience method for defining all the dependencies from the npm package `node-canvas`. See [node-canvas]{@link https://github.com/Automattic/node-canvas} for additional information on setting up HTML5 `` drawing in a node.js environment.\n */\n shim: function(canvas, Image) {\n Two.CanvasRenderer.Utils.shim(canvas);\n if (!_.isUndefined(Image)) {\n Two.Utils.Image = Image;\n }\n Two.Utils.isHeadless = true;\n return canvas;\n },\n\n /**\n * @name Two.Utils.release\n * @function\n * @param {Object} obj\n * @returns {Object} The object passed for event deallocation.\n * @description Release an arbitrary class' events from the Two.js corpus and recurse through its children and or vertices.\n */\n release: function(obj) {\n\n if (!_.isObject(obj)) {\n return;\n }\n\n if (_.isFunction(obj.unbind)) {\n obj.unbind();\n }\n\n if (obj.vertices) {\n if (_.isFunction(obj.vertices.unbind)) {\n obj.vertices.unbind();\n }\n _.each(obj.vertices, function(v) {\n if (_.isFunction(v.unbind)) {\n v.unbind();\n }\n });\n }\n\n if (obj.children) {\n _.each(obj.children, function(obj) {\n Two.Utils.release(obj);\n });\n }\n\n return obj;\n\n },\n\n /**\n * @name Two.Utils.xhr\n * @function\n * @param {String} path\n * @param {Function} callback\n * @returns {XMLHttpRequest} The constructed and called XHR request.\n * @description Canonical method to initiate `GET` requests in the browser. Mainly used by {@link Two#load} method.\n */\n xhr: function(path, callback) {\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path);\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4 && xhr.status === 200) {\n callback(xhr.responseText);\n }\n };\n\n xhr.send();\n return xhr;\n\n },\n\n /**\n * @name Two.Utils.Curve\n * @property {Object} - Additional utility constant variables related to curve math and calculations.\n */\n Curve: {\n\n CollinearityEpsilon: pow(10, -30),\n\n RecursionLimit: 16,\n\n CuspLimit: 0,\n\n Tolerance: {\n distance: 0.25,\n angle: 0,\n epsilon: Number.EPSILON\n },\n\n // Lookup tables for abscissas and weights with values for n = 2 .. 16.\n // As values are symmetric, only store half of them and adapt algorithm\n // to factor in symmetry.\n abscissas: [\n [ 0.5773502691896257645091488],\n [0,0.7745966692414833770358531],\n [ 0.3399810435848562648026658,0.8611363115940525752239465],\n [0,0.5384693101056830910363144,0.9061798459386639927976269],\n [ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n [0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n [ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n [0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n [ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n [0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n [ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n [0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n [ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n [0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n [ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n ],\n\n weights: [\n [1],\n [0.8888888888888888888888889,0.5555555555555555555555556],\n [0.6521451548625461426269361,0.3478548451374538573730639],\n [0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n [0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n [0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n [0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n [0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n [0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n [0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n [0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n [0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n [0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n [0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n [0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n ]\n\n },\n\n devicePixelRatio: root.devicePixelRatio || 1,\n\n getBackingStoreRatio: function(ctx) {\n return ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n },\n\n /**\n * @name Two.Utils.getRatio\n * @function\n * @param {Canvas.context2D} ctx\n * @returns {Number} The ratio of a unit in Two.js to the pixel density of a session's screen.\n * @see [High DPI Rendering]{@link http://www.html5rocks.com/en/tutorials/canvas/hidpi/}\n */\n getRatio: function(ctx) {\n return Two.Utils.devicePixelRatio / getBackingStoreRatio(ctx);\n },\n\n /**\n * @name Two.Utils.setPlaying\n * @function\n * @this Two#\n * @returns {Two} The instance called with for potential chaining.\n * @description Internal convenience method to properly defer play calling until after all objects have been updated with their newest styles.\n */\n setPlaying: function(b) {\n\n this.playing = !!b;\n return this;\n\n },\n\n /**\n * @name Two.Utils.getComputedMatrix\n * @function\n * @param {Two.Shape} object - The Two.js object that has a matrix property to calculate from.\n * @param {Two.Matrix} [matrix] - The matrix to apply calculated transformations to if available.\n * @returns {Two.Matrix} The computed matrix of a nested object. If no `matrix` was passed in arguments then a `new Two.Matrix` is returned.\n * @description Method to get the world space transformation of a given object in a Two.js scene.\n */\n getComputedMatrix: function(object, matrix) {\n\n matrix = (matrix && matrix.identity()) || new Two.Matrix();\n var parent = object, matrices = [];\n\n while (parent && parent._matrix) {\n matrices.push(parent._matrix);\n parent = parent.parent;\n }\n\n matrices.reverse();\n\n for (var i = 0; i < matrices.length; i++) {\n\n var m = matrices[i];\n var e = m.elements;\n matrix.multiply(\n e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9]);\n\n }\n\n return matrix;\n\n },\n\n /**\n * @name Two.Utils.deltaTransformPoint\n * @function\n * @param {Two.Matrix} matrix\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector}\n * @description Used by {@link Two.Utils.decomposeMatrix}\n */\n deltaTransformPoint: function(matrix, x, y) {\n\n var dx = x * matrix.a + y * matrix.c + 0;\n var dy = x * matrix.b + y * matrix.d + 0;\n\n return new Two.Vector(dx, dy);\n\n },\n\n /**\n * @name Two.Utils.decomposeMatrix\n * @function\n * @param {Two.Matrix} matrix - The matrix to decompose.\n * @returns {Object} An object containing relevant skew values.\n * @description Decompose a 2D 3x3 Matrix to find the skew.\n * @see {@link https://gist.github.com/2052247}\n */\n decomposeMatrix: function(matrix) {\n\n // calculate delta transform point\n var px = Two.Utils.deltaTransformPoint(matrix, 0, 1);\n var py = Two.Utils.deltaTransformPoint(matrix, 1, 0);\n\n // calculate skew\n var skewX = ((180 / Math.PI) * Math.atan2(px.y, px.x) - 90);\n var skewY = ((180 / Math.PI) * Math.atan2(py.y, py.x));\n\n return {\n translateX: matrix.e,\n translateY: matrix.f,\n scaleX: Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b),\n scaleY: Math.sqrt(matrix.c * matrix.c + matrix.d * matrix.d),\n skewX: skewX,\n skewY: skewY,\n rotation: skewX // rotation is the same as skew x\n };\n\n },\n\n /**\n * @name Two.Utils.extractCSSText\n * @function\n * @param {String} text - The CSS text body to be parsed and extracted.\n * @param {Object} [styles] - The styles object to apply CSS key values to.\n * @returns {Object} styles\n * @description Parse CSS text body and apply them as key value pairs to a JavaScript object.\n */\n extractCSSText: function(text, styles) {\n\n var commands, command, name, value;\n\n if (!styles) {\n styles = {};\n }\n\n commands = text.split(';');\n\n for (var i = 0; i < commands.length; i++) {\n command = commands[i].split(':');\n name = command[0];\n value = command[1];\n if (_.isUndefined(name) || _.isUndefined(value)) {\n continue;\n }\n styles[name] = value.replace(/\\s/, '');\n }\n\n return styles;\n\n },\n\n /**\n * @name Two.Utils.getSvgStyles\n * @function\n * @param {SvgNode} node - The SVG node to parse.\n * @returns {Object} styles\n * @description Get the CSS comands from the `style` attribute of an SVG node and apply them as key value pairs to a JavaScript object.\n */\n getSvgStyles: function(node) {\n\n var styles = {};\n\n for (var i = 0; i < node.style.length; i++) {\n var command = node.style[i];\n styles[command] = node.style[command];\n }\n\n return styles;\n\n },\n\n /**\n * @name Two.Utils.applySvgViewBox\n * @function\n * @param {Two.Shape} node - The Two.js object to apply viewbox matrix to\n * @param {String} value - The viewBox value from the SVG attribute\n * @returns {Two.Shape} node\n @ @description\n */\n applySvgViewBox: function(node, value) {\n\n var elements = value.split(/\\s/);\n\n var x = parseFloat(elements[0]);\n var y = parseFloat(elements[1]);\n var width = parseFloat(elements[2]);\n var height = parseFloat(elements[3]);\n\n var s = Math.min(this.width / width, this.height / height);\n\n node.translation.x -= x * s;\n node.translation.y -= y * s;\n node.scale = s;\n\n return node;\n\n },\n\n /**\n * @name Two.Utils.applySvgAttributes\n * @function\n * @param {SvgNode} node - An SVG Node to extrapolate attributes from.\n * @param {Two.Shape} elem - The Two.js object to apply extrapolated attributes to.\n * @returns {Two.Shape} The Two.js object passed now with applied attributes.\n * @description This function iterates through an SVG Node's properties and stores ones of interest. It tries to resolve styles applied via CSS as well.\n * @TODO Reverse calculate `Two.Gradient`s for fill / stroke of any given path.\n */\n applySvgAttributes: function(node, elem, parentStyles) {\n\n var styles = {}, attributes = {}, extracted = {}, i, key, value, attr;\n\n // Not available in non browser environments\n if (root.getComputedStyle) {\n // Convert CSSStyleDeclaration to a normal object\n var computedStyles = root.getComputedStyle(node);\n i = computedStyles.length;\n\n while (i--) {\n key = computedStyles[i];\n value = computedStyles[key];\n // Gecko returns undefined for unset properties\n // Webkit returns the default value\n if (!_.isUndefined(value)) {\n styles[key] = value;\n }\n }\n }\n\n // Convert NodeMap to a normal object\n for (i = 0; i < node.attributes.length; i++) {\n attr = node.attributes[i];\n if (/style/i.test(attr.nodeName)) {\n Two.Utils.extractCSSText(attr.value, extracted);\n } else {\n attributes[attr.nodeName] = attr.value;\n }\n }\n\n // Getting the correct opacity is a bit tricky, since SVG path elements don't\n // support opacity as an attribute, but you can apply it via CSS.\n // So we take the opacity and set (stroke/fill)-opacity to the same value.\n if (!_.isUndefined(styles.opacity)) {\n styles['stroke-opacity'] = styles.opacity;\n styles['fill-opacity'] = styles.opacity;\n delete styles.opacity;\n }\n\n // Merge attributes and applied styles (attributes take precedence)\n if (parentStyles) {\n _.defaults(styles, parentStyles);\n }\n _.extend(styles, attributes, extracted);\n\n // Similarly visibility is influenced by the value of both display and visibility.\n // Calculate a unified value here which defaults to `true`.\n styles.visible = !(_.isUndefined(styles.display) && /none/i.test(styles.display))\n || (_.isUndefined(styles.visibility) && /hidden/i.test(styles.visibility));\n\n // Now iterate the whole thing\n for (key in styles) {\n value = styles[key];\n\n switch (key) {\n case 'transform':\n // TODO: Check this out https://github.com/paperjs/paper.js/blob/develop/src/svg/SvgImport.js#L315\n if (/none/i.test(value)) break;\n var m = (node.transform && node.transform.baseVal && node.transform.baseVal.length > 0)\n ? node.transform.baseVal[0].matrix\n : (node.getCTM ? node.getCTM() : null);\n\n // Might happen when transform string is empty or not valid.\n if (_.isNull(m)) break;\n\n // // Option 1: edit the underlying matrix and don't force an auto calc.\n // var m = node.getCTM();\n // elem._matrix.manual = true;\n // elem._matrix.set(m.a, m.b, m.c, m.d, m.e, m.f);\n\n // Option 2: Decompose and infer Two.js related properties.\n var transforms = Two.Utils.decomposeMatrix(m);\n\n elem.translation.set(transforms.translateX, transforms.translateY);\n elem.rotation = transforms.rotation;\n elem.scale = new Two.Vector(transforms.scaleX, transforms.scaleY);\n\n var x = parseFloat((styles.x + '').replace('px'));\n var y = parseFloat((styles.y + '').replace('px'));\n\n // Override based on attributes.\n if (x) {\n elem.translation.x = x;\n }\n\n if (y) {\n elem.translation.y = y;\n }\n\n break;\n case 'viewBox':\n Two.Utils.applySvgViewBox.call(this, elem, value);\n break;\n case 'visible':\n elem.visible = value;\n break;\n case 'stroke-linecap':\n elem.cap = value;\n break;\n case 'stroke-linejoin':\n elem.join = value;\n break;\n case 'stroke-miterlimit':\n elem.miter = value;\n break;\n case 'stroke-width':\n elem.linewidth = parseFloat(value);\n break;\n case 'opacity':\n case 'stroke-opacity':\n case 'fill-opacity':\n // Only apply styles to rendered shapes\n // in the scene.\n if (!(elem instanceof Two.Group)) {\n elem.opacity = parseFloat(value);\n }\n break;\n case 'fill':\n case 'stroke':\n if (/url\\(\\#.*\\)/i.test(value)) {\n elem[key] = this.getById(\n value.replace(/url\\(\\#(.*)\\)/i, '$1'));\n } else {\n elem[key] = (/none/i.test(value)) ? 'transparent' : value;\n }\n break;\n case 'id':\n elem.id = value;\n break;\n case 'class':\n case 'className':\n elem.classList = value.split(' ');\n break;\n }\n }\n\n return styles;\n\n },\n\n /**\n * @name Two.Utils.read\n * @property {Object} read - A map of functions to read any number of SVG node types and create Two.js equivalents of them. Primarily used by the {@link Two#interpret} method.\n */\n read: {\n\n svg: function(node) {\n\n var svg = Two.Utils.read.g.call(this, node);\n var viewBox = node.getAttribute('viewBox');\n // Two.Utils.applySvgViewBox(svg, viewBox);\n\n return svg;\n\n },\n\n g: function(node) {\n\n var styles, attrs;\n var group = new Two.Group();\n\n // Switched up order to inherit more specific styles\n styles = Two.Utils.getSvgStyles.call(this, node);\n\n for (var i = 0, l = node.childNodes.length; i < l; i++) {\n var n = node.childNodes[i];\n var tag = n.nodeName;\n if (!tag) return;\n\n var tagName = tag.replace(/svg\\:/ig, '').toLowerCase();\n\n if (tagName in Two.Utils.read) {\n var o = Two.Utils.read[tagName].call(group, n, styles);\n group.add(o);\n }\n }\n\n return group;\n\n },\n\n polygon: function(node, parentStyles) {\n\n var points = node.getAttribute('points');\n\n var verts = [];\n points.replace(/(-?[\\d\\.?]+)[,|\\s](-?[\\d\\.?]+)/g, function(match, p1, p2) {\n verts.push(new Two.Anchor(parseFloat(p1), parseFloat(p2)));\n });\n\n var poly = new Two.Path(verts, true).noStroke();\n poly.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, poly, parentStyles);\n\n return poly;\n\n },\n\n polyline: function(node, parentStyles) {\n var poly = Two.Utils.read.polygon.call(this, node, parentStyles);\n poly.closed = false;\n return poly;\n },\n\n path: function(node, parentStyles) {\n\n var path = node.getAttribute('d');\n\n // Create a Two.Path from the paths.\n\n var coord = new Two.Anchor();\n var control, coords;\n var closed = false, relative = false;\n var commands = path.match(/[a-df-z][^a-df-z]*/ig);\n var last = commands.length - 1;\n\n // Split up polybeziers\n\n _.each(commands.slice(0), function(command, i) {\n\n var number, fid, lid, numbers, first, s;\n var j, k, ct, l, times;\n\n var type = command[0];\n var lower = type.toLowerCase();\n var items = command.slice(1).trim().split(/[\\s,]+|(?=\\s?[+\\-])/);\n var pre, post, result = [], bin;\n var hasDoubleDecimals = false;\n\n // Handle double decimal values e.g: 48.6037.71.8\n // Like: https://m.abcsofchinese.com/images/svg/亼ji2.svg\n for (j = 0; j < items.length; j++) {\n\n number = items[j];\n fid = number.indexOf('.');\n lid = number.lastIndexOf('.');\n\n if (fid !== lid) {\n\n numbers = number.split('.');\n first = numbers[0] + '.' + numbers[1];\n\n items.splice(j, 1, first);\n\n for (s = 2; s < numbers.length; s++) {\n items.splice(j + s - 1, 0, '0.' + numbers[s]);\n }\n\n hasDoubleDecimals = true;\n\n }\n\n }\n\n if (hasDoubleDecimals) {\n command = type + items.join(',');\n }\n\n if (i <= 0) {\n commands = [];\n }\n\n switch (lower) {\n case 'h':\n case 'v':\n if (items.length > 1) {\n bin = 1;\n }\n break;\n case 'm':\n case 'l':\n case 't':\n if (items.length > 2) {\n bin = 2;\n }\n break;\n case 's':\n case 'q':\n if (items.length > 4) {\n bin = 4;\n }\n break;\n case 'c':\n if (items.length > 6) {\n bin = 6;\n }\n break;\n case 'a':\n if (items.length > 7) {\n bin = 7;\n }\n break;\n }\n\n // This means we have a polybezier.\n if (bin) {\n\n for (j = 0, l = items.length, times = 0; j < l; j+=bin) {\n\n ct = type;\n if (times > 0) {\n\n switch (type) {\n case 'm':\n ct = 'l';\n break;\n case 'M':\n ct = 'L';\n break;\n }\n\n }\n\n result.push(ct + items.slice(j, j + bin).join(' '));\n times++;\n\n }\n\n commands = Array.prototype.concat.apply(commands, result);\n\n } else {\n\n commands.push(command);\n\n }\n\n });\n\n // Create the vertices for our Two.Path\n\n var points = [];\n _.each(commands, function(command, i) {\n\n var result, x, y;\n var type = command[0];\n var lower = type.toLowerCase();\n\n coords = command.slice(1).trim();\n coords = coords.replace(/(-?\\d+(?:\\.\\d*)?)[eE]([+\\-]?\\d+)/g, function(match, n1, n2) {\n return parseFloat(n1) * pow(10, n2);\n });\n coords = coords.split(/[\\s,]+|(?=\\s?[+\\-])/);\n relative = type === lower;\n\n var x1, y1, x2, y2, x3, y3, x4, y4, reflection;\n\n switch (lower) {\n\n case 'z':\n if (i >= last) {\n closed = true;\n } else {\n x = coord.x;\n y = coord.y;\n result = new Two.Anchor(\n x, y,\n undefined, undefined,\n undefined, undefined,\n Two.Commands.close\n );\n // Make coord be the last `m` command\n for (var i = points.length - 1; i >= 0; i--) {\n var point = points[i];\n if (/m/i.test(point.command)) {\n coord = point;\n break;\n }\n }\n }\n break;\n\n case 'm':\n case 'l':\n\n control = undefined;\n\n x = parseFloat(coords[0]);\n y = parseFloat(coords[1]);\n\n result = new Two.Anchor(\n x, y,\n undefined, undefined,\n undefined, undefined,\n /m/i.test(lower) ? Two.Commands.move : Two.Commands.line\n );\n\n if (relative) {\n result.addSelf(coord);\n }\n\n // result.controls.left.copy(result);\n // result.controls.right.copy(result);\n\n coord = result;\n break;\n\n case 'h':\n case 'v':\n\n var a = /h/i.test(lower) ? 'x' : 'y';\n var b = /x/i.test(a) ? 'y' : 'x';\n\n result = new Two.Anchor(\n undefined, undefined,\n undefined, undefined,\n undefined, undefined,\n Two.Commands.line\n );\n result[a] = parseFloat(coords[0]);\n result[b] = coord[b];\n\n if (relative) {\n result[a] += coord[a];\n }\n\n // result.controls.left.copy(result);\n // result.controls.right.copy(result);\n\n coord = result;\n break;\n\n case 'c':\n case 's':\n\n x1 = coord.x;\n y1 = coord.y;\n\n if (!control) {\n control = new Two.Vector();//.copy(coord);\n }\n\n if (/c/i.test(lower)) {\n\n x2 = parseFloat(coords[0]);\n y2 = parseFloat(coords[1]);\n x3 = parseFloat(coords[2]);\n y3 = parseFloat(coords[3]);\n x4 = parseFloat(coords[4]);\n y4 = parseFloat(coords[5]);\n\n } else {\n\n // Calculate reflection control point for proper x2, y2\n // inclusion.\n\n reflection = getReflection(coord, control, relative);\n\n x2 = reflection.x;\n y2 = reflection.y;\n x3 = parseFloat(coords[0]);\n y3 = parseFloat(coords[1]);\n x4 = parseFloat(coords[2]);\n y4 = parseFloat(coords[3]);\n\n }\n\n if (relative) {\n x2 += x1;\n y2 += y1;\n x3 += x1;\n y3 += y1;\n x4 += x1;\n y4 += y1;\n }\n\n if (!_.isObject(coord.controls)) {\n Two.Anchor.AppendCurveProperties(coord);\n }\n\n coord.controls.right.set(x2 - coord.x, y2 - coord.y);\n result = new Two.Anchor(\n x4, y4,\n x3 - x4, y3 - y4,\n undefined, undefined,\n Two.Commands.curve\n );\n\n coord = result;\n control = result.controls.left;\n\n break;\n\n case 't':\n case 'q':\n\n x1 = coord.x;\n y1 = coord.y;\n\n if (!control) {\n control = new Two.Vector();//.copy(coord);\n }\n\n if (control.isZero()) {\n x2 = x1;\n y2 = y1;\n } else {\n x2 = control.x;\n y2 = control.y;\n }\n\n if (/q/i.test(lower)) {\n\n x3 = parseFloat(coords[0]);\n y3 = parseFloat(coords[1]);\n x4 = parseFloat(coords[2]);\n y4 = parseFloat(coords[3]);\n\n } else {\n\n reflection = getReflection(coord, control, relative);\n\n x3 = reflection.x;\n y3 = reflection.y;\n x4 = parseFloat(coords[0]);\n y4 = parseFloat(coords[1]);\n\n }\n\n if (relative) {\n x2 += x1;\n y2 += y1;\n x3 += x1;\n y3 += y1;\n x4 += x1;\n y4 += y1;\n }\n\n if (!_.isObject(coord.controls)) {\n Two.Anchor.AppendCurveProperties(coord);\n }\n\n coord.controls.right.set(x2 - coord.x, y2 - coord.y);\n result = new Two.Anchor(\n x4, y4,\n x3 - x4, y3 - y4,\n undefined, undefined,\n Two.Commands.curve\n );\n\n coord = result;\n control = result.controls.left;\n\n break;\n\n case 'a':\n\n x1 = coord.x;\n y1 = coord.y;\n\n var rx = parseFloat(coords[0]);\n var ry = parseFloat(coords[1]);\n var xAxisRotation = parseFloat(coords[2]);// * PI / 180;\n var largeArcFlag = parseFloat(coords[3]);\n var sweepFlag = parseFloat(coords[4]);\n\n x4 = parseFloat(coords[5]);\n y4 = parseFloat(coords[6]);\n\n if (relative) {\n x4 += x1;\n y4 += y1;\n }\n\n var anchor = new Two.Anchor(x4, y4);\n anchor.command = Two.Commands.arc;\n anchor.rx = rx;\n anchor.ry = ry;\n anchor.xAxisRotation = xAxisRotation;\n anchor.largeArcFlag = largeArcFlag;\n anchor.sweepFlag = sweepFlag;\n\n result = anchor;\n\n coord = anchor;\n control = undefined;\n\n break;\n\n }\n\n if (result) {\n if (_.isArray(result)) {\n points = points.concat(result);\n } else {\n points.push(result);\n }\n }\n\n });\n\n if (points.length <= 1) {\n return;\n }\n\n var path = new Two.Path(points, closed, undefined, true).noStroke();\n path.fill = 'black';\n\n var rect = path.getBoundingClientRect(true);\n\n // Center objects to stay consistent\n // with the rest of the Two.js API.\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n _.each(path.vertices, function(v) {\n v.subSelf(rect.centroid);\n });\n\n path.translation.addSelf(rect.centroid);\n\n Two.Utils.applySvgAttributes.call(this, node, path, parentStyles);\n\n return path;\n\n },\n\n circle: function(node, parentStyles) {\n\n var x = parseFloat(node.getAttribute('cx'));\n var y = parseFloat(node.getAttribute('cy'));\n var r = parseFloat(node.getAttribute('r'));\n\n var circle = new Two.Circle(x, y, r).noStroke();\n circle.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, circle, parentStyles);\n\n return circle;\n\n },\n\n ellipse: function(node, parentStyles) {\n\n var x = parseFloat(node.getAttribute('cx'));\n var y = parseFloat(node.getAttribute('cy'));\n var width = parseFloat(node.getAttribute('rx'));\n var height = parseFloat(node.getAttribute('ry'));\n\n var ellipse = new Two.Ellipse(x, y, width, height).noStroke();\n ellipse.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, ellipse, parentStyles);\n\n return ellipse;\n\n },\n\n rect: function(node, parentStyles) {\n\n var rx = parseFloat(node.getAttribute('rx'));\n var ry = parseFloat(node.getAttribute('ry'));\n\n if (!_.isNaN(rx) || !_.isNaN(ry)) {\n return Two.Utils.read['rounded-rect'](node);\n }\n\n var x = parseFloat(node.getAttribute('x')) || 0;\n var y = parseFloat(node.getAttribute('y')) || 0;\n var width = parseFloat(node.getAttribute('width'));\n var height = parseFloat(node.getAttribute('height'));\n\n var w2 = width / 2;\n var h2 = height / 2;\n\n var rect = new Two.Rectangle(x + w2, y + h2, width, height)\n .noStroke();\n rect.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, rect, parentStyles);\n\n return rect;\n\n },\n\n 'rounded-rect': function(node, parentStyles) {\n\n var x = parseFloat(node.getAttribute('x')) || 0;\n var y = parseFloat(node.getAttribute('y')) || 0;\n var rx = parseFloat(node.getAttribute('rx')) || 0;\n var ry = parseFloat(node.getAttribute('ry')) || 0;\n\n var width = parseFloat(node.getAttribute('width'));\n var height = parseFloat(node.getAttribute('height'));\n\n var w2 = width / 2;\n var h2 = height / 2;\n var radius = new Two.Vector(rx, ry);\n\n var rect = new Two.RoundedRectangle(x + w2, y + h2, width, height, radius)\n .noStroke();\n rect.fill = 'black';\n\n Two.Utils.applySvgAttributes.call(this, node, rect, parentStyles);\n\n return rect;\n\n },\n\n line: function(node, parentStyles) {\n\n var x1 = parseFloat(node.getAttribute('x1'));\n var y1 = parseFloat(node.getAttribute('y1'));\n var x2 = parseFloat(node.getAttribute('x2'));\n var y2 = parseFloat(node.getAttribute('y2'));\n\n var line = new Two.Line(x1, y1, x2, y2).noFill();\n\n Two.Utils.applySvgAttributes.call(this, node, line, parentStyles);\n\n return line;\n\n },\n\n lineargradient: function(node, parentStyles) {\n\n var x1 = parseFloat(node.getAttribute('x1'));\n var y1 = parseFloat(node.getAttribute('y1'));\n var x2 = parseFloat(node.getAttribute('x2'));\n var y2 = parseFloat(node.getAttribute('y2'));\n\n var ox = (x2 + x1) / 2;\n var oy = (y2 + y1) / 2;\n\n var stops = [];\n for (var i = 0; i < node.children.length; i++) {\n\n var child = node.children[i];\n\n var offset = parseFloat(child.getAttribute('offset'));\n var color = child.getAttribute('stop-color');\n var opacity = child.getAttribute('stop-opacity');\n var style = child.getAttribute('style');\n\n if (_.isNull(color)) {\n var matches = style ? style.match(/stop\\-color\\:\\s?([\\#a-fA-F0-9]*)/) : false;\n color = matches && matches.length > 1 ? matches[1] : undefined;\n }\n\n if (_.isNull(opacity)) {\n var matches = style ? style.match(/stop\\-opacity\\:\\s?([0-9\\.\\-]*)/) : false;\n opacity = matches && matches.length > 1 ? parseFloat(matches[1]) : 1;\n }\n\n stops.push(new Two.Gradient.Stop(offset, color, opacity));\n\n }\n\n var gradient = new Two.LinearGradient(x1 - ox, y1 - oy, x2 - ox,\n y2 - oy, stops);\n\n Two.Utils.applySvgAttributes.call(this, node, gradient, parentStyles);\n\n return gradient;\n\n },\n\n radialgradient: function(node, parentStyles) {\n\n var cx = parseFloat(node.getAttribute('cx')) || 0;\n var cy = parseFloat(node.getAttribute('cy')) || 0;\n var r = parseFloat(node.getAttribute('r'));\n\n var fx = parseFloat(node.getAttribute('fx'));\n var fy = parseFloat(node.getAttribute('fy'));\n\n if (_.isNaN(fx)) {\n fx = cx;\n }\n\n if (_.isNaN(fy)) {\n fy = cy;\n }\n\n var ox = abs(cx + fx) / 2;\n var oy = abs(cy + fy) / 2;\n\n var stops = [];\n for (var i = 0; i < node.children.length; i++) {\n\n var child = node.children[i];\n\n var offset = parseFloat(child.getAttribute('offset'));\n var color = child.getAttribute('stop-color');\n var opacity = child.getAttribute('stop-opacity');\n var style = child.getAttribute('style');\n\n if (_.isNull(color)) {\n var matches = style ? style.match(/stop\\-color\\:\\s?([\\#a-fA-F0-9]*)/) : false;\n color = matches && matches.length > 1 ? matches[1] : undefined;\n }\n\n if (_.isNull(opacity)) {\n var matches = style ? style.match(/stop\\-opacity\\:\\s?([0-9\\.\\-]*)/) : false;\n opacity = matches && matches.length > 1 ? parseFloat(matches[1]) : 1;\n }\n\n stops.push(new Two.Gradient.Stop(offset, color, opacity));\n\n }\n\n var gradient = new Two.RadialGradient(cx - ox, cy - oy, r,\n stops, fx - ox, fy - oy);\n\n Two.Utils.applySvgAttributes.call(this, node, gradient, parentStyles);\n\n return gradient;\n\n }\n\n },\n\n /**\n * @name Two.Utils.subdivide\n * @function\n * @param {Number} x1 - x position of first anchor point.\n * @param {Number} y1 - y position of first anchor point.\n * @param {Number} x2 - x position of first anchor point's \"right\" bezier handle.\n * @param {Number} y2 - y position of first anchor point's \"right\" bezier handle.\n * @param {Number} x3 - x position of second anchor point's \"left\" bezier handle.\n * @param {Number} y3 - y position of second anchor point's \"left\" bezier handle.\n * @param {Number} x4 - x position of second anchor point.\n * @param {Number} y4 - y position of second anchor point.\n * @param {Number} [limit=Two.Utils.Curve.RecursionLimit] - The amount of vertices to create by subdividing.\n * @returns {Two.Anchor[]} A list of anchor points ordered in between `x1`, `y1` and `x4`, `y4`\n * @description Given 2 points (a, b) and corresponding control point for each return an array of points that represent points plotted along the curve. The number of returned points is determined by `limit`.\n */\n subdivide: function(x1, y1, x2, y2, x3, y3, x4, y4, limit) {\n\n limit = limit || Two.Utils.Curve.RecursionLimit;\n var amount = limit + 1;\n\n // TODO: Abstract 0.001 to a limiting variable\n // Don't recurse if the end points are identical\n if (abs(x1 - x4) < 0.001 && abs(y1 - y4) < 0.001) {\n return [new Two.Anchor(x4, y4)];\n }\n\n var result = [];\n\n for (var i = 0; i < amount; i++) {\n var t = i / amount;\n var x = getComponentOnCubicBezier(t, x1, x2, x3, x4);\n var y = getComponentOnCubicBezier(t, y1, y2, y3, y4);\n result.push(new Two.Anchor(x, y));\n }\n\n return result;\n\n },\n\n /**\n * @name Two.Utils.getComponentOnCubicBezier\n * @function\n * @param {Number} t - Zero-to-one value describing what percentage to calculate.\n * @param {Number} a - The firt point's component value.\n * @param {Number} b - The first point's bezier component value.\n * @param {Number} c - The second point's bezier component value.\n * @param {Number} d - The second point's component value.\n * @returns {Number} The coordinate value for a specific component along a cubic bezier curve by `t`.\n */\n getComponentOnCubicBezier: function(t, a, b, c, d) {\n var k = 1 - t;\n return (k * k * k * a) + (3 * k * k * t * b) + (3 * k * t * t * c) +\n (t * t * t * d);\n },\n\n /**\n * @name Two.Utils.getCurveLength\n * @function\n * @param {Number} x1 - x position of first anchor point.\n * @param {Number} y1 - y position of first anchor point.\n * @param {Number} x2 - x position of first anchor point's \"right\" bezier handle.\n * @param {Number} y2 - y position of first anchor point's \"right\" bezier handle.\n * @param {Number} x3 - x position of second anchor point's \"left\" bezier handle.\n * @param {Number} y3 - y position of second anchor point's \"left\" bezier handle.\n * @param {Number} x4 - x position of second anchor point.\n * @param {Number} y4 - y position of second anchor point.\n * @param {Number} [limit=Two.Utils.Curve.RecursionLimit] - The amount of vertices to create by subdividing.\n * @returns {Number} The length of a curve.\n * @description Given 2 points (a, b) and corresponding control point for each, return a float that represents the length of the curve using Gauss-Legendre algorithm. Limit iterations of calculation by `limit`.\n */\n getCurveLength: function(x1, y1, x2, y2, x3, y3, x4, y4, limit) {\n\n // TODO: Better / fuzzier equality check\n // Linear calculation\n if (x1 === x2 && y1 === y2 && x3 === x4 && y3 === y4) {\n var dx = x4 - x1;\n var dy = y4 - y1;\n return sqrt(dx * dx + dy * dy);\n }\n\n // Calculate the coefficients of a Bezier derivative.\n var ax = 9 * (x2 - x3) + 3 * (x4 - x1),\n bx = 6 * (x1 + x3) - 12 * x2,\n cx = 3 * (x2 - x1),\n\n ay = 9 * (y2 - y3) + 3 * (y4 - y1),\n by = 6 * (y1 + y3) - 12 * y2,\n cy = 3 * (y2 - y1);\n\n var integrand = function(t) {\n // Calculate quadratic equations of derivatives for x and y\n var dx = (ax * t + bx) * t + cx,\n dy = (ay * t + by) * t + cy;\n return sqrt(dx * dx + dy * dy);\n };\n\n return integrate(\n integrand, 0, 1, limit || Two.Utils.Curve.RecursionLimit\n );\n\n },\n\n /**\n * @name Two.Utils.getCurveBoundingBox\n * @function\n * @param {Number} x1 - x position of first anchor point.\n * @param {Number} y1 - y position of first anchor point.\n * @param {Number} x2 - x position of first anchor point's \"right\" bezier handle.\n * @param {Number} y2 - y position of first anchor point's \"right\" bezier handle.\n * @param {Number} x3 - x position of second anchor point's \"left\" bezier handle.\n * @param {Number} y3 - y position of second anchor point's \"left\" bezier handle.\n * @param {Number} x4 - x position of second anchor point.\n * @param {Number} y4 - y position of second anchor point.\n * @returns {Object} Object contains min and max `x` / `y` bounds.\n * @see {@link https://github.com/adobe-webplatform/Snap.svg/blob/master/src/path.js#L856}\n */\n getCurveBoundingBox: function(x1, y1, x2, y2, x3, y3, x4, y4) {\n\n var tvalues = [];\n var bounds = [[], []];\n var a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n for (var i = 0; i < 2; ++i) {\n if (i == 0) {\n b = 6 * x1 - 12 * x2 + 6 * x3;\n a = -3 * x1 + 9 * x2 - 9 * x3 + 3 * x4;\n c = 3 * x2 - 3 * x1;\n } else {\n b = 6 * y1 - 12 * y2 + 6 * y3;\n a = -3 * y1 + 9 * y2 - 9 * y3 + 3 * y4;\n c = 3 * y2 - 3 * y1;\n }\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length;\n var jlen = j;\n var mt;\n\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x1 + 3 * mt * mt * t * x2 + 3 * mt * t * t * x3 + t * t * t * x4;\n bounds[1][j] = mt * mt * mt * y1 + 3 * mt * mt * t * y2 + 3 * mt * t * t * y3 + t * t * t * y4;\n }\n\n bounds[0][jlen] = x1;\n bounds[1][jlen] = y1;\n bounds[0][jlen + 1] = x4;\n bounds[1][jlen + 1] = y4;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n return {\n min: { x: Math.min.apply(0, bounds[0]), y: Math.min.apply(0, bounds[1]) },\n max: { x: Math.max.apply(0, bounds[0]), y: Math.max.apply(0, bounds[1]) }\n };\n\n },\n\n /**\n * @name Two.Utils.integrate\n * @function\n * @param {Function} f\n * @param {Number} a\n * @param {Number} b\n * @param {Integer} n\n * @description Integration for `getCurveLength` calculations.\n * @see [Paper.js]{@link https://github.com/paperjs/paper.js/blob/master/src/util/Numerical.js#L101}\n */\n integrate: function(f, a, b, n) {\n var x = Two.Utils.Curve.abscissas[n - 2],\n w = Two.Utils.Curve.weights[n - 2],\n A = 0.5 * (b - a),\n B = A + a,\n i = 0,\n m = (n + 1) >> 1,\n sum = n & 1 ? w[i++] * f(B) : 0; // Handle odd n\n while (i < m) {\n var Ax = A * x[i];\n sum += w[i++] * (f(B + Ax) + f(B - Ax));\n }\n return A * sum;\n },\n\n /**\n * @name Two.Utils.getCurveFromPoints\n * @function\n * @param {Two.Anchor[]} points\n * @param {Boolean} closed\n * @description Sets the bezier handles on `Two.Anchor`s in the `points` list with estimated values to create a catmull-rom like curve. Used by {@link Two.Path#plot}.\n */\n getCurveFromPoints: function(points, closed) {\n\n var l = points.length, last = l - 1;\n\n for (var i = 0; i < l; i++) {\n\n var point = points[i];\n\n if (!_.isObject(point.controls)) {\n Two.Anchor.AppendCurveProperties(point);\n }\n\n var prev = closed ? mod(i - 1, l) : max(i - 1, 0);\n var next = closed ? mod(i + 1, l) : min(i + 1, last);\n\n var a = points[prev];\n var b = point;\n var c = points[next];\n getControlPoints(a, b, c);\n\n b.command = i === 0 ? Two.Commands.move : Two.Commands.curve;\n\n }\n\n },\n\n /**\n * @name Two.Utils.getControlPoints\n * @function\n * @param {Two.Anchor} a\n * @param {Two.Anchor} b\n * @param {Two.Anchor} c\n * @returns {Two.Anchor} Returns the passed middle point `b`.\n * @description Given three coordinates set the control points for the middle, b, vertex based on its position with the adjacent points.\n */\n getControlPoints: function(a, b, c) {\n\n var a1 = Two.Vector.angleBetween(a, b);\n var a2 = Two.Vector.angleBetween(c, b);\n\n var d1 = Two.Vector.distanceBetween(a, b);\n var d2 = Two.Vector.distanceBetween(c, b);\n\n var mid = (a1 + a2) / 2;\n\n // TODO: Issue 73\n if (d1 < 0.0001 || d2 < 0.0001) {\n if (_.isBoolean(b.relative) && !b.relative) {\n b.controls.left.copy(b);\n b.controls.right.copy(b);\n }\n return b;\n }\n\n d1 *= 0.33; // Why 0.33?\n d2 *= 0.33;\n\n if (a2 < a1) {\n mid += HALF_PI;\n } else {\n mid -= HALF_PI;\n }\n\n b.controls.left.x = cos(mid) * d1;\n b.controls.left.y = sin(mid) * d1;\n\n mid -= PI;\n\n b.controls.right.x = cos(mid) * d2;\n b.controls.right.y = sin(mid) * d2;\n\n if (_.isBoolean(b.relative) && !b.relative) {\n b.controls.left.x += b.x;\n b.controls.left.y += b.y;\n b.controls.right.x += b.x;\n b.controls.right.y += b.y;\n }\n\n return b;\n\n },\n\n /**\n * @name Two.Utils.getReflection\n * @function\n * @param {Two.Vector} a\n * @param {Two.Vector} b\n * @param {Boolean} [relative=false]\n * @returns {Two.Vector} New `Two.Vector` that represents the reflection point.\n * @description Get the reflection of a point `b` about point `a`. Where `a` is in absolute space and `b` is relative to `a`.\n * @see {@link http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes}\n */\n getReflection: function(a, b, relative) {\n\n return new Two.Vector(\n 2 * a.x - (b.x + a.x) - (relative ? a.x : 0),\n 2 * a.y - (b.y + a.y) - (relative ? a.y : 0)\n );\n\n },\n\n /**\n * @name Two.Utils.getAnchorsFromArcData\n * @function\n * @param {Two.Vector} center\n * @param {Radians} xAxisRotation\n * @param {Number} rx - x radius\n * @param {Number} ry - y radius\n * @param {Radians} ts\n * @param {Radians} td\n * @param {Boolean} [ccw=false] - Set path traversal to counter-clockwise\n */\n getAnchorsFromArcData: function(center, xAxisRotation, rx, ry, ts, td, ccw) {\n\n var matrix = new Two.Matrix()\n .translate(center.x, center.y)\n .rotate(xAxisRotation);\n\n var l = Two.Resolution;\n\n return _.map(_.range(l), function(i) {\n\n var pct = (i + 1) / l;\n if (!!ccw) {\n pct = 1 - pct;\n }\n\n var theta = pct * td + ts;\n var x = rx * Math.cos(theta);\n var y = ry * Math.sin(theta);\n\n // x += center.x;\n // y += center.y;\n\n var anchor = new Two.Anchor(x, y);\n Two.Anchor.AppendCurveProperties(anchor);\n anchor.command = Two.Commands.line;\n\n // TODO: Calculate control points here...\n\n return anchor;\n\n });\n\n },\n\n /**\n * @name Two.Utils.lerp\n * @function\n * @param {Number} a - Start value.\n * @param {Number} b - End value.\n * @param {Number} t - Zero-to-one value describing percentage between a and b.\n * @returns {Number}\n * @description Linear interpolation between two values `a` and `b` by an amount `t`.\n */\n lerp: function(a, b, t) {\n return t * (b - a) + a;\n },\n\n /**\n * @name Two.Utils.toFixed\n * @function\n * @param {Number} v - Any float\n * @returns {Number} That float trimmed to the third decimal place.\n * @description A pretty fast toFixed(3) alternative.\n * @see {@link http://jsperf.com/parsefloat-tofixed-vs-math-round/18}\n */\n toFixed: function(v) {\n return Math.floor(v * 1000) / 1000;\n },\n\n /**\n * @name Two.Utils.mod\n * @param {Number} v - The value to modulo\n * @param {Number} l - The value to modulo by\n * @returns {Number}\n * @description Modulo with added functionality to handle negative values in a positive manner.\n */\n mod: function(v, l) {\n\n while (v < 0) {\n v += l;\n }\n\n return v % l;\n\n },\n\n /**\n * @name Two.Utils.Collection\n * @class\n * @extends Two.Utils.Events\n * @description An `Array` like object with additional event propagation on actions. `pop`, `shift`, and `splice` trigger `removed` events. `push`, `unshift`, and `splice` with more than 2 arguments trigger 'inserted'. Finally, `sort` and `reverse` trigger `order` events.\n */\n Collection: function() {\n\n Array.call(this);\n\n if (arguments.length > 1) {\n Array.prototype.push.apply(this, arguments);\n } else if (arguments[0] && Array.isArray(arguments[0])) {\n Array.prototype.push.apply(this, arguments[0]);\n }\n\n },\n\n /**\n * @name Two.Utils.Error\n * @class\n * @description Custom error throwing for Two.js specific identification.\n */\n Error: function(message) {\n this.name = 'two.js';\n this.message = message;\n },\n\n /**\n * @name Two.Utils.Events\n * @interface\n * @description Object inherited by many Two.js objects in order to facilitate custom events.\n */\n Events: {\n\n /**\n * @name Two.Utils.Events.on\n * @function\n * @param {String} name - The name of the event to bind a function to.\n * @param {Function} handler - The function to be invoked when the event is dispatched.\n * @description Call to add a listener to a specific event name.\n */\n on: function(name, handler) {\n\n this._events || (this._events = {});\n var list = this._events[name] || (this._events[name] = []);\n\n list.push(handler);\n\n return this;\n\n },\n\n /**\n * @name Two.Utils.Events.off\n * @function\n * @param {String} [name] - The name of the event intended to be removed.\n * @param {Function} [handler] - The handler intended to be reomved.\n * @description Call to remove listeners from a specific event. If only `name` is passed then all the handlers attached to that `name` will be removed. If no arguments are passed then all handlers for every event on the obejct are removed.\n */\n off: function(name, handler) {\n\n if (!this._events) {\n return this;\n }\n if (!name && !handler) {\n this._events = {};\n return this;\n }\n\n var names = name ? [name] : _.keys(this._events);\n for (var i = 0, l = names.length; i < l; i++) {\n\n var name = names[i];\n var list = this._events[name];\n\n if (!!list) {\n var events = [];\n if (handler) {\n for (var j = 0, k = list.length; j < k; j++) {\n var ev = list[j];\n ev = ev.handler ? ev.handler : ev;\n if (handler && handler !== ev) {\n events.push(ev);\n }\n }\n }\n this._events[name] = events;\n }\n }\n\n return this;\n },\n\n /**\n * @name Two.Utils.Events.trigger\n * @function\n * @param {String} name - The name of the event to dispatch.\n * @param arguments - Anything can be passed after the name and those will be passed on to handlers attached to the event in the order they are passed.\n * @description Call to trigger a custom event. Any additional arguments passed after the name will be passed along to the attached handlers.\n */\n trigger: function(name) {\n if (!this._events) return this;\n var args = slice.call(arguments, 1);\n var events = this._events[name];\n if (events) trigger(this, events, args);\n return this;\n },\n\n listen: function(obj, name, handler) {\n\n var bound = this;\n\n if (obj) {\n\n var event = function () {\n handler.apply(bound, arguments);\n };\n\n // Add references about the object that assigned this listener\n event.obj = obj;\n event.name = name;\n event.handler = handler;\n\n obj.on(name, ev);\n\n }\n\n return this;\n\n },\n\n ignore: function(obj, name, handler) {\n\n obj.off(name, handler);\n return this;\n\n }\n\n }\n\n })\n\n });\n\n /**\n * @name Two.Utils.Events.bind\n * @borrows Two.Utils.Events.on as Two.Utils.Events.bind\n */\n Two.Utils.Events.bind = Two.Utils.Events.on;\n\n /**\n * @name Two.Utils.Events.unbind\n * @borrows Two.Utils.Events.off as Two.Utils.Events.unbind\n */\n Two.Utils.Events.unbind = Two.Utils.Events.off;\n\n var trigger = function(obj, events, args) {\n var method;\n switch (args.length) {\n case 0:\n method = function(i) {\n events[i].call(obj, args[0]);\n };\n break;\n case 1:\n method = function(i) {\n events[i].call(obj, args[0], args[1]);\n };\n break;\n case 2:\n method = function(i) {\n events[i].call(obj, args[0], args[1], args[2]);\n };\n break;\n case 3:\n method = function(i) {\n events[i].call(obj, args[0], args[1], args[2], args[3]);\n };\n break;\n default:\n method = function(i) {\n events[i].apply(obj, args);\n };\n }\n for (var i = 0; i < events.length; i++) {\n method(i);\n }\n };\n\n Two.Utils.Error.prototype = new Error();\n Two.Utils.Error.prototype.constructor = Two.Utils.Error;\n\n Two.Utils.Collection.prototype = new Array();\n Two.Utils.Collection.prototype.constructor = Two.Utils.Collection;\n\n _.extend(Two.Utils.Collection.prototype, Two.Utils.Events, {\n\n pop: function() {\n var popped = Array.prototype.pop.apply(this, arguments);\n this.trigger(Two.Events.remove, [popped]);\n return popped;\n },\n\n shift: function() {\n var shifted = Array.prototype.shift.apply(this, arguments);\n this.trigger(Two.Events.remove, [shifted]);\n return shifted;\n },\n\n push: function() {\n var pushed = Array.prototype.push.apply(this, arguments);\n this.trigger(Two.Events.insert, arguments);\n return pushed;\n },\n\n unshift: function() {\n var unshifted = Array.prototype.unshift.apply(this, arguments);\n this.trigger(Two.Events.insert, arguments);\n return unshifted;\n },\n\n splice: function() {\n var spliced = Array.prototype.splice.apply(this, arguments);\n var inserted;\n\n this.trigger(Two.Events.remove, spliced);\n\n if (arguments.length > 2) {\n inserted = this.slice(arguments[0], arguments[0] + arguments.length - 2);\n this.trigger(Two.Events.insert, inserted);\n this.trigger(Two.Events.order);\n }\n return spliced;\n },\n\n sort: function() {\n Array.prototype.sort.apply(this, arguments);\n this.trigger(Two.Events.order);\n return this;\n },\n\n reverse: function() {\n Array.prototype.reverse.apply(this, arguments);\n this.trigger(Two.Events.order);\n return this;\n }\n\n });\n\n // Localize utils\n\n var getAnchorsFromArcData = Two.Utils.getAnchorsFromArcData,\n getControlPoints = Two.Utils.getControlPoints,\n getCurveFromPoints = Two.Utils.getCurveFromPoints,\n solveSegmentIntersection = Two.Utils.solveSegmentIntersection,\n decoupleShapes = Two.Utils.decoupleShapes,\n mod = Two.Utils.mod,\n getBackingStoreRatio = Two.Utils.getBackingStoreRatio,\n getComponentOnCubicBezier = Two.Utils.getComponentOnCubicBezier,\n getCurveLength = Two.Utils.getCurveLength,\n integrate = Two.Utils.integrate,\n getReflection = Two.Utils.getReflection;\n\n _.extend(Two.prototype, Two.Utils.Events, {\n\n constructor: Two,\n\n /**\n * @name Two#appendTo\n * @function\n * @param {Element} elem - The DOM element to append the Two.js stage to.\n * @description Shorthand method to append your instance of Two.js to the `document`.\n */\n appendTo: function(elem) {\n\n elem.appendChild(this.renderer.domElement);\n return this;\n\n },\n\n /**\n * @name Two#play\n * @function\n * @fires `Two.Events.play` event\n * @description Call to start an internal animation loop.\n * @nota-bene This function initiates a `requestAnimationFrame` loop.\n */\n play: function() {\n\n Two.Utils.setPlaying.call(this, true);\n raf.init();\n return this.trigger(Two.Events.play);\n\n },\n\n /**\n * @name Two#pause\n * @function\n * @fires `Two.Events.pause` event\n * @description Call to stop the internal animation loop for a specific instance of Two.js.\n */\n pause: function() {\n\n this.playing = false;\n return this.trigger(Two.Events.pause);\n\n },\n\n /**\n * @name Two#update\n * @fires `Two.Events.update` event\n * @description Update positions and calculations in one pass before rendering. Then render to the canvas.\n * @nota-bene This function is called automatically if using {@link Two#play} or the `autostart` parameter in construction.\n */\n update: function() {\n\n var animated = !!this._lastFrame;\n var now = perf.now();\n\n if (animated) {\n this.timeDelta = parseFloat((now - this._lastFrame).toFixed(3));\n }\n this._lastFrame = now;\n\n var width = this.width;\n var height = this.height;\n var renderer = this.renderer;\n\n // Update width / height for the renderer\n if (width !== renderer.width || height !== renderer.height) {\n renderer.setSize(width, height, this.ratio);\n }\n\n this.trigger(Two.Events.update, this.frameCount, this.timeDelta);\n\n return this.render();\n\n },\n\n /**\n * @name Two#render\n * @fires `Two.Events.render` event\n * @description Render all drawable and visible objects of the scene.\n */\n render: function() {\n\n this.renderer.render();\n return this.trigger(Two.Events.render, this.frameCount++);\n\n },\n\n // Convenience Methods\n\n /**\n * @name Two#add\n * @function\n * @param {(Two.Shape[]|...Two.Shape)}} [objects] - An array of Two.js objects. Alternatively can add objects as individual arguments.\n * @description A shorthand method to add specific Two.js objects to the scene.\n */\n add: function(o) {\n\n var objects = o;\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n }\n\n this.scene.add(objects);\n return this;\n\n },\n\n /**\n * @name Two#remove\n * @function\n * @param {(Two.Shape[]|...Two.Shape)} [objects] - An array of Two.js objects.\n * @description A shorthand method to remove specific Two.js objects from the scene.\n */\n remove: function(o) {\n\n var objects = o;\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n }\n\n this.scene.remove(objects);\n\n return this;\n\n },\n\n /**\n * @name Two#clear\n * @function\n * @description Remove all all Two.js objects from the scene.\n */\n clear: function() {\n\n this.scene.remove(this.scene.children);\n return this;\n\n },\n\n /**\n * @name Two#makeLine\n * @function\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} x2\n * @param {Number} y2\n * @returns {Two.Line}\n * @description Creates a Two.js line and adds it to the scene.\n */\n makeLine: function(x1, y1, x2, y2) {\n\n var line = new Two.Line(x1, y1, x2, y2);\n this.scene.add(line);\n\n return line;\n\n },\n\n /**\n * @name Two#makeRectangle\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} width\n * @param {Number} height\n * @returns {Two.Rectangle}\n * @description Creates a Two.js rectangle and adds it to the scene.\n */\n makeRectangle: function(x, y, width, height) {\n\n var rect = new Two.Rectangle(x, y, width, height);\n this.scene.add(rect);\n\n return rect;\n\n },\n\n /**\n * @name Two#makeRoundedRectangle\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} width\n * @param {Number} height\n * @param {Number} sides\n * @returns {Two.Rectangle}\n * @description Creates a Two.js rounded rectangle and adds it to the scene.\n */\n makeRoundedRectangle: function(x, y, width, height, sides) {\n\n var rect = new Two.RoundedRectangle(x, y, width, height, sides);\n this.scene.add(rect);\n\n return rect;\n\n },\n\n /**\n * @name Two#makeCircle\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} radius\n * @returns {Two.Circle}\n * @description Creates a Two.js circle and adds it to the scene.\n */\n makeCircle: function(x, y, radius) {\n\n var circle = new Two.Circle(x, y, radius);\n this.scene.add(circle);\n\n return circle;\n\n },\n\n /**\n * @name Two#makeEllipse\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} rx\n * @param {Number} ry\n * @returns {Two.Ellipse}\n * @description Creates a Two.js ellipse and adds it to the scene.\n */\n makeEllipse: function(x, y, rx, ry) {\n\n var ellipse = new Two.Ellipse(x, y, rx, ry);\n this.scene.add(ellipse);\n\n return ellipse;\n\n },\n\n /**\n * @name Two#makeStar\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} outerRadius\n * @param {Number} innerRadius\n * @param {Number} sides\n * @returns {Two.Star}\n * @description Creates a Two.js star and adds it to the scene.\n */\n makeStar: function(ox, oy, outerRadius, innerRadius, sides) {\n\n var star = new Two.Star(ox, oy, outerRadius, innerRadius, sides);\n this.scene.add(star);\n\n return star;\n\n },\n\n /**\n * @name Two#makeCurve\n * @function\n * @param {Two.Anchor[]} [points] - An array of `Two.Anchor` points.\n * @param {...Number} - Alternatively you can pass alternating `x` / `y` coordinate values as individual arguments. These will be combined into `Two.Anchor`s for use in the path.\n * @returns {Two.Path} - Where `path.curved` is set to `true`.\n * @description Creates a Two.js path that is curved and adds it to the scene.\n * @nota-bene In either case of passing an array or passing numbered arguments the last argument is an optional `Boolean` that defines whether the path should be open or closed.\n */\n makeCurve: function(p) {\n\n var l = arguments.length, points = p;\n if (!_.isArray(p)) {\n points = [];\n for (var i = 0; i < l; i+=2) {\n var x = arguments[i];\n if (!_.isNumber(x)) {\n break;\n }\n var y = arguments[i + 1];\n points.push(new Two.Anchor(x, y));\n }\n }\n\n var last = arguments[l - 1];\n var curve = new Two.Path(points, !(_.isBoolean(last) ? last : undefined), true);\n var rect = curve.getBoundingClientRect();\n curve.center().translation\n .set(rect.left + rect.width / 2, rect.top + rect.height / 2);\n\n this.scene.add(curve);\n\n return curve;\n\n },\n\n /**\n * @name Two#makePolygon\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} radius\n * @param {Number} sides\n * @returns {Two.Polygon}\n * @description Creates a Two.js polygon and adds it to the scene.\n */\n makePolygon: function(x, y, radius, sides) {\n\n var poly = new Two.Polygon(x, y, radius, sides);\n this.scene.add(poly);\n\n return poly;\n\n },\n\n /**\n * @name Two#makeArcSegment\n * @function\n * @param {Number} x\n * @param {Number} y\n * @param {Number} innerRadius\n * @param {Number} outerRadius\n * @param {Number} startAngle\n * @param {Number} endAngle\n * @param {Number} [resolution=Two.Resolution] - The number of vertices that should comprise the arc segment.\n */\n makeArcSegment: function(ox, oy, ir, or, sa, ea, res) {\n var arcSegment = new Two.ArcSegment(ox, oy, ir, or, sa, ea, res);\n this.scene.add(arcSegment);\n return arcSegment;\n },\n\n /**\n * @name Two#makePath\n * @function\n * @param {Two.Anchor[]} [points] - An array of `Two.Anchor` points.\n * @param {...Number} - Alternatively you can pass alternating `x` / `y` coordinate values as individual arguments. These will be combined into `Two.Anchor`s for use in the path.\n * @returns {Two.Path}\n * @description Creates a Two.js path and adds it to the scene.\n * @nota-bene In either case of passing an array or passing numbered arguments the last argument is an optional `Boolean` that defines whether the path should be open or closed.\n */\n makePath: function(p) {\n\n var l = arguments.length, points = p;\n if (!_.isArray(p)) {\n points = [];\n for (var i = 0; i < l; i+=2) {\n var x = arguments[i];\n if (!_.isNumber(x)) {\n break;\n }\n var y = arguments[i + 1];\n points.push(new Two.Anchor(x, y));\n }\n }\n\n var last = arguments[l - 1];\n var path = new Two.Path(points, !(_.isBoolean(last) ? last : undefined));\n var rect = path.getBoundingClientRect();\n path.center().translation\n .set(rect.left + rect.width / 2, rect.top + rect.height / 2);\n\n this.scene.add(path);\n\n return path;\n\n },\n\n /**\n * @name Two#makeText\n * @function\n * @param {String} message\n * @param {Number} x\n * @param {Number} y\n * @param {Object} [styles] - An object to describe any of the {@link Two.Text.Properties} including `fill`, `stroke`, `linewidth`, `family`, `alignment`, `leading`, `opacity`, etc..\n * @returns {Two.Text}\n * @description Creates a Two.js text object and adds it to the scene.\n */\n makeText: function(message, x, y, styles) {\n var text = new Two.Text(message, x, y, styles);\n this.add(text);\n return text;\n },\n\n /**\n * @name Two#makeLinearGradient\n * @function\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} x2\n * @param {Number} y2\n * @param {...Two.Stop} [stops] - Any number of color stops sometimes reffered to as ramp stops. If none are supplied then the default black-to-white two stop gradient is applied.\n * @returns {Two.LinearGradient}\n * @description Creates a Two.js linear gradient and ads it to the scene. In the case of an effect it's added to an invisible \"definitions\" group.\n */\n makeLinearGradient: function(x1, y1, x2, y2 /* stops */) {\n\n var stops = slice.call(arguments, 4);\n var gradient = new Two.LinearGradient(x1, y1, x2, y2, stops);\n\n this.add(gradient);\n\n return gradient;\n\n },\n\n /**\n * @name Two#makeRadialGradient\n * @function\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} radius\n * @param {...Two.Stop} [stops] - Any number of color stops sometimes reffered to as ramp stops. If none are supplied then the default black-to-white two stop gradient is applied.\n * @returns {Two.RadialGradient}\n * @description Creates a Two.js linear-gradient object and ads it to the scene. In the case of an effect it's added to an invisible \"definitions\" group.\n */\n makeRadialGradient: function(x1, y1, r /* stops */) {\n\n var stops = slice.call(arguments, 3);\n var gradient = new Two.RadialGradient(x1, y1, r, stops);\n\n this.add(gradient);\n\n return gradient;\n\n },\n\n /**\n * @name Two#makeSprite\n * @function\n * @param {(String|Two.Texture)} pathOrTexture - The URL path to an image or an already created `Two.Texture`.\n * @param {Number} x\n * @param {Number} y\n * @param {Number} [columns=1]\n * @param {Number} [rows=1]\n * @param {Integer} [frameRate=0]\n * @param {Boolean} [autostart=false]\n * @returns {Two.Sprite}\n * @description Creates a Two.js sprite object and adds it to the scene. Sprites can be used for still images as well as animations.\n */\n makeSprite: function(path, x, y, cols, rows, frameRate, autostart) {\n\n var sprite = new Two.Sprite(path, x, y, cols, rows, frameRate);\n if (!!autostart) {\n sprite.play();\n }\n this.add(sprite);\n\n return sprite;\n\n },\n\n /**\n * @name Two#makeImageSequence\n * @function\n * @param {(String[]|Two.Texture[])} pathsOrTextures - An array of paths or of `Two.Textures`.\n * @param {Number} x\n * @param {Number} y\n * @param {Number} [frameRate=0]\n * @param {Boolean} [autostart=false]\n * @returns {Two.ImageSequence}\n * @description Creates a Two.js image sequence object and adds it to the scene.\n */\n makeImageSequence: function(paths, x, y, frameRate, autostart) {\n\n var imageSequence = new Two.ImageSequence(paths, x, y, frameRate);\n if (!!autostart) {\n imageSequence.play();\n }\n this.add(imageSequence);\n\n return imageSequence;\n\n },\n\n /**\n * @name Two#makeTexture\n * @function\n * @param {(String|Image|Canvas|Video)} [pathOrSource] - The URL path to an image or a DOM image-like element.\n * @param {Function} [callback] - Function to be invoked when the image is loaded.\n * @returns {Two.Texture}\n * @description Creates a Two.js texture object.\n */\n makeTexture: function(path, callback) {\n\n var texture = new Two.Texture(path, callback);\n return texture;\n\n },\n\n /**\n * @name Two#makeGroup\n * @function\n * @param {(Two.Shape[]|...Two.Shape)} [objects] - Two.js objects to be added to the group in the form of an array or as individual arguments.\n * @returns {Two.Group}\n * @description Creates a Two.js group object and adds it to the scene.\n */\n makeGroup: function(o) {\n\n var objects = o;\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n }\n\n var group = new Two.Group();\n this.scene.add(group);\n group.add(objects);\n\n return group;\n\n },\n\n /**\n * @name Two#interpret\n * @function\n * @param {SvgNode} svgNode - The SVG node to be parsed.\n * @param {Boolean} shallow - Don't create a top-most group but append all content directly.\n * @param {Boolean} add – Automatically add the reconstructed SVG node to scene.\n * @returns {Two.Group}\n * @description Interpret an SVG Node and add it to this instance's scene. The distinction should be made that this doesn't `import` svg's, it solely interprets them into something compatible for Two.js — this is slightly different than a direct transcription.\n */\n interpret: function(svgNode, shallow, add) {\n\n var tag = svgNode.tagName.toLowerCase(),\n add = (typeof add !== 'undefined') ? add : true;\n\n if (!(tag in Two.Utils.read)) {\n return null;\n }\n\n var node = Two.Utils.read[tag].call(this, svgNode);\n\n if (!!add) {\n this.add(shallow && node instanceof Two.Group ? node.children : node);\n }\n\n return node;\n\n },\n\n /**\n * @name Two#load\n * @function\n * @param {String} pathOrSVGContent - The URL path of an SVG file or an SVG document as text.\n * @param {Function} callback - Function to call once loading has completed.\n * @returns {Two.Group}\n * @description Load an SVG file or SVG text and interpret it into Two.js legible objects.\n */\n load: function(text, callback) {\n\n var group = new Two.Group();\n var elem, i, j;\n\n var attach = _.bind(function(data) {\n\n dom.temp.innerHTML = data;\n\n for (i = 0; i < dom.temp.children.length; i++) {\n elem = dom.temp.children[i];\n if (/svg/i.test(elem.nodeName)) {\n // Two.Utils.applySvgViewBox.call(this, group, elem.getAttribute('viewBox'));\n for (j = 0; j < elem.children.length; j++) {\n group.add(this.interpret(elem.children[j]));\n }\n } else {\n group.add(this.interpret(elem));\n }\n }\n\n if (_.isFunction(callback)) {\n var svg = dom.temp.children.length <= 1\n ? dom.temp.children[0] : dom.temp.children;\n callback(group, svg);\n }\n\n }, this);\n\n if (/.*\\.svg$/ig.test(text)) {\n\n Two.Utils.xhr(text, attach);\n\n return group;\n\n }\n\n attach(text);\n\n return group;\n\n }\n\n });\n\n function fitToWindow() {\n\n var wr = document.body.getBoundingClientRect();\n\n var width = this.width = wr.width;\n var height = this.height = wr.height;\n\n this.renderer.setSize(width, height, this.ratio);\n\n }\n\n function updateDimensions(width, height) {\n this.width = width;\n this.height = height;\n this.trigger(Two.Events.resize, width, height);\n }\n\n // Request Animation Frame\n\n var raf = dom.getRequestAnimationFrame();\n\n function loop() {\n\n for (var i = 0; i < Two.Instances.length; i++) {\n var t = Two.Instances[i];\n if (t.playing) {\n t.update();\n }\n }\n\n Two.nextFrameID = raf(loop);\n\n }\n\n if (typeof define === 'function' && define.amd) {\n define('two', [], function() {\n return Two;\n });\n } else if (typeof module != 'undefined' && module.exports) {\n module.exports = Two;\n }\n\n return Two;\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n /**\n * @name Two.Registry\n * @class\n * @description An arbitrary class to manage a directory of things. Mainly used for keeping tabs of textures in Two.js.\n */\n var Registry = Two.Registry = function() {\n\n this.map = {};\n\n };\n\n _.extend(Registry.prototype, {\n\n constructor: Registry,\n\n /**\n * @name Two.Registry#add\n * @function\n * @param {String} id - A unique identifier.\n * @param value - Any type of variable to be registered to the directory.\n * @description Adds any value to the directory. Assigned by the `id`.\n */\n add: function(id, obj) {\n this.map[id] = obj;\n return this;\n },\n\n /**\n * @name Two.Registry#remove\n * @function\n * @param {String} id - A unique identifier.\n * @description Remove any value from the directory by its `id`.\n */\n remove: function(id) {\n delete this.map[id];\n return this;\n },\n\n /**\n * @name Two.Registry#get\n * @function\n * @param {String} id - A unique identifier.\n * @returns value - The associated value. If unavailable then `undefined` is returned.\n * @description Get a registered value by its `id`.\n */\n get: function(id) {\n return this.map[id];\n },\n\n /**\n * @name Two.Registry#contains\n * @function\n * @param {String} id - A unique identifier.\n * @returns {Boolean}\n * @description Convenience method to see if a value is registered to an `id` already.\n */\n contains: function(id) {\n return id in this.map;\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n /**\n * @name Two.Vector\n * @class\n * @param {Number} [x=0] - Any number to represent the horizontal x-component of the vector.\n * @param {Number} [y=0] - Any number to represent the vertical y-component of the vector.\n * @description A class to store x / y component vector data. In addition to storing data `Two.Vector` has suped up methods for commonplace mathematical operations.\n */\n var Vector = Two.Vector = function(x, y) {\n\n /**\n * @name Two.Vector#x\n * @property {Number} - The horizontal x-component of the vector.\n */\n this.x = x || 0;\n\n /**\n * @name Two.Vector#y\n * @property {Number} - The vertical y-component of the vector.\n */\n this.y = y || 0;\n\n };\n\n _.extend(Vector, {\n\n /**\n * @name Two.Vector.zero\n * @readonly\n * @property {Two.Vector} - Handy reference to a vector with component values 0, 0 at all times.\n */\n zero: new Two.Vector(),\n\n /**\n * @name Two.Vector.add\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Two.Vector}\n * @description Add two vectors together.\n */\n add: function(v1, v2) {\n return new Vector(v1.x + v2.x, v1.y + v2.y);\n },\n\n /**\n * @name Two.Vector.sub\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Two.Vector}\n * @description Subtract two vectors: `v2` from `v1`.\n */\n sub: function(v1, v2) {\n return new Vector(v1.x - v2.x, v1.y - v2.y);\n },\n\n /**\n * @name Two.Vector.subtract\n * @borrows Two.Vector.sub as Two.Vector.subtract\n */\n subtract: function(v1, v2) {\n return Vector.sub(v1, v2);\n },\n\n /**\n * @name Two.Vector.ratioBetween\n * @function\n * @param {Two.Vector} A\n * @param {Two.Vector} B\n * @returns {Number} The ratio betwen two points `v1` and `v2`.\n */\n ratioBetween: function(v1, v2) {\n\n return (v1.x * v2.x + v1.y * v2.y) / (v1.length() * v2.length());\n\n },\n\n /**\n * @name Two.Vector.angleBetween\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Radians} The angle between points `v1` and `v2`.\n */\n angleBetween: function(v1, v2) {\n\n var dx, dy;\n\n if (arguments.length >= 4) {\n\n dx = arguments[0] - arguments[2];\n dy = arguments[1] - arguments[3];\n\n return Math.atan2(dy, dx);\n\n }\n\n dx = v1.x - v2.x;\n dy = v1.y - v2.y;\n\n return Math.atan2(dy, dx);\n\n },\n\n /**\n * @name Two.Vector.distanceBetween\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Number} The distance between points `v1` and `v2`. Distance is always positive.\n */\n distanceBetween: function(v1, v2) {\n\n return Math.sqrt(Vector.distanceBetweenSquared(v1, v2));\n\n },\n\n /**\n * @name Two.Vector.distanceBetweenSquared\n * @function\n * @param {Two.Vector} v1\n * @param {Two.Vector} v2\n * @returns {Number} The squared distance between points `v1` and `v2`.\n */\n distanceBetweenSquared: function(v1, v2) {\n\n var dx = v1.x - v2.x;\n var dy = v1.y - v2.y;\n\n return dx * dx + dy * dy;\n\n },\n\n /**\n * @name Two.Vector.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Vector` to any object. Handy if you'd like to extend the `Two.Vector` class on a custom class.\n */\n MakeObservable: function(object) {\n\n // /**\n // * Override Backbone bind / on in order to add properly broadcasting.\n // * This allows Two.Vector to not broadcast events unless event listeners\n // * are explicity bound to it.\n // */\n\n object.bind = object.on = function() {\n\n if (!this._bound) {\n this._x = this.x;\n this._y = this.y;\n Object.defineProperty(this, 'x', xgs);\n Object.defineProperty(this, 'y', ygs);\n _.extend(this, BoundProto);\n this._bound = true; // Reserved for event initialization check\n }\n\n Two.Utils.Events.bind.apply(this, arguments);\n\n return this;\n\n };\n\n }\n\n });\n\n _.extend(Vector.prototype, Two.Utils.Events, {\n\n constructor: Vector,\n\n /**\n * @name Two.Vector#set\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Set the x / y components of a vector to specific number values.\n */\n set: function(x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n\n /**\n * @name Two.Vector#copy\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Copy the x / y components of another object `v`.\n */\n copy: function(v) {\n this.x = v.x;\n this.y = v.y;\n return this;\n },\n\n /**\n * @name Two.Vector#clear\n * @function\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Set the x / y component values of the vector to zero.\n */\n clear: function() {\n this.x = 0;\n this.y = 0;\n return this;\n },\n\n /**\n * @name Two.Vector#clone\n * @function\n * @returns {Two.Vector} - A new instance of `Two.Vector`.\n * @description Create a new vector and copy the existing values onto the newly created instance.\n */\n clone: function() {\n return new Vector(this.x, this.y);\n },\n\n /**\n * @name Two.Vector#add\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Add an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#add\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Add the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#add\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Add `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n add: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x += x;\n this.y += x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x += x.x;\n this.y += x.y;\n }\n } else {\n this.x += x;\n this.y += y;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#addSelf\n * @borrows Two.Vector#add as Two.Vector#addSelf\n */\n addSelf: function(v) {\n return this.add.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#sub\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Subtract an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#sub\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Subtract the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#sub\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Subtract `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n sub: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x -= x;\n this.y -= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x -= x.x;\n this.y -= x.y;\n }\n } else {\n this.x -= x;\n this.y -= y;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#subtract\n * @borrows Two.Vector#sub as Two.Vector#subtract\n */\n subtract: function() {\n return this.sub.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#subSelf\n * @borrows Two.Vector#sub as Two.Vector#subSelf\n */\n subSelf: function(v) {\n return this.sub.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#subtractSelf\n * @borrows Two.Vector#sub as Two.Vector#subtractSelf\n */\n subtractSelf: function(v) {\n return this.sub.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#multiply\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Multiply an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#multiply\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Multiply the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#multiply\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Multiply `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n multiply: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x *= x;\n this.y *= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x *= x.x;\n this.y *= x.y;\n }\n } else {\n this.x *= x;\n this.y *= y;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#multiplySelf\n * @borrows Two.Vector#multiply as Two.Vector#multiplySelf\n */\n multiplySelf: function(v) {\n return this.multiply.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#multiplyScalar\n * @function\n * @param {Number} s - The scalar to multiply by.\n * @description Mulitiply the vector by a single number. Shorthand to call {@link Two.Vector#multiply} directly.\n */\n multiplyScalar: function(s) {\n return this.multiply(s);\n },\n\n /**\n * @name Two.Vector#divide\n * @function\n * @param {Two.Vector} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Divide an object with x / y component values to the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#divide\n * @function\n * @param {Number} v\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Divide the **same** number to both x / y component values of the instance.\n * @overloaded\n */\n\n /**\n * @name Two.Vector#divide\n * @function\n * @param {Number} x\n * @param {Number} y\n * @returns {Two.Vector} - An instance of itself for the purpose of chaining.\n * @description Divide `x` / `y` values to their respective component value on the instance.\n * @overloaded\n */\n divide: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this.x /= x;\n this.y /= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this.x /= x.x;\n this.y /= x.y;\n }\n } else {\n this.x /= x;\n this.y /= y;\n }\n if (_.isNaN(this.x)) {\n this.x = 0;\n }\n if (_.isNaN(this.y)) {\n this.y = 0;\n }\n return this;\n },\n\n /**\n * @name Two.Vector#divideSelf\n * @borrows Two.Vector#divide as Two.Vector#divideSelf\n */\n divideSelf: function(v) {\n return this.divide.apply(this, arguments);\n },\n\n /**\n * @name Two.Vector#divideScalar\n * @function\n * @param {Number} s - The scalar to divide by.\n * @description Divide the vector by a single number. Shorthand to call {@link Two.Vector#divide} directly.\n */\n divideScalar: function(s) {\n return this.divide(s);\n },\n\n /**\n * @name Two.Vector#negate\n * @function\n * @description Invert each component's sign value.\n */\n negate: function() {\n return this.multiply(-1);\n },\n\n /**\n * @name Two.Vector#negate\n * @function\n * @returns {Number}\n * @description Get the [dot product]{@link https://en.wikipedia.org/wiki/Dot_product} of the vector.\n */\n dot: function(v) {\n return this.x * v.x + this.y * v.y;\n },\n\n /**\n * @name Two.Vector#length\n * @function\n * @returns {Number}\n * @description Get the length of a vector.\n */\n length: function() {\n return Math.sqrt(this.lengthSquared());\n },\n\n /**\n * @name Two.Vector#lengthSquared\n * @function\n * @returns {Number}\n * @description Get the length of the vector to the power of two. Widely used as less expensive than {@link Two.Vector#length}, because it isn't square-rooting any numbers.\n */\n lengthSquared: function() {\n return this.x * this.x + this.y * this.y;\n },\n\n /**\n * @name Two.Vector#normalize\n * @function\n * @description Normalize the vector from negative one to one.\n */\n normalize: function() {\n return this.divideScalar(this.length());\n },\n\n /**\n * @name Two.Vector#distanceTo\n * @function\n * @returns {Number}\n * @description Get the distance between two vectors.\n */\n distanceTo: function(v) {\n return Math.sqrt(this.distanceToSquared(v));\n },\n\n /**\n * @name Two.Vector#distanceToSquared\n * @function\n * @returns {Number}\n * @description Get the distance between two vectors to the power of two. Widely used as less expensive than {@link Two.Vector#distanceTo}, because it isn't square-rooting any numbers.\n */\n distanceToSquared: function(v) {\n var dx = this.x - v.x,\n dy = this.y - v.y;\n return dx * dx + dy * dy;\n },\n\n /**\n * @name Two.Vector#setLength\n * @function\n * @param {Number} l - length to set vector to.\n * @description Set the length of a vector.\n */\n setLength: function(l) {\n return this.normalize().multiplyScalar(l);\n },\n\n /**\n * @name Two.Vector#equals\n * @function\n * @param {Two.Vector} v - The vector to compare against.\n * @param {Number} [eps=0.0001] - An options epsilon for precision.\n * @returns {Boolean}\n * @description Qualify if one vector roughly equal another. With a margin of error defined by epsilon.\n */\n equals: function(v, eps) {\n eps = (typeof eps === 'undefined') ? 0.0001 : eps;\n return (this.distanceTo(v) < eps);\n },\n\n /**\n * @name Two.Vector#lerp\n * @function\n * @param {Two.Vector} v - The destination vector to step towards.\n * @param {Number} t - The zero to one value of how close the current vector gets to the destination vector.\n * @description Linear interpolate one vector to another by an amount `t` defined as a zero to one number.\n * @see [Matt DesLauriers]{@link https://twitter.com/mattdesl/status/1031305279227478016} has a good thread about this.\n */\n lerp: function(v, t) {\n var x = (v.x - this.x) * t + this.x;\n var y = (v.y - this.y) * t + this.y;\n return this.set(x, y);\n },\n\n /**\n * @name Two.Vector#isZero\n * @function\n * @param {Number} [eps=0.0001] - Optional precision amount to check against.\n * @returns {Boolean}\n * @description Check to see if vector is roughly zero, based on the `epsilon` precision value.\n */\n isZero: function(eps) {\n eps = (typeof eps === 'undefined') ? 0.0001 : eps;\n return (this.length() < eps);\n },\n\n /**\n * @name Two.Vector#toString\n * @function\n * @returns {String}\n * @description Return a comma-separated string of x, y value. Great for storing in a database.\n */\n toString: function() {\n return this.x + ', ' + this.y;\n },\n\n /**\n * @name Two.Vector#toObject\n * @function\n * @returns {Object}\n * @description Return a JSON compatible plain object that represents the vector.\n */\n toObject: function() {\n return { x: this.x, y: this.y };\n },\n\n /**\n * @name Two.Vector#rotate\n * @function\n * @param {Radians} radians - The amoun to rotate the vector by.\n * @description Rotate a vector.\n */\n rotate: function(radians) {\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n this.x = this.x * cos - this.y * sin;\n this.y = this.x * sin + this.y * cos;\n return this;\n }\n\n });\n\n // The same set of prototypical functions, but using the underlying\n // getter or setter for `x` and `y` values. This set of functions\n // is used instead of the previously documented ones above when\n // Two.Vector#bind is invoked and there is event dispatching processed\n // on x / y property changes.\n var BoundProto = {\n\n constructor: Vector,\n\n set: function(x, y) {\n this._x = x;\n this._y = y;\n return this.trigger(Two.Events.change);\n },\n\n copy: function(v) {\n this._x = v.x;\n this._y = v.y;\n return this.trigger(Two.Events.change);\n },\n\n clear: function() {\n this._x = 0;\n this._y = 0;\n return this.trigger(Two.Events.change);\n },\n\n clone: function() {\n return new Vector(this._x, this._y);\n },\n\n add: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x += x;\n this._y += x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x += x.x;\n this._y += x.y;\n }\n } else {\n this._x += x;\n this._y += y;\n }\n return this.trigger(Two.Events.change);\n },\n\n sub: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x -= x;\n this._y -= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x -= x.x;\n this._y -= x.y;\n }\n } else {\n this._x -= x;\n this._y -= y;\n }\n return this.trigger(Two.Events.change);\n },\n\n multiply: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x *= x;\n this._y *= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x *= x.x;\n this._y *= x.y;\n }\n } else {\n this._x *= x;\n this._y *= y;\n }\n return this.trigger(Two.Events.change);\n },\n\n divide: function(x, y) {\n if (arguments.length <= 0) {\n return this;\n } else if (arguments.length <= 1) {\n if (_.isNumber(x)) {\n this._x /= x;\n this._y /= x;\n } else if (x && _.isNumber(x.x) && _.isNumber(x.y)) {\n this._x /= x.x;\n this._y /= x.y;\n }\n } else {\n this._x /= x;\n this._y /= y;\n }\n if (_.isNaN(this._x)) {\n this._x = 0;\n }\n if (_.isNaN(this._y)) {\n this._y = 0;\n }\n return this.trigger(Two.Events.change);\n },\n\n dot: function(v) {\n return this._x * v.x + this._y * v.y;\n },\n\n lengthSquared: function() {\n return this._x * this._x + this._y * this._y;\n },\n\n distanceToSquared: function(v) {\n var dx = this._x - v.x,\n dy = this._y - v.y;\n return dx * dx + dy * dy;\n },\n\n lerp: function(v, t) {\n var x = (v.x - this._x) * t + this._x;\n var y = (v.y - this._y) * t + this._y;\n return this.set(x, y);\n },\n\n toString: function() {\n return this._x + ', ' + this._y;\n },\n\n toObject: function() {\n return { x: this._x, y: this._y };\n },\n\n rotate: function (radians) {\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n this._x = this._x * cos - this._y * sin;\n this._y = this._x * sin + this._y * cos;\n return this;\n }\n\n };\n\n var xgs = {\n enumerable: true,\n get: function() {\n return this._x;\n },\n set: function(v) {\n this._x = v;\n this.trigger(Two.Events.change, 'x');\n }\n };\n\n var ygs = {\n enumerable: true,\n get: function() {\n return this._y;\n },\n set: function(v) {\n this._y = v;\n this.trigger(Two.Events.change, 'y');\n }\n };\n\n Vector.MakeObservable(Vector.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Localized variables\n var commands = Two.Commands;\n var _ = Two.Utils;\n\n /**\n * @class\n * @name Two.Anchor\n * @param {Number} [x=0] - The x position of the root anchor point.\n * @param {Number} [y=0] - The y position of the root anchor point.\n * @param {Number} [lx=0] - The x position of the left handle point.\n * @param {Number} [ly=0] - The y position of the left handle point.\n * @param {Number} [rx=0] - The x position of the right handle point.\n * @param {Number} [ry=0] - The y position of the right handle point.\n * @param {String} [command=Two.Commands.move] - The command to describe how to render. Applicable commands are {@link Two.Commands}\n * @extends Two.Vector\n * @description An object that holds 3 `Two.Vector`s, the anchor point and its corresponding handles: `left` and `right`. In order to properly describe the bezier curve about the point there is also a command property to describe what type of drawing should occur when Two.js renders the anchors.\n */\n var Anchor = Two.Anchor = function(x, y, lx, ly, rx, ry, command) {\n\n Two.Vector.call(this, x, y);\n\n this._broadcast = _.bind(function() {\n this.trigger(Two.Events.change);\n }, this);\n\n this._command = command || commands.move;\n this._relative = true;\n\n var ilx = _.isNumber(lx);\n var ily = _.isNumber(ly);\n var irx = _.isNumber(rx);\n var iry = _.isNumber(ry);\n\n // Append the `controls` object only if control points are specified,\n // keeping the Two.Anchor inline with a Two.Vector until it needs to\n // evolve beyond those functions — e.g: a simple 2 component vector.\n if (ilx || ily || irx || iry) {\n Two.Anchor.AppendCurveProperties(this);\n }\n\n if (ilx) {\n this.controls.left.x = lx;\n }\n if (ily) {\n this.controls.left.y = ly;\n }\n if (irx) {\n this.controls.right.x = rx;\n }\n if (iry) {\n this.controls.right.y = ry;\n }\n\n };\n\n _.extend(Two.Anchor, {\n\n /**\n * @name Two.Anchor.AppendCurveProperties\n * @function\n * @param {Two.Anchor} anchor - The instance to append the `control`object to.\n * @description Adds the `controls` property as an object with `left` and `right` properties to access the bezier control handles that define how the curve is drawn. It also sets the `relative` property to `true` making vectors in the `controls` object relative to their corresponding root anchor point.\n */\n AppendCurveProperties: function(anchor) {\n\n anchor.relative = true;\n\n /**\n * @name Two.Anchor#controls\n * @property {Object} controls\n * @description An plain object that holds the controls handles for a {@link Two.Anchor}.\n */\n anchor.controls = {};\n\n /**\n * @name Two.Anchor#controls#left\n * @property {Two.Vector} left\n * @description The \"left\" control point to define handles on a bezier curve.\n */\n anchor.controls.left = new Two.Vector(0, 0);\n\n /**\n * @name Two.Anchor#controls#right\n * @property {Two.Vector} right\n * @description The \"left\" control point to define handles on a bezier curve.\n */\n anchor.controls.right = new Two.Vector(0, 0);\n\n },\n\n /**\n * @name Two.Anchor.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Anchor` to any object. Handy if you'd like to extend the `Two.Anchor` class on a custom class.\n */\n MakeObservable: function(object) {\n\n /**\n * @name Two.Anchor#command\n * @property {Two.Commands}\n * @description A draw command associated with the anchor point.\n */\n Object.defineProperty(object, 'command', {\n\n enumerable: true,\n\n get: function() {\n return this._command;\n },\n\n set: function(c) {\n this._command = c;\n if (this._command === commands.curve && !_.isObject(this.controls)) {\n Anchor.AppendCurveProperties(this);\n }\n return this.trigger(Two.Events.change);\n }\n\n });\n\n /**\n * @name Two.Anchor#relative\n * @property {Boolean}\n * @description A boolean to render control points relative to the root anchor point or in global coordinate-space to the rest of the scene.\n */\n Object.defineProperty(object, 'relative', {\n\n enumerable: true,\n\n get: function() {\n return this._relative;\n },\n\n set: function(b) {\n if (this._relative == b) {\n return this;\n }\n this._relative = !!b;\n return this.trigger(Two.Events.change);\n }\n\n });\n\n _.extend(object, Two.Vector.prototype, AnchorProto);\n\n // Make it possible to bind and still have the Anchor specific\n // inheritance from Two.Vector. In this case relying on `Two.Vector`\n // to do much of the heavy event-listener binding / unbinding.\n object.bind = object.on = function() {\n var bound = this._bound;\n Two.Vector.prototype.bind.apply(this, arguments);\n if (!bound) {\n _.extend(this, AnchorProto);\n }\n };\n\n }\n\n });\n\n var AnchorProto = {\n\n constructor: Two.Anchor,\n\n /**\n * @name Two.Anchor#listen\n * @function\n * @description Convenience method used mainly by {@link Two.Path#vertices} to listen and propagate changes from control points up to their respective anchors and further if necessary.\n */\n listen: function() {\n\n if (!_.isObject(this.controls)) {\n Two.Anchor.AppendCurveProperties(this);\n }\n\n this.controls.left.bind(Two.Events.change, this._broadcast);\n this.controls.right.bind(Two.Events.change, this._broadcast);\n\n return this;\n\n },\n\n /**\n * @name Two.Anchor#ignore\n * @function\n * @description Convenience method used mainly by {@link Two.Path#vertices} to ignore changes from a specific anchor's control points.\n */\n ignore: function() {\n\n this.controls.left.unbind(Two.Events.change, this._broadcast);\n this.controls.right.unbind(Two.Events.change, this._broadcast);\n\n return this;\n\n },\n\n /**\n * @name Two.Anchor#copy\n * @function\n * @param {Two.Anchor} v - The anchor to apply values to.\n * @description Copy the properties of one {@link Two.Anchor} onto another.\n */\n copy: function(v) {\n\n this.x = v.x;\n this.y = v.y;\n\n if (_.isString(v.command)) {\n this.command = v.command;\n }\n if (_.isObject(v.controls)) {\n if (!_.isObject(this.controls)) {\n Two.Anchor.AppendCurveProperties(this);\n }\n // TODO: Do we need to listen here?\n this.controls.left.copy(v.controls.left);\n this.controls.right.copy(v.controls.right);\n }\n if (_.isBoolean(v.relative)) {\n this.relative = v.relative;\n }\n\n // TODO: Hack for `Two.Commands.arc`\n if (this.command === Two.Commands.arc) {\n this.rx = v.rx;\n this.ry = v.ry;\n this.xAxisRotation = v.xAxisRotation;\n this.largeArcFlag = v.largeArcFlag;\n this.sweepFlag = v.sweepFlag;\n }\n\n return this;\n\n },\n\n /**\n * @name Two.Anchor#clone\n * @function\n * @returns {Two.Anchor}\n * @description Create a new {@link Two.Anchor}, set all its values to the current instance and return it for use.\n */\n clone: function() {\n\n var controls = this.controls;\n\n var clone = new Two.Anchor(\n this.x,\n this.y,\n controls && controls.left.x,\n controls && controls.left.y,\n controls && controls.right.x,\n controls && controls.right.y,\n this.command\n );\n clone.relative = this._relative;\n return clone;\n\n },\n\n /**\n * @name Two.Anchor#toObject\n * @function\n * @returns {Object} - An object with properties filled out to mirror {@link Two.Anchor}.\n * @description Create a JSON compatible plain object of the current instance. Intended for use with storing values in a database.\n */\n toObject: function() {\n var o = {\n x: this.x,\n y: this.y\n };\n if (this._command) {\n o.command = this._command;\n }\n if (this._relative) {\n o.relative = this._relative;\n }\n if (this.controls) {\n o.controls = {\n left: this.controls.left.toObject(),\n right: this.controls.right.toObject()\n };\n }\n return o;\n },\n\n /**\n * @name Two.Anchor#toString\n * @function\n * @returns {String} - A String with comma-separated values reflecting the various values on the current instance.\n * @description Create a string form of the current instance. Intended for use with storing values in a database. This is lighter to store than the JSON compatible {@link Two.Anchor#toObject}.\n */\n toString: function() {\n if (!this.controls) {\n return [this._x, this._y].join(', ');\n }\n return [this._x, this._y, this.controls.left.x, this.controls.left.y,\n this.controls.right.x, this.controls.right.y, this._command,\n this._relative ? 1 : 0].join(', ');\n }\n\n };\n\n Two.Anchor.MakeObservable(Two.Anchor.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Constants\n\n var cos = Math.cos, sin = Math.sin, tan = Math.tan;\n var _ = Two.Utils, fix = _.toFixed;\n var array = [];\n\n /**\n * @name Two.Matrix\n * @class\n * @param {Number} [a=1] - The value for element at the first column and first row.\n * @param {Number} [b=0] - The value for element at the second column and first row.\n * @param {Number} [c=0] - The value for element at the third column and first row.\n * @param {Number} [d=0] - The value for element at the first column and second row.\n * @param {Number} [e=1] - The value for element at the second column and second row.\n * @param {Number} [f=0] - The value for element at the third column and second row.\n * @param {Number} [g=0] - The value for element at the first column and third row.\n * @param {Number} [h=0] - The value for element at the second column and third row.\n * @param {Number} [i=1] - The value for element at the third column and third row.\n * @description A class to store 3 x 3 transformation matrix information. In addition to storing data `Two.Matrix` has suped up methods for commonplace mathematical operations.\n * @nota-bene Order is based on how to construct transformation strings for the browser.\n */\n var Matrix = Two.Matrix = function(a, b, c, d, e, f) {\n\n /**\n * @name Two.Matrix#elements\n * @property {Array} - The underlying data stored as an array.\n */\n this.elements = new Two.Array(9);\n\n var elements = a;\n if (!_.isArray(elements)) {\n elements = _.toArray(arguments);\n }\n\n // initialize the elements with default values.\n this.identity();\n\n if (elements.length > 0) {\n this.set(elements);\n }\n\n };\n\n _.extend(Matrix, {\n\n /**\n * @name Two.Matrix.Identity\n * @property {Array} - A stored reference to the default value of a 3 x 3 matrix.\n */\n Identity: [\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n ],\n\n /**\n * @name Two.Matrix.Multiply\n * @function\n * @param {Two.Matrix} A\n * @param {Two.Matrix} B\n * @param {Two.Matrix} [C] - An optional matrix to apply the multiplication to.\n * @returns {Two.Matrix} - If an optional `C` matrix isn't passed then a new one is created and returned.\n * @description Multiply two matrices together and return the result.\n */\n Multiply: function(A, B, C) {\n\n if (B.length <= 3) { // Multiply Vector\n\n var x, y, z, e = A;\n\n var a = B[0] || 0,\n b = B[1] || 0,\n c = B[2] || 0;\n\n // Go down rows first\n // a, d, g, b, e, h, c, f, i\n\n x = e[0] * a + e[1] * b + e[2] * c;\n y = e[3] * a + e[4] * b + e[5] * c;\n z = e[6] * a + e[7] * b + e[8] * c;\n\n return { x: x, y: y, z: z };\n\n }\n\n var A0 = A[0], A1 = A[1], A2 = A[2];\n var A3 = A[3], A4 = A[4], A5 = A[5];\n var A6 = A[6], A7 = A[7], A8 = A[8];\n\n var B0 = B[0], B1 = B[1], B2 = B[2];\n var B3 = B[3], B4 = B[4], B5 = B[5];\n var B6 = B[6], B7 = B[7], B8 = B[8];\n\n C = C || new Two.Array(9);\n\n C[0] = A0 * B0 + A1 * B3 + A2 * B6;\n C[1] = A0 * B1 + A1 * B4 + A2 * B7;\n C[2] = A0 * B2 + A1 * B5 + A2 * B8;\n C[3] = A3 * B0 + A4 * B3 + A5 * B6;\n C[4] = A3 * B1 + A4 * B4 + A5 * B7;\n C[5] = A3 * B2 + A4 * B5 + A5 * B8;\n C[6] = A6 * B0 + A7 * B3 + A8 * B6;\n C[7] = A6 * B1 + A7 * B4 + A8 * B7;\n C[8] = A6 * B2 + A7 * B5 + A8 * B8;\n\n return C;\n\n }\n\n });\n\n _.extend(Matrix.prototype, Two.Utils.Events, {\n\n constructor: Matrix,\n\n /**\n * @name Two.Matrix#manual\n * @property {Boolean} - Determines whether Two.js automatically calculates the values for the matrix or if the developer intends to manage the matrix.\n * @nota-bene - Setting to `true` nullifies {@link Two.Shape#translation}, {@link Two.Shape#rotation}, and {@link Two.Shape#scale}.\n */\n manual: false,\n\n /**\n * @name Two.Matrix#set\n * @function\n * @param {Number} a - The value for element at the first column and first row.\n * @param {Number} b - The value for element at the second column and first row.\n * @param {Number} c - The value for element at the third column and first row.\n * @param {Number} d - The value for element at the first column and second row.\n * @param {Number} e - The value for element at the second column and second row.\n * @param {Number} f - The value for element at the third column and second row.\n * @param {Number} g - The value for element at the first column and third row.\n * @param {Number} h - The value for element at the second column and third row.\n * @param {Number} i - The value for element at the third column and third row.\n * @description Set an array of values onto the matrix. Order described in {@link Two.Matrix}.\n */\n\n /**\n * @name Two.Matrix#set\n * @function\n * @param {Number[]} a - The array of elements to apply.\n * @description Set an array of values onto the matrix. Order described in {@link Two.Matrix}.\n */\n set: function(a) {\n\n var elements = a;\n if (arguments.length > 1) {\n elements = _.toArray(arguments);\n }\n\n this.elements[0] = elements[0];\n this.elements[1] = elements[1];\n this.elements[2] = elements[2];\n this.elements[3] = elements[3];\n this.elements[4] = elements[4];\n this.elements[5] = elements[5];\n this.elements[6] = elements[6];\n this.elements[7] = elements[7];\n this.elements[8] = elements[8];\n\n return this.trigger(Two.Events.change);\n\n },\n\n /**\n * @name Two.Matrix#identity\n * @function\n * @description Turn matrix to the identity, like resetting.\n */\n identity: function() {\n\n this.elements[0] = Matrix.Identity[0];\n this.elements[1] = Matrix.Identity[1];\n this.elements[2] = Matrix.Identity[2];\n this.elements[3] = Matrix.Identity[3];\n this.elements[4] = Matrix.Identity[4];\n this.elements[5] = Matrix.Identity[5];\n this.elements[6] = Matrix.Identity[6];\n this.elements[7] = Matrix.Identity[7];\n this.elements[8] = Matrix.Identity[8];\n\n return this.trigger(Two.Events.change);\n\n },\n\n /**\n * @name Two.Matrix.multiply\n * @function\n * @param {Number} a - The scalar to be multiplied.\n * @description Multiply all components of the matrix against a single scalar value.\n */\n\n /**\n * @name Two.Matrix.multiply\n * @function\n * @param {Number} a - The x component to be multiplied.\n * @param {Number} b - The y component to be multiplied.\n * @param {Number} c - The z component to be multiplied.\n * @description Multiply all components of a matrix against a 3 component vector.\n */\n\n /**\n * @name Two.Matrix.multiply\n * @function\n * @param {Number} a - The value at the first column and first row of the matrix to be multiplied.\n * @param {Number} b - The value at the second column and first row of the matrix to be multiplied.\n * @param {Number} c - The value at the third column and first row of the matrix to be multiplied.\n * @param {Number} d - The value at the first column and second row of the matrix to be multiplied.\n * @param {Number} e - The value at the second column and second row of the matrix to be multiplied.\n * @param {Number} f - The value at the third column and second row of the matrix to be multiplied.\n * @param {Number} g - The value at the first column and third row of the matrix to be multiplied.\n * @param {Number} h - The value at the second column and third row of the matrix to be multiplied.\n * @param {Number} i - The value at the third column and third row of the matrix to be multiplied.\n * @description Multiply all components of a matrix against another matrix.\n */\n multiply: function(a, b, c, d, e, f, g, h, i) {\n\n var elements = arguments, l = elements.length;\n\n // Multiply scalar\n\n if (l <= 1) {\n\n this.elements[0] *= a;\n this.elements[1] *= a;\n this.elements[2] *= a;\n this.elements[3] *= a;\n this.elements[4] *= a;\n this.elements[5] *= a;\n this.elements[6] *= a;\n this.elements[7] *= a;\n this.elements[8] *= a;\n\n return this.trigger(Two.Events.change);\n\n }\n\n if (l <= 3) { // Multiply Vector\n\n var x, y, z;\n a = a || 0;\n b = b || 0;\n c = c || 0;\n e = this.elements;\n\n // Go down rows first\n // a, d, g, b, e, h, c, f, i\n\n x = e[0] * a + e[1] * b + e[2] * c;\n y = e[3] * a + e[4] * b + e[5] * c;\n z = e[6] * a + e[7] * b + e[8] * c;\n\n return { x: x, y: y, z: z };\n\n }\n\n // Multiple matrix\n\n var A = this.elements;\n var B = elements;\n\n var A0 = A[0], A1 = A[1], A2 = A[2];\n var A3 = A[3], A4 = A[4], A5 = A[5];\n var A6 = A[6], A7 = A[7], A8 = A[8];\n\n var B0 = B[0], B1 = B[1], B2 = B[2];\n var B3 = B[3], B4 = B[4], B5 = B[5];\n var B6 = B[6], B7 = B[7], B8 = B[8];\n\n this.elements[0] = A0 * B0 + A1 * B3 + A2 * B6;\n this.elements[1] = A0 * B1 + A1 * B4 + A2 * B7;\n this.elements[2] = A0 * B2 + A1 * B5 + A2 * B8;\n\n this.elements[3] = A3 * B0 + A4 * B3 + A5 * B6;\n this.elements[4] = A3 * B1 + A4 * B4 + A5 * B7;\n this.elements[5] = A3 * B2 + A4 * B5 + A5 * B8;\n\n this.elements[6] = A6 * B0 + A7 * B3 + A8 * B6;\n this.elements[7] = A6 * B1 + A7 * B4 + A8 * B7;\n this.elements[8] = A6 * B2 + A7 * B5 + A8 * B8;\n\n return this.trigger(Two.Events.change);\n\n },\n\n /**\n * @name Two.Matrix#inverse\n * @function\n * @param {Two.Matrix} [out] - The optional matrix to apply the inversion to.\n * @description Return an inverted version of the matrix. If no optional one is passed a new matrix is created and returned.\n */\n inverse: function(out) {\n\n var a = this.elements;\n out = out || new Two.Matrix();\n\n var a00 = a[0], a01 = a[1], a02 = a[2];\n var a10 = a[3], a11 = a[4], a12 = a[5];\n var a20 = a[6], a21 = a[7], a22 = a[8];\n\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20;\n\n // Calculate the determinant\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n\n out.elements[0] = b01 * det;\n out.elements[1] = (-a22 * a01 + a02 * a21) * det;\n out.elements[2] = (a12 * a01 - a02 * a11) * det;\n out.elements[3] = b11 * det;\n out.elements[4] = (a22 * a00 - a02 * a20) * det;\n out.elements[5] = (-a12 * a00 + a02 * a10) * det;\n out.elements[6] = b21 * det;\n out.elements[7] = (-a21 * a00 + a01 * a20) * det;\n out.elements[8] = (a11 * a00 - a01 * a10) * det;\n\n return out;\n\n },\n\n /**\n * @name Two.Matrix#scale\n * @function\n * @param {Number} scale - The one dimensional scale to apply to the matrix.\n * @description Uniformly scale the transformation matrix.\n */\n\n /**\n * @name Two.Matrix#scale\n * @function\n * @param {Number} sx - The horizontal scale factor.\n * @param {Number} sy - The vertical scale factor\n * @description Scale the transformation matrix in two dimensions.\n */\n scale: function(sx, sy) {\n\n var l = arguments.length;\n if (l <= 1) {\n sy = sx;\n }\n\n return this.multiply(sx, 0, 0, 0, sy, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#rotate\n * @function\n * @param {Radians} radians - The amount to rotate in radians.\n * @description Rotate the matrix.\n */\n rotate: function(radians) {\n\n var c = cos(radians);\n var s = sin(radians);\n\n return this.multiply(c, -s, 0, s, c, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#translate\n * @function\n * @param {Number} x - The horizontal translation value to apply.\n * @param {Number} y - The vertical translation value to apply.\n * @description Translate the matrix.\n */\n translate: function(x, y) {\n\n return this.multiply(1, 0, x, 0, 1, y, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#skewX\n * @function\n * @param {Radians} radians - The amount to skew in radians.\n * @description Skew the matrix by an angle in the x axis direction.\n */\n skewX: function(radians) {\n\n var a = tan(radians);\n\n return this.multiply(1, a, 0, 0, 1, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#skewY\n * @function\n * @param {Radians} radians - The amount to skew in radians.\n * @description Skew the matrix by an angle in the y axis direction.\n */\n skewY: function(radians) {\n\n var a = tan(radians);\n\n return this.multiply(1, 0, 0, a, 1, 0, 0, 0, 1);\n\n },\n\n /**\n * @name Two.Matrix#toString\n * @function\n * @param {Boolean} [fullMatrix=false] - Return the full 9 elements of the matrix or just 6 for 2D transformations.\n * @returns {String} - The transformation matrix as a 6 component string separated by spaces.\n * @description Create a transform string. Used for the Two.js rendering APIs.\n */\n toString: function(fullMatrix) {\n\n array.length = 0;\n this.toArray(fullMatrix, array);\n\n return array.join(' ');\n\n },\n\n /**\n * @name Two.Matrix#toArray\n * @function\n * @param {Boolean} [fullMatrix=false] - Return the full 9 elements of the matrix or just 6 for 2D transformations.\n * @param {Number[]} [output] - An array empty or otherwise to apply the values to.\n * @description Create a transform array. Used for the Two.js rendering APIs.\n */\n toArray: function(fullMatrix, output) {\n\n var elements = this.elements;\n var hasOutput = !!output;\n\n var a = fix(elements[0]);\n var b = fix(elements[1]);\n var c = fix(elements[2]);\n var d = fix(elements[3]);\n var e = fix(elements[4]);\n var f = fix(elements[5]);\n\n if (!!fullMatrix) {\n\n var g = fix(elements[6]);\n var h = fix(elements[7]);\n var i = fix(elements[8]);\n\n if (hasOutput) {\n output[0] = a;\n output[1] = d;\n output[2] = g;\n output[3] = b;\n output[4] = e;\n output[5] = h;\n output[6] = c;\n output[7] = f;\n output[8] = i;\n return;\n }\n\n return [\n a, d, g, b, e, h, c, f, i\n ];\n }\n\n if (hasOutput) {\n output[0] = a;\n output[1] = d;\n output[2] = b;\n output[3] = e;\n output[4] = c;\n output[5] = f;\n return;\n }\n\n return [\n a, d, b, e, c, f // Specific format see LN:19\n ];\n\n },\n\n /**\n * @name Two.Matrix#clone\n * @function\n * @description Clone the current matrix.\n */\n clone: function() {\n var a, b, c, d, e, f, g, h, i;\n\n a = this.elements[0];\n b = this.elements[1];\n c = this.elements[2];\n d = this.elements[3];\n e = this.elements[4];\n f = this.elements[5];\n g = this.elements[6];\n h = this.elements[7];\n i = this.elements[8];\n\n var matrix = new Two.Matrix(a, b, c, d, e, f, g, h, i);\n matrix.manual = this.manual;\n\n return matrix;\n\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Localize variables\n var mod = Two.Utils.mod, toFixed = Two.Utils.toFixed;\n var _ = Two.Utils;\n\n var svg = {\n\n version: 1.1,\n\n ns: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n\n alignments: {\n left: 'start',\n center: 'middle',\n right: 'end'\n },\n\n /**\n * Create an svg namespaced element.\n */\n createElement: function(name, attrs) {\n var tag = name;\n var elem = document.createElementNS(svg.ns, tag);\n if (tag === 'svg') {\n attrs = _.defaults(attrs || {}, {\n version: svg.version\n });\n }\n if (!_.isEmpty(attrs)) {\n svg.setAttributes(elem, attrs);\n }\n return elem;\n },\n\n /**\n * Add attributes from an svg element.\n */\n setAttributes: function(elem, attrs) {\n var keys = Object.keys(attrs);\n for (var i = 0; i < keys.length; i++) {\n if (/href/.test(keys[i])) {\n elem.setAttributeNS(svg.xlink, keys[i], attrs[keys[i]]);\n } else {\n elem.setAttribute(keys[i], attrs[keys[i]]);\n }\n }\n return this;\n },\n\n /**\n * Remove attributes from an svg element.\n */\n removeAttributes: function(elem, attrs) {\n for (var key in attrs) {\n elem.removeAttribute(key);\n }\n return this;\n },\n\n /**\n * Turn a set of vertices into a string for the d property of a path\n * element. It is imperative that the string collation is as fast as\n * possible, because this call will be happening multiple times a\n * second.\n */\n toString: function(points, closed) {\n\n var l = points.length,\n last = l - 1,\n d, // The elusive last Two.Commands.move point\n string = '';\n\n for (var i = 0; i < l; i++) {\n var b = points[i];\n var command;\n var prev = closed ? mod(i - 1, l) : Math.max(i - 1, 0);\n var next = closed ? mod(i + 1, l) : Math.min(i + 1, last);\n\n var a = points[prev];\n var c = points[next];\n\n var vx, vy, ux, uy, ar, bl, br, cl;\n var rx, ry, xAxisRotation, largeArcFlag, sweepFlag;\n\n // Access x and y directly,\n // bypassing the getter\n var x = toFixed(b.x);\n var y = toFixed(b.y);\n\n switch (b.command) {\n\n case Two.Commands.close:\n command = Two.Commands.close;\n break;\n\n case Two.Commands.arc:\n\n rx = b.rx;\n ry = b.ry;\n xAxisRotation = b.xAxisRotation;\n largeArcFlag = b.largeArcFlag;\n sweepFlag = b.sweepFlag;\n\n command = Two.Commands.arc + ' ' + rx + ' ' + ry + ' '\n + xAxisRotation + ' ' + largeArcFlag + ' ' + sweepFlag + ' '\n + x + ' ' + y;\n break;\n\n case Two.Commands.curve:\n\n ar = (a.controls && a.controls.right) || Two.Vector.zero;\n bl = (b.controls && b.controls.left) || Two.Vector.zero;\n\n if (a.relative) {\n vx = toFixed((ar.x + a.x));\n vy = toFixed((ar.y + a.y));\n } else {\n vx = toFixed(ar.x);\n vy = toFixed(ar.y);\n }\n\n if (b.relative) {\n ux = toFixed((bl.x + b.x));\n uy = toFixed((bl.y + b.y));\n } else {\n ux = toFixed(bl.x);\n uy = toFixed(bl.y);\n }\n\n command = ((i === 0) ? Two.Commands.move : Two.Commands.curve) +\n ' ' + vx + ' ' + vy + ' ' + ux + ' ' + uy + ' ' + x + ' ' + y;\n break;\n\n case Two.Commands.move:\n d = b;\n command = Two.Commands.move + ' ' + x + ' ' + y;\n break;\n\n default:\n command = b.command + ' ' + x + ' ' + y;\n\n }\n\n // Add a final point and close it off\n\n if (i >= last && closed) {\n\n if (b.command === Two.Commands.curve) {\n\n // Make sure we close to the most previous Two.Commands.move\n c = d;\n\n br = (b.controls && b.controls.right) || b;\n cl = (c.controls && c.controls.left) || c;\n\n if (b.relative) {\n vx = toFixed((br.x + b.x));\n vy = toFixed((br.y + b.y));\n } else {\n vx = toFixed(br.x);\n vy = toFixed(br.y);\n }\n\n if (c.relative) {\n ux = toFixed((cl.x + c.x));\n uy = toFixed((cl.y + c.y));\n } else {\n ux = toFixed(cl.x);\n uy = toFixed(cl.y);\n }\n\n x = toFixed(c.x);\n y = toFixed(c.y);\n\n command +=\n ' C ' + vx + ' ' + vy + ' ' + ux + ' ' + uy + ' ' + x + ' ' + y;\n\n }\n\n if (b.command !== Two.Commands.close) {\n command += ' Z';\n }\n\n }\n\n string += command + ' ';\n\n }\n\n return string;\n\n },\n\n getClip: function(shape) {\n\n var clip = shape._renderer.clip;\n\n if (!clip) {\n\n var root = shape;\n\n while (root.parent) {\n root = root.parent;\n }\n\n clip = shape._renderer.clip = svg.createElement('clipPath');\n root.defs.appendChild(clip);\n\n }\n\n return clip;\n\n },\n\n group: {\n\n // TODO: Can speed up.\n // TODO: How does this effect a f\n appendChild: function(object) {\n\n var elem = object._renderer.elem;\n\n if (!elem) {\n return;\n }\n\n var tag = elem.nodeName;\n\n if (!tag || /(radial|linear)gradient/i.test(tag) || object._clip) {\n return;\n }\n\n this.elem.appendChild(elem);\n\n },\n\n removeChild: function(object) {\n\n var elem = object._renderer.elem;\n\n if (!elem || elem.parentNode != this.elem) {\n return;\n }\n\n var tag = elem.nodeName;\n\n if (!tag) {\n return;\n }\n\n // Defer subtractions while clipping.\n if (object._clip) {\n return;\n }\n\n this.elem.removeChild(elem);\n\n },\n\n orderChild: function(object) {\n this.elem.appendChild(object._renderer.elem);\n },\n\n renderChild: function(child) {\n svg[child._renderer.type].render.call(child, this);\n },\n\n render: function(domElement) {\n\n this._update();\n\n // Shortcut for hidden objects.\n // Doesn't reset the flags, so changes are stored and\n // applied once the object is visible again\n if (this._opacity === 0 && !this._flagOpacity) {\n return this;\n }\n\n if (!this._renderer.elem) {\n this._renderer.elem = svg.createElement('g', {\n id: this.id\n });\n domElement.appendChild(this._renderer.elem);\n }\n\n // _Update styles for the \n var flagMatrix = this._matrix.manual || this._flagMatrix;\n var context = {\n domElement: domElement,\n elem: this._renderer.elem\n };\n\n if (flagMatrix) {\n this._renderer.elem.setAttribute('transform', 'matrix(' + this._matrix.toString() + ')');\n }\n\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n svg[child._renderer.type].render.call(child, domElement);\n }\n\n if (this._flagOpacity) {\n this._renderer.elem.setAttribute('opacity', this._opacity);\n }\n\n if (this._flagClassName) {\n this._renderer.elem.setAttribute('class', this._className);\n }\n\n if (this._flagAdditions) {\n this.additions.forEach(svg.group.appendChild, context);\n }\n\n if (this._flagSubtractions) {\n this.subtractions.forEach(svg.group.removeChild, context);\n }\n\n if (this._flagOrder) {\n this.children.forEach(svg.group.orderChild, context);\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (this._flagClip) {\n\n // clip = svg.getClip(this);\n // elem = this._renderer.elem;\n\n // if (this._clip) {\n // elem.removeAttribute('id');\n // clip.setAttribute('id', this.id);\n // clip.appendChild(elem);\n // } else {\n // clip.removeAttribute('id');\n // elem.setAttribute('id', this.id);\n // this.parent._renderer.elem.appendChild(elem); // TODO: should be insertBefore\n // }\n\n // }\n\n if (this._flagMask) {\n if (this._mask) {\n this._renderer.elem.setAttribute('clip-path', 'url(#' + this._mask.id + ')');\n } else {\n this._renderer.elem.removeAttribute('clip-path');\n }\n }\n\n return this.flagReset();\n\n }\n\n },\n\n path: {\n\n render: function(domElement) {\n\n this._update();\n\n // Shortcut for hidden objects.\n // Doesn't reset the flags, so changes are stored and\n // applied once the object is visible again\n if (this._opacity === 0 && !this._flagOpacity) {\n return this;\n }\n\n // Collect any attribute that needs to be changed here\n var changed = {};\n\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n\n if (flagMatrix) {\n changed.transform = 'matrix(' + this._matrix.toString() + ')';\n }\n\n if (this._flagVertices) {\n var vertices = svg.toString(this._renderer.vertices, this._closed);\n changed.d = vertices;\n }\n\n if (this._fill && this._fill._renderer) {\n this._fill._update();\n svg[this._fill._renderer.type].render.call(this._fill, domElement, true);\n }\n\n if (this._flagFill) {\n changed.fill = this._fill && this._fill.id\n ? 'url(#' + this._fill.id + ')' : this._fill;\n }\n\n if (this._stroke && this._stroke._renderer) {\n this._stroke._update();\n svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);\n }\n\n if (this._flagStroke) {\n changed.stroke = this._stroke && this._stroke.id\n ? 'url(#' + this._stroke.id + ')' : this._stroke;\n }\n\n if (this._flagLinewidth) {\n changed['stroke-width'] = this._linewidth;\n }\n\n if (this._flagOpacity) {\n changed['stroke-opacity'] = this._opacity;\n changed['fill-opacity'] = this._opacity;\n }\n\n if (this._flagClassName) {\n changed['class'] = this._className;\n }\n\n if (this._flagVisible) {\n changed.visibility = this._visible ? 'visible' : 'hidden';\n }\n\n if (this._flagCap) {\n changed['stroke-linecap'] = this._cap;\n }\n\n if (this._flagJoin) {\n changed['stroke-linejoin'] = this._join;\n }\n\n if (this._flagMiter) {\n changed['stroke-miterlimit'] = this._miter;\n }\n\n if (this.dashes && this.dashes.length > 0) {\n changed['stroke-dasharray'] = this.dashes.join(' ');\n }\n\n // If there is no attached DOM element yet,\n // create it with all necessary attributes.\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n this._renderer.elem = svg.createElement('path', changed);\n domElement.appendChild(this._renderer.elem);\n\n // Otherwise apply all pending attributes\n } else {\n svg.setAttributes(this._renderer.elem, changed);\n }\n\n if (this._flagClip) {\n\n var clip = svg.getClip(this);\n var elem = this._renderer.elem;\n\n if (this._clip) {\n elem.removeAttribute('id');\n clip.setAttribute('id', this.id);\n clip.appendChild(elem);\n } else {\n clip.removeAttribute('id');\n elem.setAttribute('id', this.id);\n this.parent._renderer.elem.appendChild(elem); // TODO: should be insertBefore\n }\n\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (this._flagMask) {\n // if (this._mask) {\n // elem.setAttribute('clip-path', 'url(#' + this._mask.id + ')');\n // } else {\n // elem.removeAttribute('clip-path');\n // }\n // }\n\n return this.flagReset();\n\n }\n\n },\n\n text: {\n\n render: function(domElement) {\n\n this._update();\n\n var changed = {};\n\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n\n if (flagMatrix) {\n changed.transform = 'matrix(' + this._matrix.toString() + ')';\n }\n\n if (this._flagFamily) {\n changed['font-family'] = this._family;\n }\n if (this._flagSize) {\n changed['font-size'] = this._size;\n }\n if (this._flagLeading) {\n changed['line-height'] = this._leading;\n }\n if (this._flagAlignment) {\n changed['text-anchor'] = svg.alignments[this._alignment] || this._alignment;\n }\n if (this._flagBaseline) {\n changed['alignment-baseline'] = changed['dominant-baseline'] = this._baseline;\n }\n if (this._flagStyle) {\n changed['font-style'] = this._style;\n }\n if (this._flagWeight) {\n changed['font-weight'] = this._weight;\n }\n if (this._flagDecoration) {\n changed['text-decoration'] = this._decoration;\n }\n if (this._fill && this._fill._renderer) {\n this._fill._update();\n svg[this._fill._renderer.type].render.call(this._fill, domElement, true);\n }\n if (this._flagFill) {\n changed.fill = this._fill && this._fill.id\n ? 'url(#' + this._fill.id + ')' : this._fill;\n }\n if (this._stroke && this._stroke._renderer) {\n this._stroke._update();\n svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);\n }\n if (this._flagStroke) {\n changed.stroke = this._stroke && this._stroke.id\n ? 'url(#' + this._stroke.id + ')' : this._stroke;\n }\n if (this._flagLinewidth) {\n changed['stroke-width'] = this._linewidth;\n }\n if (this._flagOpacity) {\n changed.opacity = this._opacity;\n }\n if (this._flagClassName) {\n changed['class'] = this._className;\n }\n if (this._flagVisible) {\n changed.visibility = this._visible ? 'visible' : 'hidden';\n }\n if (this.dashes && this.dashes.length > 0) {\n changed['stroke-dasharray'] = this.dashes.join(' ');\n }\n\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n\n this._renderer.elem = svg.createElement('text', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n } else {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._flagClip) {\n\n var clip = svg.getClip(this);\n var elem = this._renderer.elem;\n\n if (this._clip) {\n elem.removeAttribute('id');\n clip.setAttribute('id', this.id);\n clip.appendChild(elem);\n } else {\n clip.removeAttribute('id');\n elem.setAttribute('id', this.id);\n this.parent._renderer.elem.appendChild(elem); // TODO: should be insertBefore\n }\n\n }\n\n if (this._flagValue) {\n this._renderer.elem.textContent = this._value;\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'linear-gradient': {\n\n render: function(domElement, silent) {\n\n if (!silent) {\n this._update();\n }\n\n var changed = {};\n\n if (this._flagEndPoints) {\n changed.x1 = this.left._x;\n changed.y1 = this.left._y;\n changed.x2 = this.right._x;\n changed.y2 = this.right._y;\n }\n\n if (this._flagSpread) {\n changed.spreadMethod = this._spread;\n }\n\n // If there is no attached DOM element yet,\n // create it with all necessary attributes.\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n changed.gradientUnits = 'userSpaceOnUse';\n this._renderer.elem = svg.createElement('linearGradient', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n // Otherwise apply all pending attributes\n } else {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._flagStops) {\n\n var lengthChanged = this._renderer.elem.childNodes.length\n !== this.stops.length;\n\n if (lengthChanged) {\n this._renderer.elem.childNodes.length = 0;\n }\n\n for (var i = 0; i < this.stops.length; i++) {\n\n var stop = this.stops[i];\n var attrs = {};\n\n if (stop._flagOffset) {\n attrs.offset = 100 * stop._offset + '%';\n }\n if (stop._flagColor) {\n attrs['stop-color'] = stop._color;\n }\n if (stop._flagOpacity) {\n attrs['stop-opacity'] = stop._opacity;\n }\n\n if (!stop._renderer.elem) {\n stop._renderer.elem = svg.createElement('stop', attrs);\n } else {\n svg.setAttributes(stop._renderer.elem, attrs);\n }\n\n if (lengthChanged) {\n this._renderer.elem.appendChild(stop._renderer.elem);\n }\n stop.flagReset();\n\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'radial-gradient': {\n\n render: function(domElement, silent) {\n\n if (!silent) {\n this._update();\n }\n\n var changed = {};\n\n if (this._flagCenter) {\n changed.cx = this.center._x;\n changed.cy = this.center._y;\n }\n if (this._flagFocal) {\n changed.fx = this.focal._x;\n changed.fy = this.focal._y;\n }\n\n if (this._flagRadius) {\n changed.r = this._radius;\n }\n\n if (this._flagSpread) {\n changed.spreadMethod = this._spread;\n }\n\n // If there is no attached DOM element yet,\n // create it with all necessary attributes.\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n changed.gradientUnits = 'userSpaceOnUse';\n this._renderer.elem = svg.createElement('radialGradient', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n // Otherwise apply all pending attributes\n } else {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._flagStops) {\n\n var lengthChanged = this._renderer.elem.childNodes.length\n !== this.stops.length;\n\n if (lengthChanged) {\n this._renderer.elem.childNodes.length = 0;\n }\n\n for (var i = 0; i < this.stops.length; i++) {\n\n var stop = this.stops[i];\n var attrs = {};\n\n if (stop._flagOffset) {\n attrs.offset = 100 * stop._offset + '%';\n }\n if (stop._flagColor) {\n attrs['stop-color'] = stop._color;\n }\n if (stop._flagOpacity) {\n attrs['stop-opacity'] = stop._opacity;\n }\n\n if (!stop._renderer.elem) {\n stop._renderer.elem = svg.createElement('stop', attrs);\n } else {\n svg.setAttributes(stop._renderer.elem, attrs);\n }\n\n if (lengthChanged) {\n this._renderer.elem.appendChild(stop._renderer.elem);\n }\n stop.flagReset();\n\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n texture: {\n\n render: function(domElement, silent) {\n\n if (!silent) {\n this._update();\n }\n\n var changed = {};\n var styles = { x: 0, y: 0 };\n var image = this.image;\n\n if (this._flagLoaded && this.loaded) {\n\n switch (image.nodeName.toLowerCase()) {\n\n case 'canvas':\n styles.href = styles['xlink:href'] = image.toDataURL('image/png');\n break;\n case 'img':\n case 'image':\n styles.href = styles['xlink:href'] = this.src;\n break;\n\n }\n\n }\n\n if (this._flagOffset || this._flagLoaded || this._flagScale) {\n\n changed.x = this._offset.x;\n changed.y = this._offset.y;\n\n if (image) {\n\n changed.x -= image.width / 2;\n changed.y -= image.height / 2;\n\n if (this._scale instanceof Two.Vector) {\n changed.x *= this._scale.x;\n changed.y *= this._scale.y;\n } else {\n changed.x *= this._scale;\n changed.y *= this._scale;\n }\n }\n\n if (changed.x > 0) {\n changed.x *= - 1;\n }\n if (changed.y > 0) {\n changed.y *= - 1;\n }\n\n }\n\n if (this._flagScale || this._flagLoaded || this._flagRepeat) {\n\n changed.width = 0;\n changed.height = 0;\n\n if (image) {\n\n styles.width = changed.width = image.width;\n styles.height = changed.height = image.height;\n\n // TODO: Hack / Bandaid\n switch (this._repeat) {\n case 'no-repeat':\n changed.width += 1;\n changed.height += 1;\n break;\n }\n\n if (this._scale instanceof Two.Vector) {\n changed.width *= this._scale.x;\n changed.height *= this._scale.y;\n } else {\n changed.width *= this._scale;\n changed.height *= this._scale;\n }\n }\n\n }\n\n if (this._flagScale || this._flagLoaded) {\n if (!this._renderer.image) {\n this._renderer.image = svg.createElement('image', styles);\n } else if (!_.isEmpty(styles)) {\n svg.setAttributes(this._renderer.image, styles);\n }\n }\n\n if (!this._renderer.elem) {\n\n changed.id = this.id;\n changed.patternUnits = 'userSpaceOnUse';\n this._renderer.elem = svg.createElement('pattern', changed);\n domElement.defs.appendChild(this._renderer.elem);\n\n } else if (!_.isEmpty(changed)) {\n\n svg.setAttributes(this._renderer.elem, changed);\n\n }\n\n if (this._renderer.elem && this._renderer.image && !this._renderer.appended) {\n this._renderer.elem.appendChild(this._renderer.image);\n this._renderer.appended = true;\n }\n\n return this.flagReset();\n\n }\n\n }\n\n };\n\n /**\n * @class\n */\n var Renderer = Two[Two.Types.svg] = function(params) {\n\n this.domElement = params.domElement || svg.createElement('svg');\n\n this.scene = new Two.Group();\n this.scene.parent = this;\n\n this.defs = svg.createElement('defs');\n this.domElement.appendChild(this.defs);\n this.domElement.defs = this.defs;\n this.domElement.style.overflow = 'hidden';\n\n };\n\n _.extend(Renderer, {\n\n Utils: svg\n\n });\n\n _.extend(Renderer.prototype, Two.Utils.Events, {\n\n constructor: Renderer,\n\n setSize: function(width, height) {\n\n this.width = width;\n this.height = height;\n\n svg.setAttributes(this.domElement, {\n width: width,\n height: height\n });\n\n return this.trigger(Two.Events.resize, width, height);\n\n },\n\n render: function() {\n\n svg.group.render.call(this.scene, this.domElement);\n\n return this;\n\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n /**\n * Constants\n */\n var mod = Two.Utils.mod, toFixed = Two.Utils.toFixed;\n var getRatio = Two.Utils.getRatio;\n var _ = Two.Utils;\n var emptyArray = [];\n var TWO_PI = Math.PI * 2,\n max = Math.max,\n min = Math.min,\n abs = Math.abs,\n sin = Math.sin,\n cos = Math.cos,\n acos = Math.acos,\n sqrt = Math.sqrt;\n\n // Returns true if this is a non-transforming matrix\n var isDefaultMatrix = function (m) {\n return (m[0] == 1 && m[3] == 0 && m[1] == 0 && m[4] == 1 && m[2] == 0 && m[5] == 0);\n };\n\n var canvas = {\n\n isHidden: /(none|transparent)/i,\n\n alignments: {\n left: 'start',\n middle: 'center',\n right: 'end'\n },\n\n shim: function(elem, name) {\n elem.tagName = elem.nodeName = name || 'canvas';\n elem.nodeType = 1;\n elem.getAttribute = function(prop) {\n return this[prop];\n };\n elem.setAttribute = function(prop, val) {\n this[prop] = val;\n return this;\n };\n return elem;\n },\n\n group: {\n\n renderChild: function(child) {\n canvas[child._renderer.type].render.call(child, this.ctx, true, this.clip);\n },\n\n render: function(ctx) {\n\n // TODO: Add a check here to only invoke _update if need be.\n this._update();\n\n var matrix = this._matrix.elements;\n var parent = this.parent;\n this._renderer.opacity = this._opacity * (parent && parent._renderer ? parent._renderer.opacity : 1);\n\n var defaultMatrix = isDefaultMatrix(matrix);\n\n var mask = this._mask;\n // var clip = this._clip;\n\n if (!this._renderer.context) {\n this._renderer.context = {};\n }\n\n this._renderer.context.ctx = ctx;\n // this._renderer.context.clip = clip;\n\n if (!defaultMatrix) {\n ctx.save();\n ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);\n }\n\n if (mask) {\n canvas[mask._renderer.type].render.call(mask, ctx, true);\n }\n\n if (this.opacity > 0 && this.scale !== 0) {\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n canvas[child._renderer.type].render.call(child, ctx);\n }\n }\n\n if (!defaultMatrix) {\n ctx.restore();\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (clip) {\n // ctx.clip();\n // }\n\n return this.flagReset();\n\n }\n\n },\n\n path: {\n\n render: function(ctx, forced, parentClipped) {\n\n var matrix, stroke, linewidth, fill, opacity, visible, cap, join, miter,\n closed, commands, length, last, next, prev, a, b, c, d, ux, uy, vx, vy,\n ar, bl, br, cl, x, y, mask, clip, defaultMatrix, isOffset, dashes;\n\n // TODO: Add a check here to only invoke _update if need be.\n this._update();\n\n matrix = this._matrix.elements;\n stroke = this._stroke;\n linewidth = this._linewidth;\n fill = this._fill;\n opacity = this._opacity * this.parent._renderer.opacity;\n visible = this._visible;\n cap = this._cap;\n join = this._join;\n miter = this._miter;\n closed = this._closed;\n commands = this._renderer.vertices; // Commands\n length = commands.length;\n last = length - 1;\n defaultMatrix = isDefaultMatrix(matrix);\n dashes = this.dashes;\n\n // mask = this._mask;\n clip = this._clip;\n\n if (!forced && (!visible || clip)) {\n return this;\n }\n\n // Transform\n if (!defaultMatrix) {\n ctx.save();\n ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (mask) {\n // canvas[mask._renderer.type].render.call(mask, ctx, true);\n // }\n\n // Styles\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n canvas[fill._renderer.type].render.call(fill, ctx);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n canvas[stroke._renderer.type].render.call(stroke, ctx);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (miter) {\n ctx.miterLimit = miter;\n }\n if (join) {\n ctx.lineJoin = join;\n }\n if (cap) {\n ctx.lineCap = cap;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n ctx.beginPath();\n\n for (var i = 0; i < commands.length; i++) {\n\n b = commands[i];\n\n x = toFixed(b.x);\n y = toFixed(b.y);\n\n switch (b.command) {\n\n case Two.Commands.close:\n ctx.closePath();\n break;\n\n case Two.Commands.arc:\n\n var rx = b.rx;\n var ry = b.ry;\n var xAxisRotation = b.xAxisRotation;\n var largeArcFlag = b.largeArcFlag;\n var sweepFlag = b.sweepFlag;\n\n prev = closed ? mod(i - 1, length) : max(i - 1, 0);\n a = commands[prev];\n\n var ax = toFixed(a.x);\n var ay = toFixed(a.y);\n\n canvas.renderSvgArcCommand(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y);\n break;\n\n case Two.Commands.curve:\n\n prev = closed ? mod(i - 1, length) : Math.max(i - 1, 0);\n next = closed ? mod(i + 1, length) : Math.min(i + 1, last);\n\n a = commands[prev];\n c = commands[next];\n ar = (a.controls && a.controls.right) || Two.Vector.zero;\n bl = (b.controls && b.controls.left) || Two.Vector.zero;\n\n if (a._relative) {\n vx = (ar.x + toFixed(a.x));\n vy = (ar.y + toFixed(a.y));\n } else {\n vx = toFixed(ar.x);\n vy = toFixed(ar.y);\n }\n\n if (b._relative) {\n ux = (bl.x + toFixed(b.x));\n uy = (bl.y + toFixed(b.y));\n } else {\n ux = toFixed(bl.x);\n uy = toFixed(bl.y);\n }\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n if (i >= last && closed) {\n\n c = d;\n\n br = (b.controls && b.controls.right) || Two.Vector.zero;\n cl = (c.controls && c.controls.left) || Two.Vector.zero;\n\n if (b._relative) {\n vx = (br.x + toFixed(b.x));\n vy = (br.y + toFixed(b.y));\n } else {\n vx = toFixed(br.x);\n vy = toFixed(br.y);\n }\n\n if (c._relative) {\n ux = (cl.x + toFixed(c.x));\n uy = (cl.y + toFixed(c.y));\n } else {\n ux = toFixed(cl.x);\n uy = toFixed(cl.y);\n }\n\n x = toFixed(c.x);\n y = toFixed(c.y);\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n }\n\n break;\n\n case Two.Commands.line:\n ctx.lineTo(x, y);\n break;\n\n case Two.Commands.move:\n d = b;\n ctx.moveTo(x, y);\n break;\n\n }\n }\n\n // Loose ends\n\n if (closed) {\n ctx.closePath();\n }\n\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(emptyArray);\n }\n\n if (!clip && !parentClipped) {\n if (!canvas.isHidden.test(fill)) {\n isOffset = fill._renderer && fill._renderer.offset\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - fill._renderer.offset.x, - fill._renderer.offset.y);\n ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);\n }\n ctx.fill();\n if (isOffset) {\n ctx.restore();\n }\n }\n if (!canvas.isHidden.test(stroke)) {\n isOffset = stroke._renderer && stroke._renderer.offset;\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - stroke._renderer.offset.x, - stroke._renderer.offset.y);\n ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);\n ctx.lineWidth = linewidth / stroke._renderer.scale.x;\n }\n ctx.stroke();\n if (isOffset) {\n ctx.restore();\n }\n }\n }\n\n if (!defaultMatrix) {\n ctx.restore();\n }\n\n if (clip && !parentClipped) {\n ctx.clip();\n }\n\n return this.flagReset();\n\n }\n\n },\n\n text: {\n\n render: function(ctx, forced, parentClipped) {\n\n // TODO: Add a check here to only invoke _update if need be.\n this._update();\n\n var matrix = this._matrix.elements;\n var stroke = this._stroke;\n var linewidth = this._linewidth;\n var fill = this._fill;\n var opacity = this._opacity * this.parent._renderer.opacity;\n var visible = this._visible;\n var defaultMatrix = isDefaultMatrix(matrix);\n var isOffset = fill._renderer && fill._renderer.offset\n && stroke._renderer && stroke._renderer.offset;\n var dashes = this.dashes;\n\n var a, b, c, d, e, sx, sy;\n\n // mask = this._mask;\n var clip = this._clip;\n\n if (!forced && (!visible || clip)) {\n return this;\n }\n\n // Transform\n if (!defaultMatrix) {\n ctx.save();\n ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);\n }\n\n /**\n * Commented two-way functionality of clips / masks with groups and\n * polygons. Uncomment when this bug is fixed:\n * https://code.google.com/p/chromium/issues/detail?id=370951\n */\n\n // if (mask) {\n // canvas[mask._renderer.type].render.call(mask, ctx, true);\n // }\n\n if (!isOffset) {\n ctx.font = [this._style, this._weight, this._size + 'px/' +\n this._leading + 'px', this._family].join(' ');\n }\n\n ctx.textAlign = canvas.alignments[this._alignment] || this._alignment;\n ctx.textBaseline = this._baseline;\n\n // Styles\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n canvas[fill._renderer.type].render.call(fill, ctx);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n canvas[stroke._renderer.type].render.call(stroke, ctx);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n if (!clip && !parentClipped) {\n\n if (!canvas.isHidden.test(fill)) {\n\n if (fill._renderer && fill._renderer.offset) {\n\n sx = toFixed(fill._renderer.scale.x);\n sy = toFixed(fill._renderer.scale.y);\n\n ctx.save();\n ctx.translate( - toFixed(fill._renderer.offset.x),\n - toFixed(fill._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = this._size / fill._renderer.scale.y;\n b = this._leading / fill._renderer.scale.y;\n ctx.font = [this._style, this._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', this._family].join(' ');\n\n c = fill._renderer.offset.x / fill._renderer.scale.x;\n d = fill._renderer.offset.y / fill._renderer.scale.y;\n\n ctx.fillText(this.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.fillText(this.value, 0, 0);\n }\n\n }\n\n if (!canvas.isHidden.test(stroke)) {\n\n if (stroke._renderer && stroke._renderer.offset) {\n\n sx = toFixed(stroke._renderer.scale.x);\n sy = toFixed(stroke._renderer.scale.y);\n\n ctx.save();\n ctx.translate(- toFixed(stroke._renderer.offset.x),\n - toFixed(stroke._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = this._size / stroke._renderer.scale.y;\n b = this._leading / stroke._renderer.scale.y;\n ctx.font = [this._style, this._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', this._family].join(' ');\n\n c = stroke._renderer.offset.x / stroke._renderer.scale.x;\n d = stroke._renderer.offset.y / stroke._renderer.scale.y;\n e = linewidth / stroke._renderer.scale.x;\n\n ctx.lineWidth = toFixed(e);\n ctx.strokeText(this.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.strokeText(this.value, 0, 0);\n }\n }\n }\n\n if (!defaultMatrix) {\n ctx.restore();\n }\n\n // TODO: Test for text\n if (clip && !parentClipped) {\n ctx.clip();\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'linear-gradient': {\n\n render: function(ctx) {\n\n this._update();\n\n if (!this._renderer.effect || this._flagEndPoints || this._flagStops) {\n\n this._renderer.effect = ctx.createLinearGradient(\n this.left._x, this.left._y,\n this.right._x, this.right._y\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'radial-gradient': {\n\n render: function(ctx) {\n\n this._update();\n\n if (!this._renderer.effect || this._flagCenter || this._flagFocal\n || this._flagRadius || this._flagStops) {\n\n this._renderer.effect = ctx.createRadialGradient(\n this.center._x, this.center._y, 0,\n this.focal._x, this.focal._y, this._radius\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n texture: {\n\n render: function(ctx) {\n\n this._update();\n\n var image = this.image;\n var repeat;\n\n if (!this._renderer.effect || ((this._flagLoaded || this._flagImage || this._flagVideo || this._flagRepeat) && this.loaded)) {\n this._renderer.effect = ctx.createPattern(this.image, this._repeat);\n }\n\n if (this._flagOffset || this._flagLoaded || this._flagScale) {\n\n if (!(this._renderer.offset instanceof Two.Vector)) {\n this._renderer.offset = new Two.Vector();\n }\n\n this._renderer.offset.x = - this._offset.x;\n this._renderer.offset.y = - this._offset.y;\n\n if (image) {\n\n this._renderer.offset.x += image.width / 2;\n this._renderer.offset.y += image.height / 2;\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.offset.x *= this._scale.x;\n this._renderer.offset.y *= this._scale.y;\n } else {\n this._renderer.offset.x *= this._scale;\n this._renderer.offset.y *= this._scale;\n }\n }\n\n }\n\n if (this._flagScale || this._flagLoaded) {\n\n if (!(this._renderer.scale instanceof Two.Vector)) {\n this._renderer.scale = new Two.Vector();\n }\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.scale.copy(this._scale);\n } else {\n this._renderer.scale.set(this._scale, this._scale);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n renderSvgArcCommand: function(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y) {\n\n xAxisRotation = xAxisRotation * Math.PI / 180;\n\n // Ensure radii are positive\n rx = abs(rx);\n ry = abs(ry);\n\n // Compute (x1′, y1′)\n var dx2 = (ax - x) / 2.0;\n var dy2 = (ay - y) / 2.0;\n var x1p = cos(xAxisRotation) * dx2 + sin(xAxisRotation) * dy2;\n var y1p = - sin(xAxisRotation) * dx2 + cos(xAxisRotation) * dy2;\n\n // Compute (cx′, cy′)\n var rxs = rx * rx;\n var rys = ry * ry;\n var x1ps = x1p * x1p;\n var y1ps = y1p * y1p;\n\n // Ensure radii are large enough\n var cr = x1ps / rxs + y1ps / rys;\n\n if (cr > 1) {\n\n // scale up rx,ry equally so cr == 1\n var s = sqrt(cr);\n rx = s * rx;\n ry = s * ry;\n rxs = rx * rx;\n rys = ry * ry;\n\n }\n\n var dq = (rxs * y1ps + rys * x1ps);\n var pq = (rxs * rys - dq) / dq;\n var q = sqrt(max(0, pq));\n if (largeArcFlag === sweepFlag) q = - q;\n var cxp = q * rx * y1p / ry;\n var cyp = - q * ry * x1p / rx;\n\n // Step 3: Compute (cx, cy) from (cx′, cy′)\n var cx = cos(xAxisRotation) * cxp\n - sin(xAxisRotation) * cyp + (ax + x) / 2;\n var cy = sin(xAxisRotation) * cxp\n + cos(xAxisRotation) * cyp + (ay + y) / 2;\n\n // Step 4: Compute θ1 and Δθ\n var startAngle = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n var delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry,\n (- x1p - cxp) / rx, (- y1p - cyp) / ry) % TWO_PI;\n\n var endAngle = startAngle + delta;\n\n var clockwise = sweepFlag === 0;\n\n renderArcEstimate(ctx, cx, cy, rx, ry, startAngle, endAngle,\n clockwise, xAxisRotation);\n\n }\n\n };\n\n var Renderer = Two[Two.Types.canvas] = function(params) {\n // Smoothing property. Defaults to true\n // Set it to false when working with pixel art.\n // false can lead to better performance, since it would use a cheaper interpolation algorithm.\n // It might not make a big difference on GPU backed canvases.\n var smoothing = (params.smoothing !== false);\n this.domElement = params.domElement || document.createElement('canvas');\n this.ctx = this.domElement.getContext('2d');\n this.overdraw = params.overdraw || false;\n\n if (!_.isUndefined(this.ctx.imageSmoothingEnabled)) {\n this.ctx.imageSmoothingEnabled = smoothing;\n }\n\n // Everything drawn on the canvas needs to be added to the scene.\n this.scene = new Two.Group();\n this.scene.parent = this;\n };\n\n\n _.extend(Renderer, {\n\n Utils: canvas\n\n });\n\n _.extend(Renderer.prototype, Two.Utils.Events, {\n\n constructor: Renderer,\n\n setSize: function(width, height, ratio) {\n\n this.width = width;\n this.height = height;\n\n this.ratio = _.isUndefined(ratio) ? getRatio(this.ctx) : ratio;\n\n this.domElement.width = width * this.ratio;\n this.domElement.height = height * this.ratio;\n\n if (this.domElement.style) {\n _.extend(this.domElement.style, {\n width: width + 'px',\n height: height + 'px'\n });\n }\n\n return this.trigger(Two.Events.resize, width, height, ratio);\n\n },\n\n render: function() {\n\n var isOne = this.ratio === 1;\n\n if (!isOne) {\n this.ctx.save();\n this.ctx.scale(this.ratio, this.ratio);\n }\n\n if (!this.overdraw) {\n this.ctx.clearRect(0, 0, this.width, this.height);\n }\n\n canvas.group.render.call(this.scene, this.ctx);\n\n if (!isOne) {\n this.ctx.restore();\n }\n\n return this;\n\n }\n\n });\n\n function renderArcEstimate(ctx, ox, oy, rx, ry, startAngle, endAngle, clockwise, xAxisRotation) {\n\n var epsilon = Two.Utils.Curve.Tolerance.epsilon;\n var deltaAngle = endAngle - startAngle;\n var samePoints = Math.abs(deltaAngle) < epsilon;\n\n // ensures that deltaAngle is 0 .. 2 PI\n deltaAngle = mod(deltaAngle, TWO_PI);\n\n if (deltaAngle < epsilon) {\n\n if (samePoints) {\n\n deltaAngle = 0;\n\n } else {\n\n deltaAngle = TWO_PI;\n\n }\n\n }\n\n if (clockwise === true && ! samePoints) {\n\n if (deltaAngle === TWO_PI) {\n\n deltaAngle = - TWO_PI;\n\n } else {\n\n deltaAngle = deltaAngle - TWO_PI;\n\n }\n\n }\n\n for (var i = 0; i < Two.Resolution; i++) {\n\n var t = i / (Two.Resolution - 1);\n\n var angle = startAngle + t * deltaAngle;\n var x = ox + rx * Math.cos(angle);\n var y = oy + ry * Math.sin(angle);\n\n if (xAxisRotation !== 0) {\n\n var cos = Math.cos(xAxisRotation);\n var sin = Math.sin(xAxisRotation);\n\n var tx = x - ox;\n var ty = y - oy;\n\n // Rotate the point about the center of the ellipse.\n x = tx * cos - ty * sin + ox;\n y = tx * sin + ty * cos + oy;\n\n }\n\n ctx.lineTo(x, y);\n\n }\n\n }\n\n function svgAngle(ux, uy, vx, vy) {\n\n var dot = ux * vx + uy * vy;\n var len = sqrt(ux * ux + uy * uy) * sqrt(vx * vx + vy * vy);\n // floating point precision, slightly over values appear\n var ang = acos(max(-1, min(1, dot / len)));\n if ((ux * vy - uy * vx) < 0) {\n ang = - ang;\n }\n\n return ang;\n\n }\n\n function resetTransform(ctx) {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n /**\n * Constants\n */\n\n var root = Two.root,\n multiplyMatrix = Two.Matrix.Multiply,\n mod = Two.Utils.mod,\n identity = [1, 0, 0, 0, 1, 0, 0, 0, 1],\n transformation = new Two.Array(9),\n getRatio = Two.Utils.getRatio,\n getComputedMatrix = Two.Utils.getComputedMatrix,\n toFixed = Two.Utils.toFixed,\n CanvasUtils = Two[Two.Types.canvas].Utils,\n _ = Two.Utils;\n\n var webgl = {\n\n isHidden: /(none|transparent)/i,\n\n canvas: (root.document ? root.document.createElement('canvas') : { getContext: _.identity }),\n\n alignments: {\n left: 'start',\n middle: 'center',\n right: 'end'\n },\n\n matrix: new Two.Matrix(),\n\n uv: new Two.Array([\n 0, 0,\n 1, 0,\n 0, 1,\n 0, 1,\n 1, 0,\n 1, 1\n ]),\n\n group: {\n\n removeChild: function(child, gl) {\n if (child.children) {\n for (var i = 0; i < child.children.length; i++) {\n webgl.group.removeChild(child.children[i], gl);\n }\n return;\n }\n // Deallocate texture to free up gl memory.\n gl.deleteTexture(child._renderer.texture);\n delete child._renderer.texture;\n },\n\n renderChild: function(child) {\n webgl[child._renderer.type].render.call(child, this.gl, this.program);\n },\n\n render: function(gl, program) {\n\n this._update();\n\n var parent = this.parent;\n var flagParentMatrix = (parent._matrix && parent._matrix.manual) || parent._flagMatrix;\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n\n if (flagParentMatrix || flagMatrix) {\n\n if (!this._renderer.matrix) {\n this._renderer.matrix = new Two.Array(9);\n }\n\n // Reduce amount of object / array creation / deletion\n this._matrix.toArray(true, transformation);\n\n multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);\n this._renderer.scale = this._scale * parent._renderer.scale;\n\n if (flagParentMatrix) {\n this._flagMatrix = true;\n }\n\n }\n\n if (this._mask) {\n\n gl.enable(gl.STENCIL_TEST);\n gl.stencilFunc(gl.ALWAYS, 1, 1);\n\n gl.colorMask(false, false, false, true);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);\n\n webgl[this._mask._renderer.type].render.call(this._mask, gl, program, this);\n\n gl.colorMask(true, true, true, true);\n gl.stencilFunc(gl.NOTEQUAL, 0, 1);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n\n }\n\n this._flagOpacity = parent._flagOpacity || this._flagOpacity;\n\n this._renderer.opacity = this._opacity\n * (parent && parent._renderer ? parent._renderer.opacity : 1);\n\n if (this._flagSubtractions) {\n for (var i = 0; i < this.subtractions.length; i++) {\n webgl.group.removeChild(this.subtractions[i], gl);\n }\n }\n\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n webgl[child._renderer.type].render.call(child, gl, program);\n }\n\n this.children.forEach(webgl.group.renderChild, {\n gl: gl,\n program: program\n });\n\n if (this._mask) {\n\n gl.colorMask(false, false, false, false);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);\n\n webgl[this._mask._renderer.type].render.call(this._mask, gl, program, this);\n\n gl.colorMask(true, true, true, true);\n gl.stencilFunc(gl.NOTEQUAL, 0, 1);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n\n gl.disable(gl.STENCIL_TEST);\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n path: {\n\n updateCanvas: function(elem) {\n\n var next, prev, a, c, ux, uy, vx, vy, ar, bl, br, cl, x, y;\n var isOffset;\n\n var commands = elem._renderer.vertices;\n var canvas = this.canvas;\n var ctx = this.ctx;\n\n // Styles\n var scale = elem._renderer.scale;\n var stroke = elem._stroke;\n var linewidth = elem._linewidth;\n var fill = elem._fill;\n var opacity = elem._renderer.opacity || elem._opacity;\n var cap = elem._cap;\n var join = elem._join;\n var miter = elem._miter;\n var closed = elem._closed;\n var dashes = elem.dashes;\n var length = commands.length;\n var last = length - 1;\n\n canvas.width = Math.max(Math.ceil(elem._renderer.rect.width * scale), 1);\n canvas.height = Math.max(Math.ceil(elem._renderer.rect.height * scale), 1);\n\n var centroid = elem._renderer.rect.centroid;\n var cx = centroid.x;\n var cy = centroid.y;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n webgl[fill._renderer.type].render.call(fill, ctx, elem);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n webgl[stroke._renderer.type].render.call(stroke, ctx, elem);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (miter) {\n ctx.miterLimit = miter;\n }\n if (join) {\n ctx.lineJoin = join;\n }\n if (cap) {\n ctx.lineCap = cap;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n var d;\n ctx.save();\n ctx.scale(scale, scale);\n ctx.translate(cx, cy);\n\n ctx.beginPath();\n for (var i = 0; i < commands.length; i++) {\n\n var b = commands[i];\n\n x = toFixed(b.x);\n y = toFixed(b.y);\n\n switch (b.command) {\n\n case Two.Commands.close:\n ctx.closePath();\n break;\n\n case Two.Commands.arc:\n\n var rx = b.rx;\n var ry = b.ry;\n var xAxisRotation = b.xAxisRotation;\n var largeArcFlag = b.largeArcFlag;\n var sweepFlag = b.sweepFlag;\n\n prev = closed ? mod(i - 1, length) : max(i - 1, 0);\n a = commands[prev];\n\n var ax = toFixed(a.x);\n var ay = toFixed(a.y);\n\n CanvasUtils.renderSvgArcCommand(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y);\n break;\n\n case Two.Commands.curve:\n\n prev = closed ? mod(i - 1, length) : Math.max(i - 1, 0);\n next = closed ? mod(i + 1, length) : Math.min(i + 1, last);\n\n a = commands[prev];\n c = commands[next];\n ar = (a.controls && a.controls.right) || Two.Vector.zero;\n bl = (b.controls && b.controls.left) || Two.Vector.zero;\n\n if (a._relative) {\n vx = toFixed((ar.x + a.x));\n vy = toFixed((ar.y + a.y));\n } else {\n vx = toFixed(ar.x);\n vy = toFixed(ar.y);\n }\n\n if (b._relative) {\n ux = toFixed((bl.x + b.x));\n uy = toFixed((bl.y + b.y));\n } else {\n ux = toFixed(bl.x);\n uy = toFixed(bl.y);\n }\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n if (i >= last && closed) {\n\n c = d;\n\n br = (b.controls && b.controls.right) || Two.Vector.zero;\n cl = (c.controls && c.controls.left) || Two.Vector.zero;\n\n if (b._relative) {\n vx = toFixed((br.x + b.x));\n vy = toFixed((br.y + b.y));\n } else {\n vx = toFixed(br.x);\n vy = toFixed(br.y);\n }\n\n if (c._relative) {\n ux = toFixed((cl.x + c.x));\n uy = toFixed((cl.y + c.y));\n } else {\n ux = toFixed(cl.x);\n uy = toFixed(cl.y);\n }\n\n x = toFixed(c.x);\n y = toFixed(c.y);\n\n ctx.bezierCurveTo(vx, vy, ux, uy, x, y);\n\n }\n\n break;\n\n case Two.Commands.line:\n ctx.lineTo(x, y);\n break;\n\n case Two.Commands.move:\n d = b;\n ctx.moveTo(x, y);\n break;\n\n }\n\n }\n\n // Loose ends\n\n if (closed) {\n ctx.closePath();\n }\n\n if (!webgl.isHidden.test(fill)) {\n isOffset = fill._renderer && fill._renderer.offset\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - fill._renderer.offset.x, - fill._renderer.offset.y);\n ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);\n }\n ctx.fill();\n if (isOffset) {\n ctx.restore();\n }\n }\n\n if (!webgl.isHidden.test(stroke)) {\n isOffset = stroke._renderer && stroke._renderer.offset;\n if (isOffset) {\n ctx.save();\n ctx.translate(\n - stroke._renderer.offset.x, - stroke._renderer.offset.y);\n ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);\n ctx.lineWidth = linewidth / stroke._renderer.scale.x;\n }\n ctx.stroke();\n if (isOffset) {\n ctx.restore();\n }\n }\n\n ctx.restore();\n\n },\n\n /**\n * Returns the rect of a set of verts. Typically takes vertices that are\n * \"centered\" around 0 and returns them to be anchored upper-left.\n */\n getBoundingClientRect: function(vertices, border, rect) {\n\n var left = Infinity, right = -Infinity,\n top = Infinity, bottom = -Infinity,\n width, height;\n\n vertices.forEach(function(v) {\n\n var x = v.x, y = v.y, controls = v.controls;\n var a, b, c, d, cl, cr;\n\n top = Math.min(y, top);\n left = Math.min(x, left);\n right = Math.max(x, right);\n bottom = Math.max(y, bottom);\n\n if (!v.controls) {\n return;\n }\n\n cl = controls.left;\n cr = controls.right;\n\n if (!cl || !cr) {\n return;\n }\n\n a = v._relative ? cl.x + x : cl.x;\n b = v._relative ? cl.y + y : cl.y;\n c = v._relative ? cr.x + x : cr.x;\n d = v._relative ? cr.y + y : cr.y;\n\n if (!a || !b || !c || !d) {\n return;\n }\n\n top = Math.min(b, d, top);\n left = Math.min(a, c, left);\n right = Math.max(a, c, right);\n bottom = Math.max(b, d, bottom);\n\n });\n\n // Expand borders\n\n if (_.isNumber(border)) {\n top -= border;\n left -= border;\n right += border;\n bottom += border;\n }\n\n width = right - left;\n height = bottom - top;\n\n rect.top = top;\n rect.left = left;\n rect.right = right;\n rect.bottom = bottom;\n rect.width = width;\n rect.height = height;\n\n if (!rect.centroid) {\n rect.centroid = {};\n }\n\n rect.centroid.x = - left;\n rect.centroid.y = - top;\n\n },\n\n render: function(gl, program, forcedParent) {\n\n if (!this._visible || !this._opacity) {\n return this;\n }\n\n this._update();\n\n // Calculate what changed\n\n var parent = this.parent;\n var flagParentMatrix = parent._matrix.manual || parent._flagMatrix;\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n var flagTexture = this._flagVertices || this._flagFill\n || (this._fill instanceof Two.LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints))\n || (this._fill instanceof Two.RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal))\n || (this._fill instanceof Two.Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale))\n || (this._stroke instanceof Two.LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints))\n || (this._stroke instanceof Two.RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal))\n || (this._stroke instanceof Two.Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale))\n || this._flagStroke || this._flagLinewidth || this._flagOpacity\n || parent._flagOpacity || this._flagVisible || this._flagCap\n || this._flagJoin || this._flagMiter || this._flagScale\n || (this.dashes && this.dashes.length > 0)\n || !this._renderer.texture;\n\n if (flagParentMatrix || flagMatrix) {\n\n if (!this._renderer.matrix) {\n this._renderer.matrix = new Two.Array(9);\n }\n\n // Reduce amount of object / array creation / deletion\n\n this._matrix.toArray(true, transformation);\n\n multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);\n this._renderer.scale = this._scale * parent._renderer.scale;\n\n }\n\n if (flagTexture) {\n\n if (!this._renderer.rect) {\n this._renderer.rect = {};\n }\n\n if (!this._renderer.triangles) {\n this._renderer.triangles = new Two.Array(12);\n }\n\n this._renderer.opacity = this._opacity * parent._renderer.opacity;\n\n webgl.path.getBoundingClientRect(this._renderer.vertices, this._linewidth, this._renderer.rect);\n webgl.getTriangles(this._renderer.rect, this._renderer.triangles);\n\n webgl.updateBuffer.call(webgl, gl, this, program);\n webgl.updateTexture.call(webgl, gl, this);\n\n } else {\n\n // We still need to update child Two elements on the fill and\n // stroke properties.\n if (!_.isString(this._fill)) {\n this._fill._update();\n }\n if (!_.isString(this._stroke)) {\n this._stroke._update();\n }\n\n }\n\n // if (this._mask) {\n // webgl[this._mask._renderer.type].render.call(mask, gl, program, this);\n // }\n\n if (this._clip && !forcedParent) {\n return;\n }\n\n // Draw Texture\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.textureCoordsBuffer);\n\n gl.vertexAttribPointer(program.textureCoords, 2, gl.FLOAT, false, 0, 0);\n\n gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);\n\n\n // Draw Rect\n\n gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.buffer);\n\n gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n return this.flagReset();\n\n }\n\n },\n\n text: {\n\n updateCanvas: function(elem) {\n\n var canvas = this.canvas;\n var ctx = this.ctx;\n\n // Styles\n var scale = elem._renderer.scale;\n var stroke = elem._stroke;\n var linewidth = elem._linewidth * scale;\n var fill = elem._fill;\n var opacity = elem._renderer.opacity || elem._opacity;\n var dashes = elem.dashes;\n\n canvas.width = Math.max(Math.ceil(elem._renderer.rect.width * scale), 1);\n canvas.height = Math.max(Math.ceil(elem._renderer.rect.height * scale), 1);\n\n var centroid = elem._renderer.rect.centroid;\n var cx = centroid.x;\n var cy = centroid.y;\n\n var a, b, c, d, e, sx, sy;\n var isOffset = fill._renderer && fill._renderer.offset\n && stroke._renderer && stroke._renderer.offset;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (!isOffset) {\n ctx.font = [elem._style, elem._weight, elem._size + 'px/' +\n elem._leading + 'px', elem._family].join(' ');\n }\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n // Styles\n if (fill) {\n if (_.isString(fill)) {\n ctx.fillStyle = fill;\n } else {\n webgl[fill._renderer.type].render.call(fill, ctx, elem);\n ctx.fillStyle = fill._renderer.effect;\n }\n }\n if (stroke) {\n if (_.isString(stroke)) {\n ctx.strokeStyle = stroke;\n } else {\n webgl[stroke._renderer.type].render.call(stroke, ctx, elem);\n ctx.strokeStyle = stroke._renderer.effect;\n }\n }\n if (linewidth) {\n ctx.lineWidth = linewidth;\n }\n if (_.isNumber(opacity)) {\n ctx.globalAlpha = opacity;\n }\n if (dashes && dashes.length > 0) {\n ctx.setLineDash(dashes);\n }\n\n ctx.save();\n ctx.scale(scale, scale);\n ctx.translate(cx, cy);\n\n if (!webgl.isHidden.test(fill)) {\n\n if (fill._renderer && fill._renderer.offset) {\n\n sx = toFixed(fill._renderer.scale.x);\n sy = toFixed(fill._renderer.scale.y);\n\n ctx.save();\n ctx.translate( - toFixed(fill._renderer.offset.x),\n - toFixed(fill._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = elem._size / fill._renderer.scale.y;\n b = elem._leading / fill._renderer.scale.y;\n ctx.font = [elem._style, elem._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', elem._family].join(' ');\n\n c = fill._renderer.offset.x / fill._renderer.scale.x;\n d = fill._renderer.offset.y / fill._renderer.scale.y;\n\n ctx.fillText(elem.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.fillText(elem.value, 0, 0);\n }\n\n }\n\n if (!webgl.isHidden.test(stroke)) {\n\n if (stroke._renderer && stroke._renderer.offset) {\n\n sx = toFixed(stroke._renderer.scale.x);\n sy = toFixed(stroke._renderer.scale.y);\n\n ctx.save();\n ctx.translate(- toFixed(stroke._renderer.offset.x),\n - toFixed(stroke._renderer.offset.y));\n ctx.scale(sx, sy);\n\n a = elem._size / stroke._renderer.scale.y;\n b = elem._leading / stroke._renderer.scale.y;\n ctx.font = [elem._style, elem._weight, toFixed(a) + 'px/',\n toFixed(b) + 'px', elem._family].join(' ');\n\n c = stroke._renderer.offset.x / stroke._renderer.scale.x;\n d = stroke._renderer.offset.y / stroke._renderer.scale.y;\n e = linewidth / stroke._renderer.scale.x;\n\n ctx.lineWidth = toFixed(e);\n ctx.strokeText(elem.value, toFixed(c), toFixed(d));\n ctx.restore();\n\n } else {\n ctx.strokeText(elem.value, 0, 0);\n }\n\n }\n\n ctx.restore();\n\n },\n\n getBoundingClientRect: function(elem, rect) {\n\n var ctx = webgl.ctx;\n\n ctx.font = [elem._style, elem._weight, elem._size + 'px/' +\n elem._leading + 'px', elem._family].join(' ');\n\n ctx.textAlign = 'center';\n ctx.textBaseline = elem._baseline;\n\n // TODO: Estimate this better\n var width = ctx.measureText(elem._value).width;\n var height = Math.max(elem._size || elem._leading);\n\n if (this._linewidth && !webgl.isHidden.test(this._stroke)) {\n // width += this._linewidth; // TODO: Not sure if the `measure` calcs this.\n height += this._linewidth;\n }\n\n var w = width / 2;\n var h = height / 2;\n\n switch (webgl.alignments[elem._alignment] || elem._alignment) {\n\n case webgl.alignments.left:\n rect.left = 0;\n rect.right = width;\n break;\n case webgl.alignments.right:\n rect.left = - width;\n rect.right = 0;\n break;\n default:\n rect.left = - w;\n rect.right = w;\n }\n\n // TODO: Gradients aren't inherited...\n switch (elem._baseline) {\n case 'bottom':\n rect.top = - height;\n rect.bottom = 0;\n break;\n case 'top':\n rect.top = 0;\n rect.bottom = height;\n break;\n default:\n rect.top = - h;\n rect.bottom = h;\n }\n\n rect.width = width;\n rect.height = height;\n\n if (!rect.centroid) {\n rect.centroid = {};\n }\n\n // TODO:\n rect.centroid.x = w;\n rect.centroid.y = h;\n\n },\n\n render: function(gl, program, forcedParent) {\n\n if (!this._visible || !this._opacity) {\n return this;\n }\n\n this._update();\n\n // Calculate what changed\n\n var parent = this.parent;\n var flagParentMatrix = parent._matrix.manual || parent._flagMatrix;\n var flagMatrix = this._matrix.manual || this._flagMatrix;\n var flagTexture = this._flagVertices || this._flagFill\n || (this._fill instanceof Two.LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints))\n || (this._fill instanceof Two.RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal))\n || (this._fill instanceof Two.Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale))\n || (this._stroke instanceof Two.LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints))\n || (this._stroke instanceof Two.RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal))\n || (this._stroke instanceof Two.Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale))\n || this._flagStroke || this._flagLinewidth || this._flagOpacity\n || parent._flagOpacity || this._flagVisible || this._flagScale\n || this._flagValue || this._flagFamily || this._flagSize\n || this._flagLeading || this._flagAlignment || this._flagBaseline\n || this._flagStyle || this._flagWeight || this._flagDecoration\n || (this.dashes && this.dashes.length > 0)\n || !this._renderer.texture;\n\n if (flagParentMatrix || flagMatrix) {\n\n if (!this._renderer.matrix) {\n this._renderer.matrix = new Two.Array(9);\n }\n\n // Reduce amount of object / array creation / deletion\n\n this._matrix.toArray(true, transformation);\n\n multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);\n this._renderer.scale = this._scale * parent._renderer.scale;\n\n }\n\n if (flagTexture) {\n\n if (!this._renderer.rect) {\n this._renderer.rect = {};\n }\n\n if (!this._renderer.triangles) {\n this._renderer.triangles = new Two.Array(12);\n }\n\n this._renderer.opacity = this._opacity * parent._renderer.opacity;\n\n webgl.text.getBoundingClientRect(this, this._renderer.rect);\n webgl.getTriangles(this._renderer.rect, this._renderer.triangles);\n\n webgl.updateBuffer.call(webgl, gl, this, program);\n webgl.updateTexture.call(webgl, gl, this);\n\n } else {\n\n // We still need to update child Two elements on the fill and\n // stroke properties.\n if (!_.isString(this._fill)) {\n this._fill._update();\n }\n if (!_.isString(this._stroke)) {\n this._stroke._update();\n }\n\n }\n\n // if (this._mask) {\n // webgl[this._mask._renderer.type].render.call(mask, gl, program, this);\n // }\n\n if (this._clip && !forcedParent) {\n return;\n }\n\n // Draw Texture\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.textureCoordsBuffer);\n\n gl.vertexAttribPointer(program.textureCoords, 2, gl.FLOAT, false, 0, 0);\n\n gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);\n\n\n // Draw Rect\n\n gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.buffer);\n\n gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n return this.flagReset();\n\n }\n\n },\n\n 'linear-gradient': {\n\n render: function(ctx, elem) {\n\n if (!ctx.canvas.getContext('2d')) {\n return;\n }\n\n this._update();\n\n if (!this._renderer.effect || this._flagEndPoints || this._flagStops) {\n\n this._renderer.effect = ctx.createLinearGradient(\n this.left._x, this.left._y,\n this.right._x, this.right._y\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n 'radial-gradient': {\n\n render: function(ctx, elem) {\n\n if (!ctx.canvas.getContext('2d')) {\n return;\n }\n\n this._update();\n\n if (!this._renderer.effect || this._flagCenter || this._flagFocal\n || this._flagRadius || this._flagStops) {\n\n this._renderer.effect = ctx.createRadialGradient(\n this.center._x, this.center._y, 0,\n this.focal._x, this.focal._y, this._radius\n );\n\n for (var i = 0; i < this.stops.length; i++) {\n var stop = this.stops[i];\n this._renderer.effect.addColorStop(stop._offset, stop._color);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n texture: {\n\n render: function(ctx, elem) {\n\n if (!ctx.canvas.getContext('2d')) {\n return;\n }\n\n this._update();\n\n var image = this.image;\n var repeat;\n\n if (((this._flagLoaded || this._flagImage || this._flagVideo || this._flagRepeat) && this.loaded)) {\n this._renderer.effect = ctx.createPattern(image, this._repeat);\n } else if (!this._renderer.effect) {\n return this.flagReset();\n }\n\n if (this._flagOffset || this._flagLoaded || this._flagScale) {\n\n if (!(this._renderer.offset instanceof Two.Vector)) {\n this._renderer.offset = new Two.Vector();\n }\n\n this._renderer.offset.x = - this._offset.x;\n this._renderer.offset.y = - this._offset.y;\n\n if (image) {\n\n this._renderer.offset.x += image.width / 2;\n this._renderer.offset.y += image.height / 2;\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.offset.x *= this._scale.x;\n this._renderer.offset.y *= this._scale.y;\n } else {\n this._renderer.offset.x *= this._scale;\n this._renderer.offset.y *= this._scale;\n }\n }\n\n }\n\n if (this._flagScale || this._flagLoaded) {\n\n if (!(this._renderer.scale instanceof Two.Vector)) {\n this._renderer.scale = new Two.Vector();\n }\n\n if (this._scale instanceof Two.Vector) {\n this._renderer.scale.copy(this._scale);\n } else {\n this._renderer.scale.set(this._scale, this._scale);\n }\n\n }\n\n return this.flagReset();\n\n }\n\n },\n\n getTriangles: function(rect, triangles) {\n\n var top = rect.top,\n left = rect.left,\n right = rect.right,\n bottom = rect.bottom;\n\n // First Triangle\n\n triangles[0] = left;\n triangles[1] = top;\n\n triangles[2] = right;\n triangles[3] = top;\n\n triangles[4] = left;\n triangles[5] = bottom;\n\n // Second Triangle\n\n triangles[6] = left;\n triangles[7] = bottom;\n\n triangles[8] = right;\n triangles[9] = top;\n\n triangles[10] = right;\n triangles[11] = bottom;\n\n },\n\n updateTexture: function(gl, elem) {\n\n this[elem._renderer.type].updateCanvas.call(webgl, elem);\n\n if (elem._renderer.texture) {\n gl.deleteTexture(elem._renderer.texture);\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, elem._renderer.textureCoordsBuffer);\n\n // TODO: Is this necessary every time or can we do once?\n // TODO: Create a registry for textures\n elem._renderer.texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, elem._renderer.texture);\n\n // Set the parameters so we can render any size image.\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n // gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n if (this.canvas.width <= 0 || this.canvas.height <= 0) {\n return;\n }\n\n // Upload the image into the texture.\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.canvas);\n\n },\n\n updateBuffer: function(gl, elem, program) {\n\n if (_.isObject(elem._renderer.buffer)) {\n gl.deleteBuffer(elem._renderer.buffer);\n }\n\n elem._renderer.buffer = gl.createBuffer();\n\n gl.bindBuffer(gl.ARRAY_BUFFER, elem._renderer.buffer);\n gl.enableVertexAttribArray(program.position);\n\n gl.bufferData(gl.ARRAY_BUFFER, elem._renderer.triangles, gl.STATIC_DRAW);\n\n if (_.isObject(elem._renderer.textureCoordsBuffer)) {\n gl.deleteBuffer(elem._renderer.textureCoordsBuffer);\n }\n\n elem._renderer.textureCoordsBuffer = gl.createBuffer();\n\n gl.bindBuffer(gl.ARRAY_BUFFER, elem._renderer.textureCoordsBuffer);\n gl.enableVertexAttribArray(program.textureCoords);\n\n gl.bufferData(gl.ARRAY_BUFFER, this.uv, gl.STATIC_DRAW);\n\n },\n\n program: {\n\n create: function(gl, shaders) {\n var program, linked, error;\n program = gl.createProgram();\n _.each(shaders, function(s) {\n gl.attachShader(program, s);\n });\n\n gl.linkProgram(program);\n linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (!linked) {\n error = gl.getProgramInfoLog(program);\n gl.deleteProgram(program);\n throw new Two.Utils.Error('unable to link program: ' + error);\n }\n\n return program;\n\n }\n\n },\n\n shaders: {\n\n create: function(gl, source, type) {\n var shader, compiled, error;\n shader = gl.createShader(gl[type]);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (!compiled) {\n error = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Two.Utils.Error('unable to compile shader ' + shader + ': ' + error);\n }\n\n return shader;\n\n },\n\n types: {\n vertex: 'VERTEX_SHADER',\n fragment: 'FRAGMENT_SHADER'\n },\n\n vertex: [\n 'attribute vec2 a_position;',\n 'attribute vec2 a_textureCoords;',\n '',\n 'uniform mat3 u_matrix;',\n 'uniform vec2 u_resolution;',\n '',\n 'varying vec2 v_textureCoords;',\n '',\n 'void main() {',\n ' vec2 projected = (u_matrix * vec3(a_position, 1.0)).xy;',\n ' vec2 normal = projected / u_resolution;',\n ' vec2 clipspace = (normal * 2.0) - 1.0;',\n '',\n ' gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);',\n ' v_textureCoords = a_textureCoords;',\n '}'\n ].join('\\n'),\n\n fragment: [\n 'precision mediump float;',\n '',\n 'uniform sampler2D u_image;',\n 'varying vec2 v_textureCoords;',\n '',\n 'void main() {',\n ' gl_FragColor = texture2D(u_image, v_textureCoords);',\n '}'\n ].join('\\n')\n\n },\n\n TextureRegistry: new Two.Registry()\n\n };\n\n webgl.ctx = webgl.canvas.getContext('2d');\n\n var Renderer = Two[Two.Types.webgl] = function(options) {\n\n var params, gl, vs, fs;\n this.domElement = options.domElement || document.createElement('canvas');\n\n // Everything drawn on the canvas needs to come from the stage.\n this.scene = new Two.Group();\n this.scene.parent = this;\n\n this._renderer = {\n matrix: new Two.Array(identity),\n scale: 1,\n opacity: 1\n };\n this._flagMatrix = true;\n\n // http://games.greggman.com/game/webgl-and-alpha/\n // http://www.khronos.org/registry/webgl/specs/latest/#5.2\n params = _.defaults(options || {}, {\n antialias: false,\n alpha: true,\n premultipliedAlpha: true,\n stencil: true,\n preserveDrawingBuffer: true,\n overdraw: false\n });\n\n this.overdraw = params.overdraw;\n\n gl = this.ctx = this.domElement.getContext('webgl', params) ||\n this.domElement.getContext('experimental-webgl', params);\n\n if (!this.ctx) {\n throw new Two.Utils.Error(\n 'unable to create a webgl context. Try using another renderer.');\n }\n\n // Compile Base Shaders to draw in pixel space.\n vs = webgl.shaders.create(\n gl, webgl.shaders.vertex, webgl.shaders.types.vertex);\n fs = webgl.shaders.create(\n gl, webgl.shaders.fragment, webgl.shaders.types.fragment);\n\n this.program = webgl.program.create(gl, [vs, fs]);\n gl.useProgram(this.program);\n\n // Create and bind the drawing buffer\n\n // look up where the vertex data needs to go.\n this.program.position = gl.getAttribLocation(this.program, 'a_position');\n this.program.matrix = gl.getUniformLocation(this.program, 'u_matrix');\n this.program.textureCoords = gl.getAttribLocation(this.program, 'a_textureCoords');\n\n // Copied from Three.js WebGLRenderer\n gl.disable(gl.DEPTH_TEST);\n\n // Setup some initial statements of the gl context\n gl.enable(gl.BLEND);\n\n // https://code.google.com/p/chromium/issues/detail?id=316393\n // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, gl.TRUE);\n\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA,\n gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n };\n\n _.extend(Renderer, {\n\n Utils: webgl\n\n });\n\n _.extend(Renderer.prototype, Two.Utils.Events, {\n\n constructor: Renderer,\n\n setSize: function(width, height, ratio) {\n\n this.width = width;\n this.height = height;\n\n this.ratio = _.isUndefined(ratio) ? getRatio(this.ctx) : ratio;\n\n this.domElement.width = width * this.ratio;\n this.domElement.height = height * this.ratio;\n\n _.extend(this.domElement.style, {\n width: width + 'px',\n height: height + 'px'\n });\n\n width *= this.ratio;\n height *= this.ratio;\n\n // Set for this.stage parent scaling to account for HDPI\n this._renderer.matrix[0] = this._renderer.matrix[4] = this._renderer.scale = this.ratio;\n\n this._flagMatrix = true;\n\n this.ctx.viewport(0, 0, width, height);\n\n var resolutionLocation = this.ctx.getUniformLocation(\n this.program, 'u_resolution');\n this.ctx.uniform2f(resolutionLocation, width, height);\n\n return this.trigger(Two.Events.resize, width, height, ratio);\n\n },\n\n render: function() {\n\n var gl = this.ctx;\n\n if (!this.overdraw) {\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n }\n\n webgl.group.render.call(this.scene, gl, this.program);\n this._flagMatrix = false;\n\n return this;\n\n }\n\n });\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n /**\n * @name Two.Shape\n * @class\n * @extends Two.Utils.Events\n * @description The foundational transformation object for the Two.js scenegraph.\n */\n var Shape = Two.Shape = function() {\n\n /**\n * @name Two.Shape#_renderer\n * @property {Object}\n * @private\n * @description A private object to store relevant renderer specific variables.\n * @nota-bene With the {@link Two.SvgRenderer} you can access the underlying SVG element created via `shape._renderer.elem`.\n */\n this._renderer = {};\n this._renderer.flagMatrix = _.bind(Shape.FlagMatrix, this);\n this.isShape = true;\n\n /**\n * @name Two.Shape#id\n * @property {String} - Session specific unique identifier.\n * @nota-bene In the {@link Two.SvgRenderer} change this to change the underlying SVG element's id too.\n */\n this.id = Two.Identifier + Two.uniqueId();\n\n /**\n * @name Two.Shape#classList\n * @property {Array}\n * @description A list of class strings stored if imported / interpreted from an SVG element.\n */\n this.classList = [];\n\n /**\n * @name Two.Shape#_matrix\n * @property\n * @description The transformation matrix of the shape.\n * @nota-bene {@link Two.Shape#translation}, {@link Two.Shape#rotation}, and {@link Two.Shape#scale} apply their values to the matrix when changed. The matrix is what is sent to the renderer to be drawn.\n */\n this._matrix = new Two.Matrix();\n\n /**\n * @name Two.Shape#translation\n * @property {Two.Vector} - The x and y value for where the shape is placed relative to its parent.\n */\n this.translation = new Two.Vector();\n\n /**\n * @name Two.Shape#rotation\n * @property {Radians} - The value in radians for how much the shape is rotated relative to its parent.\n */\n this.rotation = 0;\n\n /**\n * @name Two.Shape#scale\n * @property {Number} - The value for how much the shape is scaled relative to its parent.\n * @nota-bene This value can be replaced with a {@link Two.Vector} to do non-uniform scaling. e.g: `shape.scale = new Two.Vector(2, 1);`\n */\n this.scale = 1;\n\n };\n\n _.extend(Shape, {\n\n /**\n * @name Two.Shape.FlagMatrix\n * @function\n * @description Utility function used in conjunction with event handlers to update the flagMatrix of a shape.\n */\n FlagMatrix: function() {\n this._flagMatrix = true;\n },\n\n /**\n * @name Two.Shape.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Shape` to any object. Handy if you'd like to extend the `Two.Shape` class on a custom class.\n */\n MakeObservable: function(object) {\n\n Object.defineProperty(object, 'translation', {\n enumerable: true,\n get: function() {\n return this._translation;\n },\n set: function(v) {\n if (this._translation) {\n this._translation.unbind(Two.Events.change, this._renderer.flagMatrix);\n }\n this._translation = v;\n this._translation.bind(Two.Events.change, this._renderer.flagMatrix);\n Shape.FlagMatrix.call(this);\n }\n });\n\n Object.defineProperty(object, 'rotation', {\n enumerable: true,\n get: function() {\n return this._rotation;\n },\n set: function(v) {\n this._rotation = v;\n this._flagMatrix = true;\n }\n });\n\n Object.defineProperty(object, 'scale', {\n enumerable: true,\n get: function() {\n return this._scale;\n },\n set: function(v) {\n\n if (this._scale instanceof Two.Vector) {\n this._scale.unbind(Two.Events.change, this._renderer.flagMatrix);\n }\n\n this._scale = v;\n\n if (this._scale instanceof Two.Vector) {\n this._scale.bind(Two.Events.change, this._renderer.flagMatrix);\n }\n\n this._flagMatrix = true;\n this._flagScale = true;\n\n }\n });\n\n }\n\n });\n\n _.extend(Shape.prototype, Two.Utils.Events, {\n\n // Flags\n\n /**\n * @name Two.Shape#_flagMatrix\n * @private\n * @property {Boolean} - Determines whether the matrix needs updating.\n */\n _flagMatrix: true,\n\n /**\n * @name Two.Shape#_flagScale\n * @private\n * @property {Boolean} - Determines whether the scale needs updating.\n */\n _flagScale: false,\n\n // _flagMask: false,\n // _flagClip: false,\n\n // Underlying Properties\n\n /**\n * @name Two.Shape#_translation\n * @private\n * @property {Two.Vector} - The translation values as a {@link Two.Vector}.\n */\n _translation: null,\n\n /**\n * @name Two.Shape#_rotation\n * @private\n * @property {Radians} - The rotation value in radians.\n */\n _rotation: 0,\n\n /**\n * @name Two.Shape#_translation\n * @private\n * @property {Two.Vector} - The translation values as a {@link Two.Vector}.\n */\n _scale: 1,\n\n // _mask: null,\n // _clip: false,\n\n constructor: Shape,\n\n /**\n * @name Two.Shape#addTo\n * @function\n * @param {Two.Group} group - The parent the shape adds itself to.\n * @description Convenience method to add itself to the scenegraph.\n */\n addTo: function(group) {\n group.add(this);\n return this;\n },\n\n /**\n * @name Two.Shape#clone\n * @function\n * @param {Two.Group} [parent] - Optional argument to automatically add the shape to a scenegraph.\n * @returns {Two.Shape}\n * @description Create a new `Two.Shape` with the same values as the current shape.\n */\n clone: function(parent) {\n\n var clone = new Shape();\n\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone._update();\n\n },\n\n /**\n * @name Two.Shape#_update\n * @function\n * @private\n * @param {Boolean} [bubbles=false] - Force the parent to `_update` as well.\n * @description This is called before rendering happens by the renderer. This applies all changes necessary so that rendering is up-to-date but not updated more than it needs to be.\n * @nota-bene Try not to call this method more than once a frame.\n */\n _update: function(bubbles) {\n\n if (!this._matrix.manual && this._flagMatrix) {\n\n this._matrix\n .identity()\n .translate(this.translation.x, this.translation.y);\n\n if (this._scale instanceof Two.Vector) {\n this._matrix.scale(this._scale.x, this._scale.y);\n } else {\n this._matrix.scale(this._scale);\n }\n\n this._matrix.rotate(this.rotation);\n\n }\n\n if (bubbles) {\n if (this.parent && this.parent._update) {\n this.parent._update();\n }\n }\n\n return this;\n\n },\n\n /**\n * @name Two.Shape#flagReset\n * @function\n * @private\n * @description Called internally to reset all flags. Ensures that only properties that change are updated before being sent to the renderer.\n */\n flagReset: function() {\n\n this._flagMatrix = this._flagScale = false;\n\n return this;\n\n }\n\n });\n\n Shape.MakeObservable(Shape.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Constants\n\n var min = Math.min, max = Math.max, round = Math.round,\n ceil = Math.ceil, floor = Math.floor,\n getComputedMatrix = Two.Utils.getComputedMatrix;\n\n var commands = {};\n var _ = Two.Utils;\n\n _.each(Two.Commands, function(v, k) {\n commands[k] = new RegExp(v);\n });\n\n /**\n * @name Two.Path\n * @class\n * @extends Two.Shape\n * @param {Two#Anchor[]} [vertices] - A list of Two.Anchors that represent the order and coordinates to construct the rendered shape.\n * @param {Boolean} [closed=false] - Describes whether the shape is closed or open.\n * @param {Boolean} [curved=false] - Describes whether the shape automatically calculates bezier handles for each vertex.\n * @param {Boolean} [manual=false] - Describes whether the developer controls how vertices are plotted or if Two.js automatically plots coordinates based on closed and curved booleans.\n * @description This is the primary primitive class for creating all drawable shapes in Two.js. Unless specified methods return their instance of `Two.Path` for the purpose of chaining.\n */\n var Path = Two.Path = function(vertices, closed, curved, manual) {\n\n Two.Shape.call(this);\n\n this._renderer.type = 'path';\n this._renderer.flagVertices = _.bind(Path.FlagVertices, this);\n this._renderer.bindVertices = _.bind(Path.BindVertices, this);\n this._renderer.unbindVertices = _.bind(Path.UnbindVertices, this);\n\n this._renderer.flagFill = _.bind(Path.FlagFill, this);\n this._renderer.flagStroke = _.bind(Path.FlagStroke, this);\n this._renderer.vertices = [];\n this._renderer.collection = [];\n\n /**\n * @name Two.Path#closed\n * @property {Boolean} - Determines whether a final line is drawn between the final point in the `vertices` array and the first point.\n */\n this._closed = !!closed;\n\n /**\n * @name Two.Path#curved\n * @property {Boolean} - When the path is `automatic = true` this boolean determines whether the lines between the points are curved or not.\n */\n this._curved = !!curved;\n\n /**\n * @name Two.Path#beginning\n * @property {Number} - Number between zero and one to state the beginning of where the path is rendered.\n * @description `Two.Path.beginning` is a percentage value that represents at what percentage into the path should the renderer start drawing.\n * @nota-bene This is great for animating in and out stroked paths in conjunction with {@link Two.Path#ending}.\n */\n this.beginning = 0;\n\n /**\n * @name Two.Path#ending\n * @property {Number} - Number between zero and one to state the ending of where the path is rendered.\n * @description `Two.Path.ending` is a percentage value that represents at what percentage into the path should the renderer start drawing.\n * @nota-bene This is great for animating in and out stroked paths in conjunction with {@link Two.Path#beginning}.\n */\n this.ending = 1;\n\n // Style properties\n\n /**\n * @name Two.Path#fill\n * @property {(CssColor|Two.Gradient|Two.Texture)} - The value of what the path should be filled in with.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color_value} for more information on CSS Colors.\n */\n this.fill = '#fff';\n\n /**\n * @name Two.Path#stroke\n * @property {(CssColor|Two.Gradient|Two.Texture)} - The value of what the path should be outlined in with.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color_value} for more information on CSS Colors.\n */\n this.stroke = '#000';\n\n /**\n * @name Two.Path#linewidth\n * @property {Number} - The thickness in pixels of the stroke.\n */\n this.linewidth = 1.0;\n\n /**\n * @name Two.Path#opacity\n * @property {Number} - The opaqueness of the path.\n * @nota-bene Can be used in conjunction with CSS Colors that have an alpha value.\n */\n this.opacity = 1.0;\n\n /**\n * @name Two.Path#className\n * @property {String} - A class name to be searched by in {@link Two.Group}s.\n */\n this.className = '';\n\n /**\n * @name Two.Path#visible\n * @property {Boolean} - Display the path or not.\n * @nota-bene For {@link Two.CanvasRenderer} and {@link Two.WebGLRenderer} when set to false all updating is disabled improving performance dramatically with many objects in the scene.\n */\n this.visible = true;\n\n /**\n * @name Two.Path#cap\n * @property {String}\n * @see {@link https://www.w3.org/TR/SVG11/painting.html#StrokeLinecapProperty}\n */\n this.cap = 'butt'; // Default of Adobe Illustrator\n\n /**\n * @name Two.Path#join\n * @property {String}\n * @see {@link https://www.w3.org/TR/SVG11/painting.html#StrokeLinejoinProperty}\n */\n this.join = 'miter'; // Default of Adobe Illustrator\n\n /**\n * @name Two.Path#miter\n * @property {String}\n * @see {@link https://www.w3.org/TR/SVG11/painting.html#StrokeMiterlimitProperty}\n */\n this.miter = 4; // Default of Adobe Illustrator\n\n /**\n * @name Two.Path#vertices\n * @property {Two.Anchor[]} - An ordered list of anchor points for rendering the path.\n * @description An of `Two.Anchor` objects that consist of what form the path takes.\n * @nota-bene The array when manipulating is actually a {@link Two.Utils.Collection}.\n */\n this.vertices = vertices;\n\n /**\n * @name Two.Path#automatic\n * @property {Boolean} - Determines whether or not Two.js should calculate curves, lines, and commands automatically for you or to let the developer manipulate them for themselves.\n */\n this.automatic = !manual;\n\n /**\n * @name Two.Path#dashes\n * @property {String} - List of dash and gap values.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray} for more information on the SVG stroke-dasharray attribute.\n */\n this.dashes = [];\n\n };\n\n _.extend(Path, {\n\n /**\n * @name Two.Path.Properties\n * @property {String[]} - A list of properties that are on every {@link Two.Path}.\n */\n Properties: [\n 'fill',\n 'stroke',\n 'linewidth',\n 'opacity',\n 'className',\n 'visible',\n 'cap',\n 'join',\n 'miter',\n\n 'closed',\n 'curved',\n 'automatic',\n 'beginning',\n 'ending'\n ],\n\n Utils: {\n getCurveLength: getCurveLength\n },\n\n /**\n * @name Two.Path.FlagVertices\n * @function\n * @description Cached method to let renderers know vertices have been updated on a {@link Two.Path}.\n */\n FlagVertices: function() {\n this._flagVertices = true;\n this._flagLength = true;\n if (this.parent) {\n this.parent._flagLength = true;\n }\n },\n\n /**\n * @name Two.Path.BindVertices\n * @function\n * @description Cached method to let {@link Two.Path} know vertices have been added to the instance.\n */\n BindVertices: function(items) {\n\n // This function is called a lot\n // when importing a large SVG\n var i = items.length;\n while (i--) {\n items[i].bind(Two.Events.change, this._renderer.flagVertices);\n }\n\n this._renderer.flagVertices();\n\n },\n\n /**\n * @name Two.Path.BindVertices\n * @function\n * @description Cached method to let {@link Two.Path} know vertices have been removed from the instance.\n */\n UnbindVertices: function(items) {\n\n var i = items.length;\n while (i--) {\n items[i].unbind(Two.Events.change, this._renderer.flagVertices);\n }\n\n this._renderer.flagVertices();\n\n },\n\n /**\n * @name Two.Path.FlagFill\n * @function\n * @description Cached method to let {@link Two.Path} know the fill has changed.\n */\n FlagFill: function() {\n this._flagFill = true;\n },\n\n /**\n * @name Two.Path.FlagFill\n * @function\n * @description Cached method to let {@link Two.Path} know the stroke has changed.\n */\n FlagStroke: function() {\n this._flagStroke = true;\n },\n\n /**\n * @name Two.Path.MakeObservable\n * @function\n * @param {Object} object - The object to make observable.\n * @description Convenience function to apply observable qualities of a `Two.Path` to any object. Handy if you'd like to extend the `Two.Path` class on a custom class.\n */\n MakeObservable: function(object) {\n\n Two.Shape.MakeObservable(object);\n\n // Only the 7 defined properties are flagged like this. The subsequent\n // properties behave differently and need to be hand written.\n _.each(Path.Properties.slice(2, 9), Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'fill', {\n enumerable: true,\n get: function() {\n return this._fill;\n },\n set: function(f) {\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.unbind(Two.Events.change, this._renderer.flagFill);\n }\n\n this._fill = f;\n this._flagFill = true;\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.bind(Two.Events.change, this._renderer.flagFill);\n }\n\n }\n });\n\n Object.defineProperty(object, 'stroke', {\n enumerable: true,\n get: function() {\n return this._stroke;\n },\n set: function(f) {\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.unbind(Two.Events.change, this._renderer.flagStroke);\n }\n\n this._stroke = f;\n this._flagStroke = true;\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.bind(Two.Events.change, this._renderer.flagStroke);\n }\n\n }\n });\n\n /**\n * @name Two.Path#length\n * @property {Number} - The sum of distances between all {@link Two.Path#vertices}.\n */\n Object.defineProperty(object, 'length', {\n get: function() {\n if (this._flagLength) {\n this._updateLength();\n }\n return this._length;\n }\n });\n\n Object.defineProperty(object, 'closed', {\n enumerable: true,\n get: function() {\n return this._closed;\n },\n set: function(v) {\n this._closed = !!v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'curved', {\n enumerable: true,\n get: function() {\n return this._curved;\n },\n set: function(v) {\n this._curved = !!v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'automatic', {\n enumerable: true,\n get: function() {\n return this._automatic;\n },\n set: function(v) {\n if (v === this._automatic) {\n return;\n }\n this._automatic = !!v;\n var method = this._automatic ? 'ignore' : 'listen';\n _.each(this.vertices, function(v) {\n v[method]();\n });\n }\n });\n\n Object.defineProperty(object, 'beginning', {\n enumerable: true,\n get: function() {\n return this._beginning;\n },\n set: function(v) {\n this._beginning = v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'ending', {\n enumerable: true,\n get: function() {\n return this._ending;\n },\n set: function(v) {\n this._ending = v;\n this._flagVertices = true;\n }\n });\n\n Object.defineProperty(object, 'vertices', {\n\n enumerable: true,\n\n get: function() {\n return this._collection;\n },\n\n set: function(vertices) {\n\n var updateVertices = this._renderer.flagVertices;\n var bindVertices = this._renderer.bindVertices;\n var unbindVertices = this._renderer.unbindVertices;\n\n // Remove previous listeners\n if (this._collection) {\n this._collection\n .unbind(Two.Events.insert, bindVertices)\n .unbind(Two.Events.remove, unbindVertices);\n }\n\n // Create new Collection with copy of vertices\n if (vertices instanceof Two.Utils.Collection) {\n this._collection = vertices;\n } else {\n this._collection = new Two.Utils.Collection(vertices || []);\n }\n\n\n // Listen for Collection changes and bind / unbind\n this._collection\n .bind(Two.Events.insert, bindVertices)\n .bind(Two.Events.remove, unbindVertices);\n\n // Bind Initial Vertices\n bindVertices(this._collection);\n\n }\n\n });\n\n /**\n * @name Two.Path#clip\n * @property {Two.Shape} - Object to define clipping area.\n * @nota-bene This property is currently not working becuase of SVG spec issues found here {@link https://code.google.com/p/chromium/issues/detail?id=370951}.\n */\n Object.defineProperty(object, 'clip', {\n enumerable: true,\n get: function() {\n return this._clip;\n },\n set: function(v) {\n this._clip = v;\n this._flagClip = true;\n }\n });\n\n }\n\n });\n\n _.extend(Path.prototype, Two.Shape.prototype, {\n\n // Flags\n // http://en.wikipedia.org/wiki/Flag\n\n /**\n * @name Two.Path#_flagVertices\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#vertices} need updating.\n */\n _flagVertices: true,\n\n /**\n * @name Two.Path#_flagLength\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#length} needs updating.\n */\n _flagLength: true,\n\n /**\n * @name Two.Path#_flagFill\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#fill} needs updating.\n */\n _flagFill: true,\n\n /**\n * @name Two.Path#_flagStroke\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#stroke} needs updating.\n */\n _flagStroke: true,\n\n /**\n * @name Two.Path#_flagLinewidth\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#linewidth} needs updating.\n */\n _flagLinewidth: true,\n\n /**\n * @name Two.Path#_flagOpacity\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#opacity} needs updating.\n */\n _flagOpacity: true,\n\n /**\n * @name Two.Path#_flagVisible\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#visible} needs updating.\n */\n _flagVisible: true,\n\n /**\n * @name Two.Path#_flagClassName\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#className} needs updating.\n */\n _flagClassName: true,\n\n /**\n * @name Two.Path#_flagCap\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#cap} needs updating.\n */\n _flagCap: true,\n\n /**\n * @name Two.Path#_flagJoin\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#join} needs updating.\n */\n _flagJoin: true,\n\n /**\n * @name Two.Path#_flagMiter\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#miter} needs updating.\n */\n _flagMiter: true,\n\n /**\n * @name Two.Path#_flagClip\n * @private\n * @property {Boolean} - Determines whether the {@link Two.Path#clip} needs updating.\n */\n _flagClip: false,\n\n // Underlying Properties\n\n /**\n * @name Two.Path#_length\n * @private\n * @see {@link Two.Path#length}\n */\n _length: 0,\n\n /**\n * @name Two.Path#_fill\n * @private\n * @see {@link Two.Path#fill}\n */\n _fill: '#fff',\n\n /**\n * @name Two.Path#_stroke\n * @private\n * @see {@link Two.Path#stroke}\n */\n _stroke: '#000',\n\n /**\n * @name Two.Path#_linewidth\n * @private\n * @see {@link Two.Path#linewidth}\n */\n _linewidth: 1.0,\n\n /**\n * @name Two.Path#_opacity\n * @private\n * @see {@link Two.Path#opacity}\n */\n _opacity: 1.0,\n\n /**\n * @name Two.Path#_className\n * @private\n * @see {@link Two.Path#className}\n */\n _className: '',\n\n /**\n * @name Two.Path#_visible\n * @private\n * @see {@link Two.Path#visible}\n */\n _visible: true,\n\n /**\n * @name Two.Path#_cap\n * @private\n * @see {@link Two.Path#cap}\n */\n _cap: 'round',\n\n /**\n * @name Two.Path#_join\n * @private\n * @see {@link Two.Path#join}\n */\n _join: 'round',\n\n /**\n * @name Two.Path#_miter\n * @private\n * @see {@link Two.Path#miter}\n */\n _miter: 4,\n\n /**\n * @name Two.Path#_closed\n * @private\n * @see {@link Two.Path#closed}\n */\n _closed: true,\n\n /**\n * @name Two.Path#_curved\n * @private\n * @see {@link Two.Path#curved}\n */\n _curved: false,\n\n /**\n * @name Two.Path#_automatic\n * @private\n * @see {@link Two.Path#automatic}\n */\n _automatic: true,\n\n /**\n * @name Two.Path#_beginning\n * @private\n * @see {@link Two.Path#beginning}\n */\n _beginning: 0,\n\n /**\n * @name Two.Path#_ending\n * @private\n * @see {@link Two.Path#ending}\n */\n _ending: 1.0,\n\n /**\n * @name Two.Path#_clip\n * @private\n * @see {@link Two.Path#clip}\n */\n _clip: false,\n\n constructor: Path,\n\n /**\n * @name Two.Path#clone\n * @function\n * @param {Two.Group} parent - The parent group or scene to add the clone to.\n * @returns {Two.Path}\n * @description Create a new instance of {@link Two.Path} with the same properties of the current path.\n */\n clone: function(parent) {\n\n var clone = new Path();\n\n clone.vertices = this.vertices;\n\n for (var i = 0; i < Path.Properties.length; i++) {\n var k = Path.Properties[i];\n clone[k] = this[k];\n }\n\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone._update();\n\n },\n\n /**\n * @name Two.Path#toObject\n * @function\n * @returns {Object}\n * @description Return a JSON compatible plain object that represents the path.\n */\n toObject: function() {\n\n var result = {\n vertices: _.map(this.vertices, function(v) {\n return v.toObject();\n })\n };\n\n _.each(Two.Shape.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n result.translation = this.translation.toObject();\n result.rotation = this.rotation;\n result.scale = this.scale instanceof Two.Vector ? this.scale.toObject() : this.scale;\n\n return result;\n\n },\n\n /**\n * @name Two.Path#noFill\n * @function\n * @description Short hand method to set fill to `transparent`.\n */\n noFill: function() {\n this.fill = 'transparent';\n return this;\n },\n\n /**\n * @name Two.Path#noStroke\n * @function\n * @description Short hand method to set stroke to `transparent`.\n */\n noStroke: function() {\n this.stroke = 'transparent';\n return this;\n },\n\n /**\n * @name Two.Path#corner\n * @function\n * @description Orient the vertices of the shape to the upper left-hand corner of the path.\n */\n corner: function() {\n\n var rect = this.getBoundingClientRect(true);\n\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n _.each(this.vertices, function(v) {\n v.addSelf(rect.centroid);\n });\n\n return this;\n\n },\n\n /**\n * @name Two.Path#center\n * @function\n * @description Orient the vertices of the shape to the center of the path.\n */\n center: function() {\n\n var rect = this.getBoundingClientRect(true);\n\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n _.each(this.vertices, function(v) {\n v.subSelf(rect.centroid);\n });\n\n // this.translation.addSelf(rect.centroid);\n\n return this;\n\n },\n\n /**\n * @name Two.Path#remove\n * @function\n * @description Remove self from the scene / parent.\n */\n remove: function() {\n\n if (!this.parent) {\n return this;\n }\n\n this.parent.remove(this);\n\n return this;\n\n },\n\n /**\n * @name Two.Path#getBoundingClientRect\n * @function\n * @param {Boolean} [shallow=false] - Describes whether to calculate off local matrix or world matrix.\n * @returns {Object} - Returns object with top, left, right, bottom, width, height attributes.\n * @description Return an object with top, left, right, bottom, width, and height parameters of the path.\n */\n getBoundingClientRect: function(shallow) {\n var matrix, border, l, x, y, i, v0, c0, c1, v1;\n\n var left = Infinity, right = -Infinity,\n top = Infinity, bottom = -Infinity;\n\n // TODO: Update this to not __always__ update. Just when it needs to.\n this._update(true);\n\n matrix = !!shallow ? this._matrix : getComputedMatrix(this);\n\n border = this.linewidth / 2;\n l = this._renderer.vertices.length;\n\n if (l <= 0) {\n v = matrix.multiply(0, 0, 1);\n return {\n top: v.y,\n left: v.x,\n right: v.x,\n bottom: v.y,\n width: 0,\n height: 0\n };\n }\n\n for (i = 1; i < l; i++) {\n\n v1 = this._renderer.vertices[i];\n v0 = this._renderer.vertices[i - 1];\n\n if (v0.controls && v1.controls) {\n\n if (v0.relative) {\n c0 = matrix.multiply(\n v0.controls.right.x + v0.x, v0.controls.right.y + v0.y, 1);\n } else {\n c0 = matrix.multiply(\n v0.controls.right.x, v0.controls.right.y, 1);\n }\n v0 = matrix.multiply(v0.x, v0.y, 1);\n\n if (v1.relative) {\n c1 = matrix.multiply(\n v1.controls.left.x + v1.x, v1.controls.left.y + v1.y, 1);\n } else {\n c1 = matrix.multiply(\n v1.controls.left.x, v1.controls.left.y, 1);\n }\n v1 = matrix.multiply(v1.x, v1.y, 1);\n\n var bb = Two.Utils.getCurveBoundingBox(\n v0.x, v0.y, c0.x, c0.y, c1.x, c1.y, v1.x, v1.y);\n\n top = min(bb.min.y - border, top);\n left = min(bb.min.x - border, left);\n right = max(bb.max.x + border, right);\n bottom = max(bb.max.y + border, bottom);\n\n } else {\n\n if (i <= 1) {\n\n v0 = matrix.multiply(v0.x, v0.y, 1);\n\n top = min(v0.y - border, top);\n left = min(v0.x - border, left);\n right = max(v0.x + border, right);\n bottom = max(v0.y + border, bottom);\n\n }\n\n v1 = matrix.multiply(v1.x, v1.y, 1);\n\n top = min(v1.y - border, top);\n left = min(v1.x - border, left);\n right = max(v1.x + border, right);\n bottom = max(v1.y + border, bottom);\n\n }\n\n }\n\n return {\n top: top,\n left: left,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n\n },\n\n /**\n * @name Two.Path#getPointAt\n * @function\n * @param {Boolean} t - Percentage value describing where on the Two.Path to estimate and assign coordinate values.\n * @param {Two.Vector} [obj=undefined] - Object to apply calculated x, y to. If none available returns new Object.\n * @returns {Object}\n * @description Given a float `t` from 0 to 1, return a point or assign a passed `obj`'s coordinates to that percentage on this Two.Path's curve.\n */\n getPointAt: function(t, obj) {\n\n var ia, ib, result;\n var x, x1, x2, x3, x4, y, y1, y2, y3, y4, left, right;\n var target = this.length * Math.min(Math.max(t, 0), 1);\n var length = this.vertices.length;\n var last = length - 1;\n\n var a = null;\n var b = null;\n\n for (var i = 0, l = this._lengths.length, sum = 0; i < l; i++) {\n\n if (sum + this._lengths[i] >= target) {\n\n if (this._closed) {\n ia = Two.Utils.mod(i, length);\n ib = Two.Utils.mod(i - 1, length);\n if (i === 0) {\n ia = ib;\n ib = i;\n }\n } else {\n ia = i;\n ib = Math.min(Math.max(i - 1, 0), last);\n }\n\n a = this.vertices[ia];\n b = this.vertices[ib];\n target -= sum;\n if (this._lengths[i] !== 0) {\n t = target / this._lengths[i];\n } else {\n t = 0;\n }\n\n break;\n\n }\n\n sum += this._lengths[i];\n\n }\n\n if (_.isNull(a) || _.isNull(b)) {\n return null;\n }\n\n if (!a) {\n return b;\n } else if (!b) {\n return a;\n }\n\n right = b.controls && b.controls.right;\n left = a.controls && a.controls.left;\n\n x1 = b.x;\n y1 = b.y;\n x2 = (right || b).x;\n y2 = (right || b).y;\n x3 = (left || a).x;\n y3 = (left || a).y;\n x4 = a.x;\n y4 = a.y;\n\n if (right && b.relative) {\n x2 += b.x;\n y2 += b.y;\n }\n\n if (left && a.relative) {\n x3 += a.x;\n y3 += a.y;\n }\n\n x = Two.Utils.getComponentOnCubicBezier(t, x1, x2, x3, x4);\n y = Two.Utils.getComponentOnCubicBezier(t, y1, y2, y3, y4);\n\n // Higher order points for control calculation.\n var t1x = Two.Utils.lerp(x1, x2, t);\n var t1y = Two.Utils.lerp(y1, y2, t);\n var t2x = Two.Utils.lerp(x2, x3, t);\n var t2y = Two.Utils.lerp(y2, y3, t);\n var t3x = Two.Utils.lerp(x3, x4, t);\n var t3y = Two.Utils.lerp(y3, y4, t);\n\n // Calculate the returned points control points.\n var brx = Two.Utils.lerp(t1x, t2x, t);\n var bry = Two.Utils.lerp(t1y, t2y, t);\n var alx = Two.Utils.lerp(t2x, t3x, t);\n var aly = Two.Utils.lerp(t2y, t3y, t);\n\n if (_.isObject(obj)) {\n\n obj.x = x;\n obj.y = y;\n\n if (!_.isObject(obj.controls)) {\n Two.Anchor.AppendCurveProperties(obj);\n }\n\n obj.controls.left.x = brx;\n obj.controls.left.y = bry;\n obj.controls.right.x = alx;\n obj.controls.right.y = aly;\n\n if (!_.isBoolean(obj.relative) || obj.relative) {\n obj.controls.left.x -= x;\n obj.controls.left.y -= y;\n obj.controls.right.x -= x;\n obj.controls.right.y -= y;\n }\n\n obj.t = t;\n\n return obj;\n\n }\n\n result = new Two.Anchor(\n x, y, brx - x, bry - y, alx - x, aly - y,\n this._curved ? Two.Commands.curve : Two.Commands.line\n );\n\n result.t = t;\n\n return result;\n\n },\n\n /**\n * @name Two.Path#plot\n * @function\n * @description Based on closed / curved and sorting of vertices plot where all points should be and where the respective handles should be too.\n * @nota-bene While this method is public it is internally called by {@link Two.Path#_update} when `automatic = true`.\n */\n plot: function() {\n\n if (this.curved) {\n Two.Utils.getCurveFromPoints(this._collection, this.closed);\n return this;\n }\n\n for (var i = 0; i < this._collection.length; i++) {\n this._collection[i].command = i === 0 ? Two.Commands.move : Two.Commands.line;\n }\n\n return this;\n\n },\n\n /**\n * @name Two.Path#subdivide\n * @function\n * @param {Integer} limit - How many times to recurse subdivisions.\n * @description Insert a {@link Two.Anchor} at the midpoint between every item in {@link Two.Path#vertices}.\n */\n subdivide: function(limit) {\n //TODO: DRYness (function below)\n this._update();\n\n var last = this.vertices.length - 1;\n var b = this.vertices[last];\n var closed = this._closed || this.vertices[last]._command === Two.Commands.close;\n var points = [];\n _.each(this.vertices, function(a, i) {\n\n if (i <= 0 && !closed) {\n b = a;\n return;\n }\n\n if (a.command === Two.Commands.move) {\n points.push(new Two.Anchor(b.x, b.y));\n if (i > 0) {\n points[points.length - 1].command = Two.Commands.line;\n }\n b = a;\n return;\n }\n\n var verts = getSubdivisions(a, b, limit);\n points = points.concat(verts);\n\n // Assign commands to all the verts\n _.each(verts, function(v, i) {\n if (i <= 0 && b.command === Two.Commands.move) {\n v.command = Two.Commands.move;\n } else {\n v.command = Two.Commands.line;\n }\n });\n\n if (i >= last) {\n\n // TODO: Add check if the two vectors in question are the same values.\n if (this._closed && this._automatic) {\n\n b = a;\n\n verts = getSubdivisions(a, b, limit);\n points = points.concat(verts);\n\n // Assign commands to all the verts\n _.each(verts, function(v, i) {\n if (i <= 0 && b.command === Two.Commands.move) {\n v.command = Two.Commands.move;\n } else {\n v.command = Two.Commands.line;\n }\n });\n\n } else if (closed) {\n points.push(new Two.Anchor(a.x, a.y));\n }\n\n points[points.length - 1].command = closed\n ? Two.Commands.close : Two.Commands.line;\n\n }\n\n b = a;\n\n }, this);\n\n this._automatic = false;\n this._curved = false;\n this.vertices = points;\n\n return this;\n\n },\n\n /**\n * @name Two.Path#_updateLength\n * @function\n * @private\n * @param {Integer} [limit=] -\n * @param {Boolean} [silent=false] - If set to `true` then the path isn't updated before calculation. Useful for internal use.\n * @description Recalculate the {@link Two.Path#length} value.\n */\n _updateLength: function(limit, silent) {\n //TODO: DRYness (function above)\n if (!silent) {\n this._update();\n }\n\n var length = this.vertices.length;\n var last = length - 1;\n var b = this.vertices[last];\n var closed = false;//this._closed || this.vertices[last]._command === Two.Commands.close;\n var sum = 0;\n\n if (_.isUndefined(this._lengths)) {\n this._lengths = [];\n }\n\n _.each(this.vertices, function(a, i) {\n\n if ((i <= 0 && !closed) || a.command === Two.Commands.move) {\n b = a;\n this._lengths[i] = 0;\n return;\n }\n\n this._lengths[i] = getCurveLength(a, b, limit);\n this._lengths[i] = Two.Utils.toFixed(this._lengths[i]);\n sum += this._lengths[i];\n\n if (i >= last && closed) {\n\n b = this.vertices[(i + 1) % length];\n\n this._lengths[i + 1] = getCurveLength(a, b, limit);\n this._lengths[i + 1] = Two.Utils.toFixed(this._lengths[i + 1]);\n sum += this._lengths[i + 1];\n\n }\n\n b = a;\n\n }, this);\n\n this._length = sum;\n this._flagLength = false;\n\n return this;\n\n },\n\n /**\n * @name Two.Path#_update\n * @function\n * @private\n * @param {Boolean} [bubbles=false] - Force the parent to `_update` as well.\n * @description This is called before rendering happens by the renderer. This applies all changes necessary so that rendering is up-to-date but not updated more than it needs to be.\n * @nota-bene Try not to call this method more than once a frame.\n */\n _update: function() {\n\n if (this._flagVertices) {\n\n if (this._automatic) {\n this.plot();\n }\n\n if (this._flagLength) {\n this._updateLength(undefined, true);\n }\n\n var l = this._collection.length;\n var last = l - 1;\n var closed = this._closed;\n\n var beginning = Math.min(this._beginning, this._ending);\n var ending = Math.max(this._beginning, this._ending);\n\n var bid = getIdByLength(this, beginning * this._length);\n var eid = getIdByLength(this, ending * this._length);\n\n var low = ceil(bid);\n var high = floor(eid);\n\n var left, right, prev, next, v;\n\n this._renderer.vertices.length = 0;\n\n for (var i = 0; i < l; i++) {\n\n if (this._renderer.collection.length <= i) {\n // Expected to be `relative` anchor points.\n this._renderer.collection.push(new Two.Anchor());\n }\n\n if (i > high && !right) {\n\n v = this._renderer.collection[i];\n v.copy(this._collection[i]);\n this.getPointAt(ending, v);\n v.command = this._renderer.collection[i].command;\n this._renderer.vertices.push(v);\n\n right = v;\n prev = this._collection[i - 1];\n\n // Project control over the percentage `t`\n // of the in-between point\n if (prev && prev.controls) {\n\n v.controls.right.clear();\n\n this._renderer.collection[i - 1].controls.right\n .clear()\n .lerp(prev.controls.right, v.t);\n\n }\n\n } else if (i >= low && i <= high) {\n\n v = this._renderer.collection[i]\n .copy(this._collection[i]);\n this._renderer.vertices.push(v);\n\n if (i === high && contains(this, ending)) {\n right = v;\n if (!closed && right.controls) {\n right.controls.right.clear();\n }\n } else if (i === low && contains(this, beginning)) {\n left = v;\n left.command = Two.Commands.move;\n if (!closed && left.controls) {\n left.controls.left.clear();\n }\n }\n\n }\n\n }\n\n // Prepend the trimmed point if necessary.\n if (low > 0 && !left) {\n\n i = low - 1;\n\n v = this._renderer.collection[i];\n v.copy(this._collection[i]);\n this.getPointAt(beginning, v);\n v.command = Two.Commands.move;\n this._renderer.vertices.unshift(v);\n\n left = v;\n next = this._collection[i + 1];\n\n // Project control over the percentage `t`\n // of the in-between point\n if (next && next.controls) {\n\n v.controls.left.clear();\n\n this._renderer.collection[i + 1].controls.left\n .copy(next.controls.left)\n .lerp(Two.Vector.zero, v.t);\n\n }\n\n }\n\n }\n\n Two.Shape.prototype._update.apply(this, arguments);\n\n return this;\n\n },\n\n /**\n * @name Two.Path#flagReset\n * @function\n * @private\n * @description Called internally to reset all flags. Ensures that only properties that change are updated before being sent to the renderer.\n */\n flagReset: function() {\n\n this._flagVertices = this._flagFill = this._flagStroke =\n this._flagLinewidth = this._flagOpacity = this._flagVisible =\n this._flagCap = this._flagJoin = this._flagMiter =\n this._flagClassName = this._flagClip = false;\n\n Two.Shape.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n Path.MakeObservable(Path.prototype);\n\n // Utility functions\n\n function contains(path, t) {\n\n if (t === 0 || t === 1) {\n return true;\n }\n\n var length = path._length;\n var target = length * t;\n var elapsed = 0;\n\n for (var i = 0; i < path._lengths.length; i++) {\n var dist = path._lengths[i];\n if (elapsed >= target) {\n return target - elapsed >= 0;\n }\n elapsed += dist;\n }\n\n return false;\n\n }\n\n /**\n * @protected\n * @param {Two.Path} path - The path to analyze against.\n * @param {Number} target - The target length at which to find an anchor.\n * @returns {Integer}\n * @description Return the id of an anchor based on a target length.\n */\n function getIdByLength(path, target) {\n\n var total = path._length;\n\n if (target <= 0) {\n return 0;\n } else if (target >= total) {\n return path._lengths.length - 1;\n }\n\n for (var i = 0, sum = 0; i < path._lengths.length; i++) {\n\n if (sum + path._lengths[i] >= target) {\n target -= sum;\n return Math.max(i - 1, 0) + target / path._lengths[i];\n }\n\n sum += path._lengths[i];\n\n }\n\n return - 1;\n\n }\n\n function getCurveLength(a, b, limit) {\n // TODO: DRYness\n var x1, x2, x3, x4, y1, y2, y3, y4;\n\n var right = b.controls && b.controls.right;\n var left = a.controls && a.controls.left;\n\n x1 = b.x;\n y1 = b.y;\n x2 = (right || b).x;\n y2 = (right || b).y;\n x3 = (left || a).x;\n y3 = (left || a).y;\n x4 = a.x;\n y4 = a.y;\n\n if (right && b._relative) {\n x2 += b.x;\n y2 += b.y;\n }\n\n if (left && a._relative) {\n x3 += a.x;\n y3 += a.y;\n }\n\n return Two.Utils.getCurveLength(x1, y1, x2, y2, x3, y3, x4, y4, limit);\n\n }\n\n function getSubdivisions(a, b, limit) {\n // TODO: DRYness\n var x1, x2, x3, x4, y1, y2, y3, y4;\n\n var right = b.controls && b.controls.right;\n var left = a.controls && a.controls.left;\n\n x1 = b.x;\n y1 = b.y;\n x2 = (right || b).x;\n y2 = (right || b).y;\n x3 = (left || a).x;\n y3 = (left || a).y;\n x4 = a.x;\n y4 = a.y;\n\n if (right && b._relative) {\n x2 += b.x;\n y2 += b.y;\n }\n\n if (left && a._relative) {\n x3 += a.x;\n y3 += a.y;\n }\n\n return Two.Utils.subdivide(x1, y1, x2, y2, x3, y3, x4, y4, limit);\n\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path;\n var _ = Two.Utils;\n\n var Line = Two.Line = function(x1, y1, x2, y2) {\n\n var width = x2 - x1;\n var height = y2 - y1;\n\n var w2 = width / 2;\n var h2 = height / 2;\n\n Path.call(this, [\n new Two.Anchor(x1, y1),\n new Two.Anchor(x2, y2)\n ]);\n\n this.vertices[0].command = Two.Commands.move;\n this.vertices[1].command = Two.Commands.line;\n\n this.automatic = false;\n\n };\n\n _.extend(Line.prototype, Path.prototype);\n Line.prototype.constructor = Line;\n\n Path.MakeObservable(Line.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path;\n var _ = Two.Utils;\n\n var Rectangle = Two.Rectangle = function(x, y, width, height) {\n\n Path.call(this, [\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor()\n // new Two.Anchor() // TODO: Figure out how to handle this for `beginning` / `ending` animations\n ], true, false, true);\n\n this.width = width;\n this.height = height;\n\n this.origin = new Two.Vector();\n this.translation.set(x, y);\n\n this._update();\n\n };\n\n _.extend(Rectangle, {\n\n Properties: ['width', 'height'],\n\n MakeObservable: function(object) {\n\n Path.MakeObservable(object);\n _.each(Rectangle.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'origin', {\n enumerable: true,\n get: function() {\n return this._origin;\n },\n set: function(v) {\n if (this._origin) {\n this._origin.unbind(Two.Events.change, this._renderer.flagVertices);\n }\n this._origin = v;\n this._origin.bind(Two.Events.change, this._renderer.flagVertices);\n this._renderer.flagVertices();\n }\n });\n\n }\n\n });\n\n _.extend(Rectangle.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n\n _flagWidth: 0,\n _flagHeight: 0,\n\n _origin: null,\n\n constructor: Rectangle,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight) {\n\n var xr = this._width / 2;\n var yr = this._height / 2;\n\n this.vertices[0].set(-xr, -yr).add(this._origin).command = Two.Commands.move;\n this.vertices[1].set(xr, -yr).add(this._origin).command = Two.Commands.line;\n this.vertices[2].set(xr, yr).add(this._origin).command = Two.Commands.line;\n this.vertices[3].set(-xr, yr).add(this._origin).command = Two.Commands.line;\n // FYI: Two.Sprite and Two.ImageSequence have 4 verts\n if (this.vertices[4]) {\n this.vertices[4].set(-xr, -yr).add(this._origin).command = Two.Commands.line;\n }\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Rectangle(0, 0, this.width, this.height);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Rectangle.MakeObservable(Rectangle.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, HALF_PI = Math.PI / 2;\n var cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n // Circular coefficient\n var c = (4 / 3) * Math.tan(Math.PI / 8);\n\n var Ellipse = Two.Ellipse = function(ox, oy, rx, ry, resolution) {\n\n if (!_.isNumber(ry)) {\n ry = rx;\n }\n\n var amount = resolution || 5;\n\n var points = _.map(_.range(amount), function(i) {\n return new Two.Anchor();\n }, this);\n\n Path.call(this, points, true, true, true);\n\n this.width = rx * 2;\n this.height = ry * 2;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Ellipse, {\n\n Properties: ['width', 'height'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Ellipse.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Ellipse.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n\n _flagWidth: false,\n _flagHeight: false,\n\n constructor: Ellipse,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight) {\n for (var i = 0, l = this.vertices.length, last = l - 1; i < l; i++) {\n\n var pct = i / last;\n var theta = pct * TWO_PI;\n\n var rx = this._width / 2;\n var ry = this._height / 2;\n var ct = cos(theta);\n var st = sin(theta);\n\n var x = rx * cos(theta);\n var y = ry * sin(theta);\n\n var lx = i === 0 ? 0 : rx * c * cos(theta - HALF_PI);\n var ly = i === 0 ? 0 : ry * c * sin(theta - HALF_PI);\n\n var rx = i === last ? 0 : rx * c * cos(theta + HALF_PI);\n var ry = i === last ? 0 : ry * c * sin(theta + HALF_PI);\n\n var v = this.vertices[i];\n\n v.command = i === 0 ? Two.Commands.move : Two.Commands.curve;\n v.set(x, y);\n v.controls.left.set(lx, ly);\n v.controls.right.set(rx, ry);\n\n }\n }\n\n Path.prototype._update.call(this);\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = false;\n\n Path.prototype.flagReset.call(this);\n return this;\n\n },\n\n clone: function(parent) {\n\n var rx = this.width / 2;\n var ry = this.height / 2;\n var resolution = this.vertices.length;\n var clone = new Ellipse(0, 0, rx, ry, resolution);\n\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Ellipse.MakeObservable(Ellipse.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, HALF_PI = Math.PI / 2;\n var cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n // Circular coefficient\n var c = (4 / 3) * Math.tan(Math.PI / 8);\n\n var Circle = Two.Circle = function(ox, oy, r, res) {\n\n var amount = res || 5;\n\n var points = _.map(_.range(amount), function(i) {\n return new Two.Anchor();\n }, this);\n\n Path.call(this, points, true, true, true);\n\n this.radius = r;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Circle, {\n\n Properties: ['radius'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Circle.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Circle.prototype, Path.prototype, {\n\n _radius: 0,\n _flagRadius: false,\n\n constructor: Circle,\n\n _update: function() {\n\n if (this._flagRadius) {\n for (var i = 0, l = this.vertices.length, last = l - 1; i < l; i++) {\n\n var pct = i / last;\n var theta = pct * TWO_PI;\n\n var radius = this._radius;\n var ct = cos(theta);\n var st = sin(theta);\n var rc = radius * c;\n\n var x = radius * cos(theta);\n var y = radius * sin(theta);\n\n var lx = i === 0 ? 0 : rc * cos(theta - HALF_PI);\n var ly = i === 0 ? 0 : rc * sin(theta - HALF_PI);\n\n var rx = i === last ? 0 : rc * cos(theta + HALF_PI);\n var ry = i === last ? 0 : rc * sin(theta + HALF_PI);\n\n var v = this.vertices[i];\n\n v.command = i === 0 ? Two.Commands.move : Two.Commands.curve;\n v.set(x, y);\n v.controls.left.set(lx, ly);\n v.controls.right.set(rx, ry);\n\n }\n }\n\n Path.prototype._update.call(this);\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagRadius = false;\n\n Path.prototype.flagReset.call(this);\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Circle(0, 0, this.radius, this.vertices.length);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Circle.MakeObservable(Circle.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n var Polygon = Two.Polygon = function(ox, oy, r, sides) {\n\n sides = Math.max(sides || 0, 3);\n\n Path.call(this);\n\n this.closed = true;\n this.automatic = false;\n\n this.width = r * 2;\n this.height = r * 2;\n this.sides = sides;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Polygon, {\n\n Properties: ['width', 'height', 'sides'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Polygon.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Polygon.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n _sides: 0,\n\n _flagWidth: false,\n _flagHeight: false,\n _flagSides: false,\n\n constructor: Polygon,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight || this._flagSides) {\n\n var sides = this._sides;\n var amount = sides + 1;\n var length = this.vertices.length;\n\n if (length > sides) {\n this.vertices.splice(sides - 1, length - sides);\n length = sides;\n }\n\n for (var i = 0; i < amount; i++) {\n\n var pct = (i + 0.5) / sides;\n var theta = TWO_PI * pct + Math.PI / 2;\n var x = this._width * cos(theta) / 2;\n var y = this._height * sin(theta) / 2;\n\n if (i >= length) {\n this.vertices.push(new Two.Anchor(x, y));\n } else {\n this.vertices[i].set(x, y);\n }\n\n this.vertices[i].command = i === 0\n ? Two.Commands.move : Two.Commands.line;\n\n }\n\n }\n\n Path.prototype._update.call(this);\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = this._flagSides = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Polygon(0, 0, this.radius, this.sides);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Polygon.MakeObservable(Polygon.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, PI = Math.PI, TWO_PI = Math.PI * 2, HALF_PI = Math.PI / 2,\n cos = Math.cos, sin = Math.sin, abs = Math.abs, _ = Two.Utils;\n\n var ArcSegment = Two.ArcSegment = function(ox, oy, ir, or, sa, ea, res) {\n\n var amount = res || (Two.Resolution * 3);\n var points = _.map(_.range(amount), function() {\n return new Two.Anchor();\n });\n\n Path.call(this, points, true, false, true);\n\n this.innerRadius = ir;\n this.outerRadius = or;\n\n this.startAngle = sa;\n this.endAngle = ea;\n\n this._update();\n this.translation.set(ox, oy);\n\n }\n\n _.extend(ArcSegment, {\n\n Properties: ['startAngle', 'endAngle', 'innerRadius', 'outerRadius'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(ArcSegment.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(ArcSegment.prototype, Path.prototype, {\n\n _flagStartAngle: false,\n _flagEndAngle: false,\n _flagInnerRadius: false,\n _flagOuterRadius: false,\n\n _startAngle: 0,\n _endAngle: TWO_PI,\n _innerRadius: 0,\n _outerRadius: 0,\n\n constructor: ArcSegment,\n\n _update: function() {\n\n if (this._flagStartAngle || this._flagEndAngle || this._flagInnerRadius\n || this._flagOuterRadius) {\n\n var sa = this._startAngle;\n var ea = this._endAngle;\n\n var ir = this._innerRadius;\n var or = this._outerRadius;\n\n var connected = mod(sa, TWO_PI) === mod(ea, TWO_PI);\n var punctured = ir > 0;\n\n var vertices = this.vertices;\n var length = (punctured ? vertices.length / 2 : vertices.length);\n var command, id = 0;\n\n if (connected) {\n length--;\n } else if (!punctured) {\n length -= 2;\n }\n\n /**\n * Outer Circle\n */\n for (var i = 0, last = length - 1; i < length; i++) {\n\n var pct = i / last;\n var v = vertices[id];\n var theta = pct * (ea - sa) + sa;\n var step = (ea - sa) / length;\n\n var x = or * Math.cos(theta);\n var y = or * Math.sin(theta);\n\n switch (i) {\n case 0:\n command = Two.Commands.move;\n break;\n default:\n command = Two.Commands.curve;\n }\n\n v.command = command;\n v.x = x;\n v.y = y;\n v.controls.left.clear();\n v.controls.right.clear();\n\n if (v.command === Two.Commands.curve) {\n var amp = or * step / Math.PI;\n v.controls.left.x = amp * Math.cos(theta - HALF_PI);\n v.controls.left.y = amp * Math.sin(theta - HALF_PI);\n v.controls.right.x = amp * Math.cos(theta + HALF_PI);\n v.controls.right.y = amp * Math.sin(theta + HALF_PI);\n if (i === 1) {\n v.controls.left.multiplyScalar(2);\n }\n if (i === last) {\n v.controls.right.multiplyScalar(2);\n }\n }\n\n id++;\n\n }\n\n if (punctured) {\n\n if (connected) {\n vertices[id].command = Two.Commands.close;\n id++;\n } else {\n length--;\n last = length - 1;\n }\n\n /**\n * Inner Circle\n */\n for (i = 0; i < length; i++) {\n\n pct = i / last;\n v = vertices[id];\n theta = (1 - pct) * (ea - sa) + sa;\n step = (ea - sa) / length;\n\n x = ir * Math.cos(theta);\n y = ir * Math.sin(theta);\n command = Two.Commands.curve;\n if (i <= 0) {\n command = connected ? Two.Commands.move : Two.Commands.line;\n }\n\n v.command = command;\n v.x = x;\n v.y = y;\n v.controls.left.clear();\n v.controls.right.clear();\n\n if (v.command === Two.Commands.curve) {\n amp = ir * step / Math.PI;\n v.controls.left.x = amp * Math.cos(theta + HALF_PI);\n v.controls.left.y = amp * Math.sin(theta + HALF_PI);\n v.controls.right.x = amp * Math.cos(theta - HALF_PI);\n v.controls.right.y = amp * Math.sin(theta - HALF_PI);\n if (i === 1) {\n v.controls.left.multiplyScalar(2);\n }\n if (i === last) {\n v.controls.right.multiplyScalar(2);\n }\n }\n\n id++;\n\n }\n\n // Final Point\n vertices[id].copy(vertices[0]);\n vertices[id].command = Two.Commands.line;\n\n } else if (!connected) {\n\n vertices[id].command = Two.Commands.line;\n vertices[id].x = 0;\n vertices[id].y = 0;\n id++;\n\n // Final Point\n vertices[id].copy(vertices[0]);\n vertices[id].command = Two.Commands.line;\n\n }\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n Path.prototype.flagReset.call(this);\n\n this._flagStartAngle = this._flagEndAngle\n = this._flagInnerRadius = this._flagOuterRadius = false;\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var ir = this.innerRadius;\n var or = this.outerradius;\n var sa = this.startAngle;\n var ea = this.endAngle;\n var resolution = this.vertices.length;\n\n var clone = new ArcSegment(0, 0, ir, or, sa, ea, resolution);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n ArcSegment.MakeObservable(ArcSegment.prototype);\n\n function mod(v, l) {\n while (v < 0) {\n v += l;\n }\n return v % l;\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path, TWO_PI = Math.PI * 2, cos = Math.cos, sin = Math.sin;\n var _ = Two.Utils;\n\n var Star = Two.Star = function(ox, oy, ir, or, sides) {\n\n if (arguments.length <= 3) {\n or = ir;\n ir = or / 2;\n }\n\n if (!_.isNumber(sides) || sides <= 0) {\n sides = 5;\n }\n\n var length = sides * 2;\n\n Path.call(this);\n this.closed = true;\n this.automatic = false;\n\n this.innerRadius = ir;\n this.outerRadius = or;\n this.sides = sides;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(Star, {\n\n Properties: ['innerRadius', 'outerRadius', 'sides'],\n\n MakeObservable: function(obj) {\n\n Path.MakeObservable(obj);\n _.each(Star.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n });\n\n _.extend(Star.prototype, Path.prototype, {\n\n _innerRadius: 0,\n _outerRadius: 0,\n _sides: 0,\n\n _flagInnerRadius: false,\n _flagOuterRadius: false,\n _flagSides: false,\n\n constructor: Star,\n\n _update: function() {\n\n if (this._flagInnerRadius || this._flagOuterRadius || this._flagSides) {\n\n var sides = this._sides * 2;\n var amount = sides + 1;\n var length = this.vertices.length;\n\n if (length > sides) {\n this.vertices.splice(sides - 1, length - sides);\n length = sides;\n }\n\n for (var i = 0; i < amount; i++) {\n\n var pct = (i + 0.5) / sides;\n var theta = TWO_PI * pct;\n var r = (!(i % 2) ? this._innerRadius : this._outerRadius) / 2;\n var x = r * cos(theta);\n var y = r * sin(theta);\n\n if (i >= length) {\n this.vertices.push(new Two.Anchor(x, y));\n } else {\n this.vertices[i].set(x, y);\n }\n\n this.vertices[i].command = i === 0\n ? Two.Commands.move : Two.Commands.line;\n\n }\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagInnerRadius = this._flagOuterRadius = this._flagSides = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var ir = this.innerRadius;\n var or = this.outerRadius;\n var sides = this.sides;\n\n var clone = new Star(0, 0, ir, or, sides);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n Star.MakeObservable(Star.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var Path = Two.Path;\n var _ = Two.Utils;\n\n var RoundedRectangle = Two.RoundedRectangle = function(ox, oy, width, height, radius) {\n\n if (_.isUndefined(radius)) {\n radius = Math.floor(Math.min(width, height) / 12);\n }\n\n var amount = 10;\n\n var points = _.map(_.range(amount), function(i) {\n return new Two.Anchor(0, 0, 0, 0, 0, 0,\n i === 0 ? Two.Commands.move : Two.Commands.curve);\n });\n\n // points[points.length - 1].command = Two.Commands.close;\n\n Path.call(this, points);\n\n this.closed = true;\n this.automatic = false;\n\n this._renderer.flagRadius = _.bind(RoundedRectangle.FlagRadius, this);\n\n this.width = width;\n this.height = height;\n this.radius = radius;\n\n this._update();\n this.translation.set(ox, oy);\n\n };\n\n _.extend(RoundedRectangle, {\n\n Properties: ['width', 'height'],\n\n FlagRadius: function() {\n this._flagRadius = true;\n },\n\n MakeObservable: function(object) {\n\n Path.MakeObservable(object);\n _.each(RoundedRectangle.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'radius', {\n enumerable: true,\n get: function() {\n return this._radius;\n },\n set: function(v) {\n\n if (this._radius instanceof Two.Vector) {\n this._radius.unbind(Two.Events.change, this._renderer.flagRadius);\n }\n\n this._radius = v;\n\n if (this._radius instanceof Two.Vector) {\n this._radius.bind(Two.Events.change, this._renderer.flagRadius);\n }\n\n this._flagRadius = true;\n\n }\n });\n\n }\n\n });\n\n _.extend(RoundedRectangle.prototype, Path.prototype, {\n\n _width: 0,\n _height: 0,\n _radius: 0,\n\n _flagWidth: false,\n _flagHeight: false,\n _flagRadius: false,\n\n constructor: RoundedRectangle,\n\n _update: function() {\n\n if (this._flagWidth || this._flagHeight || this._flagRadius) {\n\n var width = this._width;\n var height = this._height;\n\n var rx, ry;\n\n if (this._radius instanceof Two.Vector) {\n rx = this._radius.x;\n ry = this._radius.y;\n } else {\n rx = this._radius;\n ry = this._radius;\n }\n\n var v;\n var w = width / 2;\n var h = height / 2;\n\n v = this.vertices[0];\n v.x = - (w - rx);\n v.y = - h;\n\n // Upper Right Corner\n\n v = this.vertices[1];\n v.x = (w - rx);\n v.y = - h;\n v.controls.left.clear();\n v.controls.right.x = rx;\n v.controls.right.y = 0;\n\n v = this.vertices[2];\n v.x = w;\n v.y = - (h - ry);\n v.controls.right.clear();\n v.controls.left.clear();\n\n // Bottom Right Corner\n\n v = this.vertices[3];\n v.x = w;\n v.y = (h - ry);\n v.controls.left.clear();\n v.controls.right.x = 0;\n v.controls.right.y = ry;\n\n v = this.vertices[4];\n v.x = (w - rx);\n v.y = h;\n v.controls.right.clear();\n v.controls.left.clear();\n\n // Bottom Left Corner\n\n v = this.vertices[5];\n v.x = - (w - rx);\n v.y = h;\n v.controls.left.clear();\n v.controls.right.x = - rx;\n v.controls.right.y = 0;\n\n v = this.vertices[6];\n v.x = - w;\n v.y = (h - ry);\n v.controls.left.clear();\n v.controls.right.clear();\n\n // Upper Left Corner\n\n v = this.vertices[7];\n v.x = - w;\n v.y = - (h - ry);\n v.controls.left.clear();\n v.controls.right.x = 0;\n v.controls.right.y = - ry;\n\n v = this.vertices[8];\n v.x = - (w - rx);\n v.y = - h;\n v.controls.left.clear();\n v.controls.right.clear();\n\n v = this.vertices[9];\n v.copy(this.vertices[8]);\n\n }\n\n Path.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagWidth = this._flagHeight = this._flagRadius = false;\n Path.prototype.flagReset.call(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var width = this.width;\n var height = this.height;\n var radius = this.radius;\n\n var clone = new RoundedRectangle(0, 0, width, height, radius);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Path.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n }\n\n });\n\n RoundedRectangle.MakeObservable(RoundedRectangle.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var root = Two.root;\n var getComputedMatrix = Two.Utils.getComputedMatrix;\n var _ = Two.Utils;\n\n var canvas = getCanvas();\n var ctx = canvas.getContext('2d');\n\n /**\n * @class\n * @name Two.Text\n * @param {String} message - The String to be rendered to the scene.\n * @param {Number} [x=0] - The position in the x direction for the object.\n * @param {Number} [y=0] - The position in the y direction for the object.\n * @param {Object} [styles] - An object where styles are applied. Attribute must exist in Two.Text.Properties.\n */\n var Text = Two.Text = function(message, x, y, styles) {\n\n Two.Shape.call(this);\n\n this._renderer.type = 'text';\n this._renderer.flagFill = _.bind(Two.Text.FlagFill, this);\n this._renderer.flagStroke = _.bind(Two.Text.FlagStroke, this);\n\n this.value = message;\n\n if (_.isNumber(x)) {\n this.translation.x = x;\n }\n if (_.isNumber(y)) {\n this.translation.y = y;\n }\n\n this.dashes = [];\n\n if (!_.isObject(styles)) {\n return this;\n }\n\n _.each(Two.Text.Properties, function(property) {\n\n if (property in styles) {\n this[property] = styles[property];\n }\n\n }, this);\n\n };\n\n _.extend(Two.Text, {\n\n Ratio: 0.6,\n\n Properties: [\n 'value', 'family', 'size', 'leading', 'alignment', 'linewidth', 'style',\n 'className', 'weight', 'decoration', 'baseline', 'opacity', 'visible',\n 'fill', 'stroke',\n ],\n\n FlagFill: function() {\n this._flagFill = true;\n },\n\n FlagStroke: function() {\n this._flagStroke = true;\n },\n\n MakeObservable: function(object) {\n\n Two.Shape.MakeObservable(object);\n\n _.each(Two.Text.Properties.slice(0, 13), Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'fill', {\n enumerable: true,\n get: function() {\n return this._fill;\n },\n set: function(f) {\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.unbind(Two.Events.change, this._renderer.flagFill);\n }\n\n this._fill = f;\n this._flagFill = true;\n\n if (this._fill instanceof Two.Gradient\n || this._fill instanceof Two.LinearGradient\n || this._fill instanceof Two.RadialGradient\n || this._fill instanceof Two.Texture) {\n this._fill.bind(Two.Events.change, this._renderer.flagFill);\n }\n\n }\n });\n\n Object.defineProperty(object, 'stroke', {\n enumerable: true,\n get: function() {\n return this._stroke;\n },\n set: function(f) {\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.unbind(Two.Events.change, this._renderer.flagStroke);\n }\n\n this._stroke = f;\n this._flagStroke = true;\n\n if (this._stroke instanceof Two.Gradient\n || this._stroke instanceof Two.LinearGradient\n || this._stroke instanceof Two.RadialGradient\n || this._stroke instanceof Two.Texture) {\n this._stroke.bind(Two.Events.change, this._renderer.flagStroke);\n }\n\n }\n });\n\n Object.defineProperty(object, 'clip', {\n enumerable: true,\n get: function() {\n return this._clip;\n },\n set: function(v) {\n this._clip = v;\n this._flagClip = true;\n }\n });\n\n }\n\n });\n\n _.extend(Two.Text.prototype, Two.Shape.prototype, {\n\n // Flags\n // http://en.wikipedia.org/wiki/Flag\n\n _flagValue: true,\n _flagFamily: true,\n _flagSize: true,\n _flagLeading: true,\n _flagAlignment: true,\n _flagBaseline: true,\n _flagStyle: true,\n _flagWeight: true,\n _flagDecoration: true,\n\n _flagFill: true,\n _flagStroke: true,\n _flagLinewidth: true,\n _flagOpacity: true,\n _flagClassName: true,\n _flagVisible: true,\n\n _flagClip: false,\n\n // Underlying Properties\n\n _value: '',\n _family: 'sans-serif',\n _size: 13,\n _leading: 17,\n _alignment: 'center',\n _baseline: 'middle',\n _style: 'normal',\n _weight: 500,\n _decoration: 'none',\n\n _fill: '#000',\n _stroke: 'transparent',\n _linewidth: 1,\n _opacity: 1,\n _className: '',\n _visible: true,\n\n _clip: false,\n\n constructor: Two.Text,\n\n remove: function() {\n\n if (!this.parent) {\n return this;\n }\n\n this.parent.remove(this);\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Two.Text(this.value);\n clone.translation.copy(this.translation);\n clone.rotation = this.rotation;\n clone.scale = this.scale;\n\n _.each(Two.Text.Properties, function(property) {\n clone[property] = this[property];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone._update();\n\n },\n\n toObject: function() {\n\n var result = {\n translation: this.translation.toObject(),\n rotation: this.rotation,\n scale: this.scale\n };\n\n _.each(Two.Text.Properties, function(property) {\n result[property] = this[property];\n }, this);\n\n return result;\n\n },\n\n noStroke: function() {\n this.stroke = 'transparent';\n return this;\n },\n\n noFill: function() {\n this.fill = 'transparent';\n return this;\n },\n\n // /**\n // * A shim to not break `getBoundingClientRect` calls. TODO: Implement a\n // * way to calculate proper bounding boxes of `Two.Text`.\n // */\n getBoundingClientRect: function(shallow) {\n\n var matrix, border, l, x, y, i, v;\n var left, right, top, bottom;\n\n // TODO: Update this to not __always__ update. Just when it needs to.\n this._update(true);\n\n matrix = !!shallow ? this._matrix : getComputedMatrix(this);\n\n var height = this.leading;\n var width = this.value.length * this.size * Text.Ratio;\n\n switch (this.alignment) {\n case 'left':\n left = 0;\n right = width;\n break;\n case 'right':\n left = - width;\n right = 0;\n break;\n default:\n left = - width / 2;\n right = width / 2;\n }\n\n switch (this.baseline) {\n case 'top':\n top = 0;\n bottom = height;\n break;\n case 'bottom':\n top = - height;\n bottom = 0;\n break;\n default:\n top = - height / 2;\n bottom = height / 2;\n }\n\n v = matrix.multiply(left, top, 1);\n\n top = v.y;\n left = v.x;\n\n v = matrix.multiply(right, bottom, 1);\n\n right = v.x;\n bottom = v.y;\n\n return {\n top: top,\n left: left,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n\n },\n\n flagReset: function() {\n\n this._flagValue = this._flagFamily = this._flagSize =\n this._flagLeading = this._flagAlignment = this._flagFill =\n this._flagStroke = this._flagLinewidth = this._flagOpacity =\n this._flagVisible = this._flagClip = this._flagDecoration =\n this._flagClassName = this._flagBaseline = false;\n\n Two.Shape.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n Two.Text.MakeObservable(Two.Text.prototype);\n\n function getCanvas() {\n if (root.document) {\n return root.document.createElement('canvas');\n } else {\n console.warn('Two.js: Unable to create canvas for Two.Text measurements.');\n return {\n getContext: _.identity\n }\n }\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n var Stop = Two.Stop = function(offset, color, opacity) {\n\n this._renderer = {};\n this._renderer.type = 'stop';\n\n this.offset = _.isNumber(offset) ? offset\n : Stop.Index <= 0 ? 0 : 1;\n\n this.opacity = _.isNumber(opacity) ? opacity : 1;\n\n this.color = _.isString(color) ? color\n : Stop.Index <= 0 ? '#fff' : '#000';\n\n Stop.Index = (Stop.Index + 1) % 2;\n\n };\n\n _.extend(Stop, {\n\n Index: 0,\n\n Properties: [\n 'offset',\n 'opacity',\n 'color'\n ],\n\n MakeObservable: function(object) {\n\n _.each(Stop.Properties, function(property) {\n\n var object = this;\n var secret = '_' + property;\n var flag = '_flag' + property.charAt(0).toUpperCase() + property.slice(1);\n\n Object.defineProperty(object, property, {\n enumerable: true,\n get: function() {\n return this[secret];\n },\n set: function(v) {\n this[secret] = v;\n this[flag] = true;\n if (this.parent) {\n this.parent._flagStops = true;\n }\n }\n });\n\n }, object);\n\n }\n\n });\n\n _.extend(Stop.prototype, Two.Utils.Events, {\n\n constructor: Stop,\n\n clone: function() {\n\n var clone = new Stop();\n\n _.each(Stop.Properties, function(property) {\n clone[property] = this[property];\n }, this);\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = {};\n\n _.each(Stop.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n return result;\n\n },\n\n flagReset: function() {\n\n this._flagOffset = this._flagColor = this._flagOpacity = false;\n\n return this;\n\n }\n\n });\n\n Stop.MakeObservable(Stop.prototype);\n Stop.prototype.constructor = Stop;\n\n var Gradient = Two.Gradient = function(stops) {\n\n this._renderer = {};\n this._renderer.type = 'gradient';\n\n this.id = Two.Identifier + Two.uniqueId();\n this.classList = [];\n\n this._renderer.flagStops = _.bind(Gradient.FlagStops, this);\n this._renderer.bindStops = _.bind(Gradient.BindStops, this);\n this._renderer.unbindStops = _.bind(Gradient.UnbindStops, this);\n\n this.spread = 'pad';\n\n this.stops = stops;\n\n };\n\n _.extend(Gradient, {\n\n Stop: Stop,\n\n Properties: [\n 'spread'\n ],\n\n MakeObservable: function(object) {\n\n _.each(Gradient.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'stops', {\n\n enumerable: true,\n\n get: function() {\n return this._stops;\n },\n\n set: function(stops) {\n\n var updateStops = this._renderer.flagStops;\n var bindStops = this._renderer.bindStops;\n var unbindStops = this._renderer.unbindStops;\n\n // Remove previous listeners\n if (this._stops) {\n this._stops\n .unbind(Two.Events.insert, bindStops)\n .unbind(Two.Events.remove, unbindStops);\n }\n\n // Create new Collection with copy of Stops\n this._stops = new Two.Utils.Collection((stops || []).slice(0));\n\n // Listen for Collection changes and bind / unbind\n this._stops\n .bind(Two.Events.insert, bindStops)\n .bind(Two.Events.remove, unbindStops);\n\n // Bind Initial Stops\n bindStops(this._stops);\n\n }\n\n });\n\n },\n\n FlagStops: function() {\n this._flagStops = true;\n },\n\n BindStops: function(items) {\n\n // This function is called a lot\n // when importing a large SVG\n var i = items.length;\n while(i--) {\n items[i].bind(Two.Events.change, this._renderer.flagStops);\n items[i].parent = this;\n }\n\n this._renderer.flagStops();\n\n },\n\n UnbindStops: function(items) {\n\n var i = items.length;\n while(i--) {\n items[i].unbind(Two.Events.change, this._renderer.flagStops);\n delete items[i].parent;\n }\n\n this._renderer.flagStops();\n\n }\n\n });\n\n _.extend(Gradient.prototype, Two.Utils.Events, {\n\n _flagStops: false,\n _flagSpread: false,\n\n clone: function(parent) {\n\n var stops = _.map(this.stops, function(s) {\n return s.clone();\n });\n\n var clone = new Gradient(stops);\n\n _.each(Two.Gradient.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = {\n stops: _.map(this.stops, function(s) {\n return s.toObject();\n })\n };\n\n _.each(Gradient.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n return result;\n\n },\n\n _update: function() {\n\n if (this._flagSpread || this._flagStops) {\n this.trigger(Two.Events.change);\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagSpread = this._flagStops = false;\n\n return this;\n\n }\n\n });\n\n Gradient.MakeObservable(Gradient.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n var LinearGradient = Two.LinearGradient = function(x1, y1, x2, y2, stops) {\n\n Two.Gradient.call(this, stops);\n\n this._renderer.type = 'linear-gradient';\n\n var flagEndPoints = _.bind(LinearGradient.FlagEndPoints, this);\n this.left = new Two.Vector().bind(Two.Events.change, flagEndPoints);\n this.right = new Two.Vector().bind(Two.Events.change, flagEndPoints);\n\n if (_.isNumber(x1)) {\n this.left.x = x1;\n }\n if (_.isNumber(y1)) {\n this.left.y = y1;\n }\n if (_.isNumber(x2)) {\n this.right.x = x2;\n }\n if (_.isNumber(y2)) {\n this.right.y = y2;\n }\n\n };\n\n _.extend(LinearGradient, {\n\n Stop: Two.Gradient.Stop,\n\n MakeObservable: function(object) {\n Two.Gradient.MakeObservable(object);\n },\n\n FlagEndPoints: function() {\n this._flagEndPoints = true;\n }\n\n });\n\n _.extend(LinearGradient.prototype, Two.Gradient.prototype, {\n\n _flagEndPoints: false,\n\n constructor: LinearGradient,\n\n clone: function(parent) {\n\n var stops = _.map(this.stops, function(stop) {\n return stop.clone();\n });\n\n var clone = new LinearGradient(this.left._x, this.left._y,\n this.right._x, this.right._y, stops);\n\n _.each(Two.Gradient.Properties, function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = Two.Gradient.prototype.toObject.call(this);\n\n result.left = this.left.toObject();\n result.right = this.right.toObject();\n\n return result;\n\n },\n\n _update: function() {\n\n if (this._flagEndPoints || this._flagSpread || this._flagStops) {\n this.trigger(Two.Events.change);\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagEndPoints = false;\n\n Two.Gradient.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n LinearGradient.MakeObservable(LinearGradient.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n\n var RadialGradient = Two.RadialGradient = function(cx, cy, r, stops, fx, fy) {\n\n Two.Gradient.call(this, stops);\n\n this._renderer.type = 'radial-gradient';\n\n this.center = new Two.Vector()\n .bind(Two.Events.change, _.bind(function() {\n this._flagCenter = true;\n }, this));\n\n this.radius = _.isNumber(r) ? r : 20;\n\n this.focal = new Two.Vector()\n .bind(Two.Events.change, _.bind(function() {\n this._flagFocal = true;\n }, this));\n\n if (_.isNumber(cx)) {\n this.center.x = cx;\n }\n if (_.isNumber(cy)) {\n this.center.y = cy;\n }\n\n this.focal.copy(this.center);\n\n if (_.isNumber(fx)) {\n this.focal.x = fx;\n }\n if (_.isNumber(fy)) {\n this.focal.y = fy;\n }\n\n };\n\n _.extend(RadialGradient, {\n\n Stop: Two.Gradient.Stop,\n\n Properties: [\n 'radius'\n ],\n\n MakeObservable: function(object) {\n\n Two.Gradient.MakeObservable(object);\n\n _.each(RadialGradient.Properties, Two.Utils.defineProperty, object);\n\n }\n\n });\n\n _.extend(RadialGradient.prototype, Two.Gradient.prototype, {\n\n _flagRadius: false,\n _flagCenter: false,\n _flagFocal: false,\n\n constructor: RadialGradient,\n\n clone: function(parent) {\n\n var stops = _.map(this.stops, function(stop) {\n return stop.clone();\n });\n\n var clone = new RadialGradient(this.center._x, this.center._y,\n this._radius, stops, this.focal._x, this.focal._y);\n\n _.each(Two.Gradient.Properties.concat(RadialGradient.Properties), function(k) {\n clone[k] = this[k];\n }, this);\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n toObject: function() {\n\n var result = Two.Gradient.prototype.toObject.call(this);\n\n _.each(RadialGradient.Properties, function(k) {\n result[k] = this[k];\n }, this);\n\n result.center = this.center.toObject();\n result.focal = this.focal.toObject();\n\n return result;\n\n },\n\n _update: function() {\n\n if (this._flagRadius || this._flatCenter || this._flagFocal\n || this._flagSpread || this._flagStops) {\n this.trigger(Two.Events.change);\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagRadius = this._flagCenter = this._flagFocal = false;\n\n Two.Gradient.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n RadialGradient.MakeObservable(RadialGradient.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var root = Two.root;\n var _ = Two.Utils;\n var anchor;\n var regex = {\n video: /\\.(mp4|webm|ogg)$/i,\n image: /\\.(jpe?g|png|gif|tiff)$/i,\n effect: /texture|gradient/i\n };\n\n if (root.document) {\n anchor = document.createElement('a');\n }\n\n var Texture = Two.Texture = function(src, callback) {\n\n this._renderer = {};\n this._renderer.type = 'texture';\n this._renderer.flagOffset = _.bind(Texture.FlagOffset, this);\n this._renderer.flagScale = _.bind(Texture.FlagScale, this);\n\n this.id = Two.Identifier + Two.uniqueId();\n this.classList = [];\n\n this.offset = new Two.Vector();\n\n if (_.isFunction(callback)) {\n var loaded = _.bind(function() {\n this.unbind(Two.Events.load, loaded);\n if (_.isFunction(callback)) {\n callback();\n }\n }, this);\n this.bind(Two.Events.load, loaded);\n }\n\n if (_.isString(src)) {\n this.src = src;\n } else if (_.isElement(src)) {\n this.image = src;\n }\n\n this._update();\n\n };\n\n _.extend(Texture, {\n\n Properties: [\n 'src',\n 'loaded',\n 'repeat'\n ],\n\n RegularExpressions: regex,\n\n ImageRegistry: new Two.Registry(),\n\n getAbsoluteURL: function(path) {\n if (!anchor) {\n // TODO: Fix for headless environments\n return path;\n }\n anchor.href = path;\n return anchor.href;\n },\n\n loadHeadlessBuffer: new Function('texture', 'loaded', [\n 'var fs = require(\"fs\");',\n 'var buffer = fs.readFileSync(texture.src);',\n\n 'texture.image.src = buffer;',\n 'loaded();'\n ].join('\\n')),\n\n getImage: function(src) {\n\n var absoluteSrc = Texture.getAbsoluteURL(src);\n\n if (Texture.ImageRegistry.contains(absoluteSrc)) {\n return Texture.ImageRegistry.get(absoluteSrc);\n }\n\n var image;\n\n if (Two.Utils.Image) {\n\n // TODO: Fix for headless environments\n image = new Two.Utils.Image();\n Two.CanvasRenderer.Utils.shim(image, 'img');\n\n } else if (root.document) {\n\n if (regex.video.test(absoluteSrc)) {\n image = document.createElement('video');\n } else {\n image = document.createElement('img');\n }\n\n } else {\n\n console.warn('Two.js: no prototypical image defined for Two.Texture');\n\n }\n\n image.crossOrigin = 'anonymous';\n\n return image;\n\n },\n\n Register: {\n canvas: function(texture, callback) {\n texture._src = '#' + texture.id;\n Texture.ImageRegistry.add(texture.src, texture.image);\n if (_.isFunction(callback)) {\n callback();\n }\n },\n img: function(texture, callback) {\n\n var loaded = function(e) {\n if (_.isFunction(texture.image.removeEventListener)) {\n texture.image.removeEventListener('load', loaded, false);\n texture.image.removeEventListener('error', error, false);\n }\n if (_.isFunction(callback)) {\n callback();\n }\n };\n var error = function(e) {\n if (_.isFunction(texture.image.removeEventListener)) {\n texture.image.removeEventListener('load', loaded, false);\n texture.image.removeEventListener('error', error, false);\n }\n throw new Two.Utils.Error('unable to load ' + texture.src);\n };\n\n if (_.isNumber(texture.image.width) && texture.image.width > 0\n && _.isNumber(texture.image.height) && texture.image.height > 0) {\n loaded();\n } else if (_.isFunction(texture.image.addEventListener)) {\n texture.image.addEventListener('load', loaded, false);\n texture.image.addEventListener('error', error, false);\n }\n\n texture._src = Texture.getAbsoluteURL(texture._src);\n\n if (texture.image && texture.image.getAttribute('two-src')) {\n return;\n }\n\n texture.image.setAttribute('two-src', texture.src);\n Texture.ImageRegistry.add(texture.src, texture.image);\n\n if (Two.Utils.isHeadless) {\n\n Texture.loadHeadlessBuffer(texture, loaded);\n\n } else {\n\n texture.image.src = texture.src;\n\n }\n\n },\n video: function(texture, callback) {\n\n var loaded = function(e) {\n texture.image.removeEventListener('canplaythrough', loaded, false);\n texture.image.removeEventListener('error', error, false);\n texture.image.width = texture.image.videoWidth;\n texture.image.height = texture.image.videoHeight;\n texture.image.play();\n if (_.isFunction(callback)) {\n callback();\n }\n };\n var error = function(e) {\n texture.image.removeEventListener('canplaythrough', loaded, false);\n texture.image.removeEventListener('error', error, false);\n throw new Two.Utils.Error('unable to load ' + texture.src);\n };\n\n texture._src = Texture.getAbsoluteURL(texture._src);\n texture.image.addEventListener('canplaythrough', loaded, false);\n texture.image.addEventListener('error', error, false);\n\n if (texture.image && texture.image.getAttribute('two-src')) {\n return;\n }\n\n if (Two.Utils.isHeadless) {\n throw new Two.Utils.Error('video textures are not implemented in headless environments.');\n return;\n }\n\n texture.image.setAttribute('two-src', texture.src);\n Texture.ImageRegistry.add(texture.src, texture.image);\n texture.image.src = texture.src;\n texture.image.loop = true;\n texture.image.load();\n\n }\n },\n\n load: function(texture, callback) {\n\n var src = texture.src;\n var image = texture.image;\n var tag = image && image.nodeName.toLowerCase();\n\n if (texture._flagImage) {\n if (/canvas/i.test(tag)) {\n Texture.Register.canvas(texture, callback);\n } else {\n texture._src = image.getAttribute('two-src') || image.src;\n Texture.Register[tag](texture, callback);\n }\n }\n\n if (texture._flagSrc) {\n if (!image) {\n texture.image = Texture.getImage(texture.src);\n }\n tag = texture.image.nodeName.toLowerCase();\n Texture.Register[tag](texture, callback);\n }\n\n },\n\n FlagOffset: function() {\n this._flagOffset = true;\n },\n\n FlagScale: function() {\n this._flagScale = true;\n },\n\n MakeObservable: function(object) {\n\n _.each(Texture.Properties, Two.Utils.defineProperty, object);\n\n Object.defineProperty(object, 'image', {\n enumerable: true,\n get: function() {\n return this._image;\n },\n set: function(image) {\n\n var tag = image && image.nodeName.toLowerCase();\n var index;\n\n switch (tag) {\n case 'canvas':\n index = '#' + image.id;\n break;\n default:\n index = image.src;\n }\n\n if (Texture.ImageRegistry.contains(index)) {\n this._image = Texture.ImageRegistry.get(image.src);\n } else {\n this._image = image;\n }\n\n this._flagImage = true;\n\n }\n\n });\n\n Object.defineProperty(object, 'offset', {\n enumerable: true,\n get: function() {\n return this._offset;\n },\n set: function(v) {\n if (this._offset) {\n this._offset.unbind(Two.Events.change, this._renderer.flagOffset);\n }\n this._offset = v;\n this._offset.bind(Two.Events.change, this._renderer.flagOffset);\n this._flagOffset = true;\n }\n });\n\n Object.defineProperty(object, 'scale', {\n enumerable: true,\n get: function() {\n return this._scale;\n },\n set: function(v) {\n\n if (this._scale instanceof Two.Vector) {\n this._scale.unbind(Two.Events.change, this._renderer.flagScale);\n }\n\n this._scale = v;\n\n if (this._scale instanceof Two.Vector) {\n this._scale.bind(Two.Events.change, this._renderer.flagScale);\n }\n\n this._flagScale = true;\n\n }\n });\n\n }\n\n });\n\n _.extend(Texture.prototype, Two.Utils.Events, Two.Shape.prototype, {\n\n _flagSrc: false,\n _flagImage: false,\n _flagVideo: false,\n _flagLoaded: false,\n _flagRepeat: false,\n\n _flagOffset: false,\n _flagScale: false,\n\n _src: '',\n _image: null,\n _loaded: false,\n _repeat: 'no-repeat',\n\n _scale: 1,\n _offset: null,\n\n constructor: Texture,\n\n clone: function() {\n return new Texture(this.src);\n },\n\n toObject: function() {\n return {\n src: this.src,\n image: this.image\n }\n },\n\n _update: function() {\n\n if (this._flagSrc || this._flagImage) {\n\n this.trigger(Two.Events.change);\n\n if (this._flagSrc || this._flagImage) {\n this.loaded = false;\n Texture.load(this, _.bind(function() {\n this.loaded = true;\n this\n .trigger(Two.Events.change)\n .trigger(Two.Events.load);\n }, this));\n }\n\n }\n\n if (this._image && this._image.readyState >= 4) {\n this._flagVideo = true;\n }\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagSrc = this._flagImage = this._flagLoaded\n = this._flagVideo = this._flagScale = this._flagOffset = false;\n\n return this;\n\n }\n\n });\n\n Texture.MakeObservable(Texture.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n var Path = Two.Path;\n var Rectangle = Two.Rectangle;\n\n var Sprite = Two.Sprite = function(path, ox, oy, cols, rows, frameRate) {\n\n Path.call(this, [\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor()\n ], true);\n\n this.noStroke();\n this.noFill();\n\n if (path instanceof Two.Texture) {\n this.texture = path;\n } else if (_.isString(path)) {\n this.texture = new Two.Texture(path);\n }\n\n this.origin = new Two.Vector();\n\n this._update();\n this.translation.set(ox || 0, oy || 0);\n\n if (_.isNumber(cols)) {\n this.columns = cols;\n }\n if (_.isNumber(rows)) {\n this.rows = rows;\n }\n if (_.isNumber(frameRate)) {\n this.frameRate = frameRate;\n }\n\n };\n\n _.extend(Sprite, {\n\n Properties: [\n 'texture', 'columns', 'rows', 'frameRate', 'index'\n ],\n\n MakeObservable: function(obj) {\n\n Rectangle.MakeObservable(obj);\n _.each(Sprite.Properties, Two.Utils.defineProperty, obj);\n\n }\n\n })\n\n _.extend(Sprite.prototype, Rectangle.prototype, {\n\n _flagTexture: false,\n _flagColumns: false,\n _flagRows: false,\n _flagFrameRate: false,\n flagIndex: false,\n\n // Private variables\n _amount: 1,\n _duration: 0,\n _startTime: 0,\n _playing: false,\n _firstFrame: 0,\n _lastFrame: 0,\n _loop: true,\n\n // Exposed through getter-setter\n _texture: null,\n _columns: 1,\n _rows: 1,\n _frameRate: 0,\n _index: 0,\n _origin: null,\n\n constructor: Sprite,\n\n play: function(firstFrame, lastFrame, onLastFrame) {\n\n this._playing = true;\n this._firstFrame = 0;\n this._lastFrame = this.amount - 1;\n this._startTime = _.performance.now();\n\n if (_.isNumber(firstFrame)) {\n this._firstFrame = firstFrame;\n }\n if (_.isNumber(lastFrame)) {\n this._lastFrame = lastFrame;\n }\n if (_.isFunction(onLastFrame)) {\n this._onLastFrame = onLastFrame;\n } else {\n delete this._onLastFrame;\n }\n\n if (this._index !== this._firstFrame) {\n this._startTime -= 1000 * Math.abs(this._index - this._firstFrame)\n / this._frameRate;\n }\n\n return this;\n\n },\n\n pause: function() {\n\n this._playing = false;\n return this;\n\n },\n\n stop: function() {\n\n this._playing = false;\n this._index = 0;\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new Sprite(\n this.texture, this.translation.x, this.translation.y,\n this.columns, this.rows, this.frameRate\n );\n\n if (this.playing) {\n clone.play(this._firstFrame, this._lastFrame);\n clone._loop = this._loop;\n }\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n _update: function() {\n\n var effect = this._texture;\n var cols = this._columns;\n var rows = this._rows;\n\n var width, height, elapsed, amount, duration;\n var index, iw, ih, isRange, frames;\n\n if (this._flagColumns || this._flagRows) {\n this._amount = this._columns * this._rows;\n }\n\n if (this._flagFrameRate) {\n this._duration = 1000 * this._amount / this._frameRate;\n }\n\n if (this._flagTexture) {\n this.fill = this._texture;\n }\n\n if (this._texture.loaded) {\n\n iw = effect.image.width;\n ih = effect.image.height;\n\n width = iw / cols;\n height = ih / rows;\n amount = this._amount;\n\n if (this.width !== width) {\n this.width = width;\n }\n if (this.height !== height) {\n this.height = height;\n }\n\n if (this._playing && this._frameRate > 0) {\n\n if (_.isNaN(this._lastFrame)) {\n this._lastFrame = amount - 1;\n }\n\n // TODO: Offload perf logic to instance of `Two`.\n elapsed = _.performance.now() - this._startTime;\n frames = this._lastFrame + 1;\n duration = 1000 * (frames - this._firstFrame) / this._frameRate;\n\n if (this._loop) {\n elapsed = elapsed % duration;\n } else {\n elapsed = Math.min(elapsed, duration);\n }\n\n index = _.lerp(this._firstFrame, frames, elapsed / duration);\n index = Math.floor(index);\n\n if (index !== this._index) {\n this._index = index;\n if (index >= this._lastFrame - 1 && this._onLastFrame) {\n this._onLastFrame(); // Shortcut for chainable sprite animations\n }\n }\n\n }\n\n var col = this._index % cols;\n var row = Math.floor(this._index / cols);\n\n var ox = - width * col + (iw - width) / 2;\n var oy = - height * row + (ih - height) / 2;\n\n // TODO: Improve performance\n if (ox !== effect.offset.x) {\n effect.offset.x = ox;\n }\n if (oy !== effect.offset.y) {\n effect.offset.y = oy;\n }\n\n }\n\n Rectangle.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagTexture = this._flagColumns = this._flagRows\n = this._flagFrameRate = false;\n\n Rectangle.prototype.flagReset.call(this);\n\n return this;\n }\n\n\n });\n\n Sprite.MakeObservable(Sprite.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n var _ = Two.Utils;\n var Path = Two.Path;\n var Rectangle = Two.Rectangle;\n\n var ImageSequence = Two.ImageSequence = function(paths, ox, oy, frameRate) {\n\n Path.call(this, [\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor(),\n new Two.Anchor()\n ], true);\n\n this._renderer.flagTextures = _.bind(ImageSequence.FlagTextures, this);\n this._renderer.bindTextures = _.bind(ImageSequence.BindTextures, this);\n this._renderer.unbindTextures = _.bind(ImageSequence.UnbindTextures, this);\n\n this.noStroke();\n this.noFill();\n\n this.textures = _.map(paths, ImageSequence.GenerateTexture, this);\n this.origin = new Two.Vector();\n\n this._update();\n this.translation.set(ox || 0, oy || 0);\n\n if (_.isNumber(frameRate)) {\n this.frameRate = frameRate;\n } else {\n this.frameRate = ImageSequence.DefaultFrameRate;\n }\n\n };\n\n _.extend(ImageSequence, {\n\n Properties: [\n 'frameRate',\n 'index'\n ],\n\n DefaultFrameRate: 30,\n\n FlagTextures: function() {\n this._flagTextures = true;\n },\n\n BindTextures: function(items) {\n\n var i = items.length;\n while (i--) {\n items[i].bind(Two.Events.change, this._renderer.flagTextures);\n }\n\n this._renderer.flagTextures();\n\n },\n\n UnbindTextures: function(items) {\n\n var i = items.length;\n while (i--) {\n items[i].unbind(Two.Events.change, this._renderer.flagTextures);\n }\n\n this._renderer.flagTextures();\n\n },\n\n MakeObservable: function(obj) {\n\n Rectangle.MakeObservable(obj);\n _.each(ImageSequence.Properties, Two.Utils.defineProperty, obj);\n\n Object.defineProperty(obj, 'textures', {\n\n enumerable: true,\n\n get: function() {\n return this._textures;\n },\n\n set: function(textures) {\n\n var updateTextures = this._renderer.flagTextures;\n var bindTextures = this._renderer.bindTextures;\n var unbindTextures = this._renderer.unbindTextures;\n\n // Remove previous listeners\n if (this._textures) {\n this._textures\n .unbind(Two.Events.insert, bindTextures)\n .unbind(Two.Events.remove, unbindTextures);\n }\n\n // Create new Collection with copy of vertices\n this._textures = new Two.Utils.Collection((textures || []).slice(0));\n\n // Listen for Collection changes and bind / unbind\n this._textures\n .bind(Two.Events.insert, bindTextures)\n .bind(Two.Events.remove, unbindTextures);\n\n // Bind Initial Textures\n bindTextures(this._textures);\n\n }\n\n });\n\n },\n\n GenerateTexture: function(obj) {\n if (obj instanceof Two.Texture) {\n return obj;\n } else if (_.isString(obj)) {\n return new Two.Texture(obj);\n }\n }\n\n });\n\n _.extend(ImageSequence.prototype, Rectangle.prototype, {\n\n _flagTextures: false,\n _flagFrameRate: false,\n _flagIndex: false,\n\n // Private variables\n _amount: 1,\n _duration: 0,\n _index: 0,\n _startTime: 0,\n _playing: false,\n _firstFrame: 0,\n _lastFrame: 0,\n _loop: true,\n\n // Exposed through getter-setter\n _textures: null,\n _frameRate: 0,\n _origin: null,\n\n constructor: ImageSequence,\n\n play: function(firstFrame, lastFrame, onLastFrame) {\n\n this._playing = true;\n this._firstFrame = 0;\n this._lastFrame = this.amount - 1;\n this._startTime = _.performance.now();\n\n if (_.isNumber(firstFrame)) {\n this._firstFrame = firstFrame;\n }\n if (_.isNumber(lastFrame)) {\n this._lastFrame = lastFrame;\n }\n if (_.isFunction(onLastFrame)) {\n this._onLastFrame = onLastFrame;\n } else {\n delete this._onLastFrame;\n }\n\n if (this._index !== this._firstFrame) {\n this._startTime -= 1000 * Math.abs(this._index - this._firstFrame)\n / this._frameRate;\n }\n\n return this;\n\n },\n\n pause: function() {\n\n this._playing = false;\n return this;\n\n },\n\n stop: function() {\n\n this._playing = false;\n this._index = 0;\n\n return this;\n\n },\n\n clone: function(parent) {\n\n var clone = new ImageSequence(this.textures, this.translation.x,\n this.translation.y, this.frameRate)\n\n clone._loop = this._loop;\n\n if (this._playing) {\n clone.play();\n }\n\n if (parent) {\n parent.add(clone);\n }\n\n return clone;\n\n },\n\n _update: function() {\n\n var effects = this._textures;\n var width, height, elapsed, amount, duration, texture;\n var index, frames;\n\n if (this._flagTextures) {\n this._amount = effects.length;\n }\n\n if (this._flagFrameRate) {\n this._duration = 1000 * this._amount / this._frameRate;\n }\n\n if (this._playing && this._frameRate > 0) {\n\n amount = this._amount;\n\n if (_.isNaN(this._lastFrame)) {\n this._lastFrame = amount - 1;\n }\n\n // TODO: Offload perf logic to instance of `Two`.\n elapsed = _.performance.now() - this._startTime;\n frames = this._lastFrame + 1;\n duration = 1000 * (frames - this._firstFrame) / this._frameRate;\n\n if (this._loop) {\n elapsed = elapsed % duration;\n } else {\n elapsed = Math.min(elapsed, duration);\n }\n\n index = _.lerp(this._firstFrame, frames, elapsed / duration);\n index = Math.floor(index);\n\n if (index !== this._index) {\n\n this._index = index;\n texture = effects[this._index];\n\n if (texture.loaded) {\n\n width = texture.image.width;\n height = texture.image.height;\n\n if (this.width !== width) {\n this.width = width;\n }\n if (this.height !== height) {\n this.height = height;\n }\n\n this.fill = texture;\n\n if (index >= this._lastFrame - 1 && this._onLastFrame) {\n this._onLastFrame(); // Shortcut for chainable sprite animations\n }\n\n }\n\n }\n\n } else if (this._flagIndex || !(this.fill instanceof Two.Texture)) {\n\n texture = effects[this._index];\n\n if (texture.loaded) {\n\n width = texture.image.width;\n height = texture.image.height;\n\n if (this.width !== width) {\n this.width = width;\n }\n if (this.height !== height) {\n this.height = height;\n }\n\n }\n\n this.fill = texture;\n\n }\n\n Rectangle.prototype._update.call(this);\n\n return this;\n\n },\n\n flagReset: function() {\n\n this._flagTextures = this._flagFrameRate = false;\n Rectangle.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n ImageSequence.MakeObservable(ImageSequence.prototype);\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n(function(Two) {\n\n // Constants\n\n var min = Math.min, max = Math.max;\n var _ = Two.Utils;\n\n /**\n * @class\n * @name Two.Group.Children\n * @extends Two.Utils.Collection\n * @description A children collection which is accesible both by index and by object id\n */\n var Children = function() {\n\n Two.Utils.Collection.apply(this, arguments);\n\n Object.defineProperty(this, '_events', {\n value : {},\n enumerable: false\n });\n\n this.ids = {};\n\n this.on(Two.Events.insert, this.attach);\n this.on(Two.Events.remove, this.detach);\n Children.prototype.attach.apply(this, arguments);\n\n };\n\n Children.prototype = new Two.Utils.Collection();\n\n _.extend(Children.prototype, {\n\n constructor: Children,\n\n attach: function(children) {\n for (var i = 0; i < children.length; i++) {\n this.ids[children[i].id] = children[i];\n }\n return this;\n },\n\n detach: function(children) {\n for (var i = 0; i < children.length; i++) {\n delete this.ids[children[i].id];\n }\n return this;\n }\n\n });\n\n /**\n * @class\n * @name Two.Group\n */\n var Group = Two.Group = function(children) {\n\n Two.Shape.call(this, true);\n\n this._renderer.type = 'group';\n\n this.additions = [];\n this.subtractions = [];\n\n this.children = _.isArray(children) ? children : arguments;\n\n };\n\n _.extend(Group, {\n\n Children: Children,\n\n InsertChildren: function(children) {\n for (var i = 0; i < children.length; i++) {\n replaceParent.call(this, children[i], this);\n }\n },\n\n RemoveChildren: function(children) {\n for (var i = 0; i < children.length; i++) {\n replaceParent.call(this, children[i]);\n }\n },\n\n OrderChildren: function(children) {\n this._flagOrder = true;\n },\n\n Properties: [\n 'fill',\n 'stroke',\n 'linewidth',\n 'visible',\n 'cap',\n 'join',\n 'miter',\n ],\n\n MakeObservable: function(object) {\n\n var properties = Two.Group.Properties;\n\n Object.defineProperty(object, 'opacity', {\n\n enumerable: true,\n\n get: function() {\n return this._opacity;\n },\n\n set: function(v) {\n this._flagOpacity = this._opacity !== v;\n this._opacity = v;\n }\n\n });\n\n Object.defineProperty(object, 'className', {\n\n enumerable: true,\n\n get: function() {\n return this._className;\n },\n\n set: function(v) {\n this._flagClassName = this._className !== v;\n this._className = v;\n }\n\n });\n\n Object.defineProperty(object, 'beginning', {\n\n enumerable: true,\n\n get: function() {\n return this._beginning;\n },\n\n set: function(v) {\n this._flagBeginning = this._beginning !== v;\n this._beginning = v;\n }\n\n });\n\n Object.defineProperty(object, 'ending', {\n\n enumerable: true,\n\n get: function() {\n return this._ending;\n },\n\n set: function(v) {\n this._flagEnding = this._ending !== v;\n this._ending = v;\n }\n\n });\n\n Object.defineProperty(object, 'length', {\n\n enumerable: true,\n\n get: function() {\n if (this._flagLength || this._length <= 0) {\n this._length = 0;\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n this._length += child.length;\n }\n }\n return this._length;\n }\n\n });\n\n Two.Shape.MakeObservable(object);\n Group.MakeGetterSetters(object, properties);\n\n Object.defineProperty(object, 'children', {\n\n enumerable: true,\n\n get: function() {\n return this._children;\n },\n\n set: function(children) {\n\n var insertChildren = _.bind(Group.InsertChildren, this);\n var removeChildren = _.bind(Group.RemoveChildren, this);\n var orderChildren = _.bind(Group.OrderChildren, this);\n\n if (this._children) {\n this._children.unbind();\n }\n\n this._children = new Children(children);\n this._children.bind(Two.Events.insert, insertChildren);\n this._children.bind(Two.Events.remove, removeChildren);\n this._children.bind(Two.Events.order, orderChildren);\n\n }\n\n });\n\n Object.defineProperty(object, 'mask', {\n\n enumerable: true,\n\n get: function() {\n return this._mask;\n },\n\n set: function(v) {\n this._mask = v;\n this._flagMask = true;\n if (!v.clip) {\n v.clip = true;\n }\n }\n\n });\n\n },\n\n MakeGetterSetters: function(group, properties) {\n\n if (!_.isArray(properties)) {\n properties = [properties];\n }\n\n _.each(properties, function(k) {\n Group.MakeGetterSetter(group, k);\n });\n\n },\n\n MakeGetterSetter: function(group, k) {\n\n var secret = '_' + k;\n\n Object.defineProperty(group, k, {\n\n enumerable: true,\n\n get: function() {\n return this[secret];\n },\n\n set: function(v) {\n this[secret] = v;\n _.each(this.children, function(child) { // Trickle down styles\n child[k] = v;\n });\n }\n\n });\n\n }\n\n });\n\n _.extend(Group.prototype, Two.Shape.prototype, {\n\n // Flags\n // http://en.wikipedia.org/wiki/Flag\n\n _flagAdditions: false,\n _flagSubtractions: false,\n _flagOrder: false,\n _flagOpacity: true,\n _flagClassName: false,\n _flagBeginning: false,\n _flagEnding: false,\n\n _flagLength: false,\n _flagMask: false,\n\n // Underlying Properties\n\n _fill: '#fff',\n _stroke: '#000',\n _linewidth: 1.0,\n _opacity: 1.0,\n _className: '',\n _visible: true,\n\n _cap: 'round',\n _join: 'round',\n _miter: 4,\n\n _closed: true,\n _curved: false,\n _automatic: true,\n _beginning: 0,\n _ending: 1.0,\n\n _length: 0,\n _mask: null,\n\n constructor: Group,\n\n // /**\n // * TODO: Group has a gotcha in that it's at the moment required to be bound to\n // * an instance of two in order to add elements correctly. This needs to\n // * be rethought and fixed.\n // */\n clone: function(parent) {\n\n var group = new Group();\n var children = _.map(this.children, function(child) {\n return child.clone();\n });\n\n group.add(children);\n\n group.opacity = this.opacity;\n\n if (this.mask) {\n group.mask = this.mask;\n }\n\n group.translation.copy(this.translation);\n group.rotation = this.rotation;\n group.scale = this.scale;\n group.className = this.className;\n\n if (parent) {\n parent.add(group);\n }\n\n return group._update();\n\n },\n\n // /**\n // * Export the data from the instance of Two.Group into a plain JavaScript\n // * object. This also makes all children plain JavaScript objects. Great\n // * for turning into JSON and storing in a database.\n // */\n toObject: function() {\n\n var result = {\n children: [],\n translation: this.translation.toObject(),\n rotation: this.rotation,\n scale: this.scale instanceof Two.Vector ? this.scale.toObject() : this.scale,\n opacity: this.opacity,\n className: this.className,\n mask: (this.mask ? this.mask.toObject() : null)\n };\n\n _.each(this.children, function(child, i) {\n result.children[i] = child.toObject();\n }, this);\n\n return result;\n\n },\n\n // /**\n // * Anchor all children to the upper left hand corner\n // * of the group.\n // */\n corner: function() {\n\n var rect = this.getBoundingClientRect(true),\n corner = { x: rect.left, y: rect.top };\n\n this.children.forEach(function(child) {\n child.translation.sub(corner);\n });\n\n return this;\n\n },\n\n // /**\n // * Anchors all children around the center of the group,\n // * effectively placing the shape around the unit circle.\n // */\n center: function() {\n\n var rect = this.getBoundingClientRect(true);\n\n rect.centroid = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n\n this.children.forEach(function(child) {\n if (child.isShape) {\n child.translation.sub(rect.centroid);\n }\n });\n\n // this.translation.copy(rect.centroid);\n\n return this;\n\n },\n\n // /**\n // * Recursively search for id. Returns the first element found.\n // * Returns null if none found.\n // */\n getById: function (id) {\n var search = function (node, id) {\n if (node.id === id) {\n return node;\n } else if (node.children) {\n var i = node.children.length;\n while (i--) {\n var found = search(node.children[i], id);\n if (found) return found;\n }\n }\n\n };\n return search(this, id) || null;\n },\n\n // /**\n // * Recursively search for classes. Returns an array of matching elements.\n // * Empty array if none found.\n // */\n getByClassName: function (cl) {\n var found = [];\n var search = function (node, cl) {\n if (node.classList.indexOf(cl) != -1) {\n found.push(node);\n } else if (node.children) {\n node.children.forEach(function (child) {\n search(child, cl);\n });\n }\n return found;\n };\n return search(this, cl);\n },\n\n // /**\n // * Recursively search for children of a specific type,\n // * e.g. Two.Polygon. Pass a reference to this type as the param.\n // * Returns an empty array if none found.\n // */\n getByType: function(type) {\n var found = [];\n var search = function (node, type) {\n for (var id in node.children) {\n if (node.children[id] instanceof type) {\n found.push(node.children[id]);\n } else if (node.children[id] instanceof Two.Group) {\n search(node.children[id], type);\n }\n }\n return found;\n };\n return search(this, type);\n },\n\n // /**\n // * Add objects to the group.\n // */\n add: function(objects) {\n\n // Allow to pass multiple objects either as array or as multiple arguments\n // If it's an array also create copy of it in case we're getting passed\n // a childrens array directly.\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n } else {\n objects = objects.slice();\n }\n\n // Add the objects\n for (var i = 0; i < objects.length; i++) {\n if (!(objects[i] && objects[i].id)) continue;\n this.children.push(objects[i]);\n }\n\n return this;\n\n },\n\n // /**\n // * Remove objects from the group.\n // */\n remove: function(objects) {\n\n var l = arguments.length,\n grandparent = this.parent;\n\n // Allow to call remove without arguments\n // This will detach the object from its own parent.\n if (l <= 0 && grandparent) {\n grandparent.remove(this);\n return this;\n }\n\n // Allow to pass multiple objects either as array or as multiple arguments\n // If it's an array also create copy of it in case we're getting passed\n // a childrens array directly.\n if (!(objects instanceof Array)) {\n objects = _.toArray(arguments);\n } else {\n objects = objects.slice();\n }\n\n // Remove the objects\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i] || !(this.children.ids[objects[i].id])) continue;\n this.children.splice(_.indexOf(this.children, objects[i]), 1);\n }\n\n return this;\n\n },\n\n // /**\n // * Return an object with top, left, right, bottom, width, and height\n // * parameters of the group.\n // */\n getBoundingClientRect: function(shallow) {\n var rect;\n\n // TODO: Update this to not __always__ update. Just when it needs to.\n this._update(true);\n\n // Variables need to be defined here, because of nested nature of groups.\n var left = Infinity, right = -Infinity,\n top = Infinity, bottom = -Infinity;\n\n var regex = Two.Texture.RegularExpressions.effect;\n\n for (var i = 0; i < this.children.length; i++) {\n\n var child = this.children[i];\n\n if (!child.visible || regex.test(child._renderer.type)) {\n continue;\n }\n\n rect = child.getBoundingClientRect(shallow);\n\n if (!_.isNumber(rect.top) || !_.isNumber(rect.left) ||\n !_.isNumber(rect.right) || !_.isNumber(rect.bottom)) {\n continue;\n }\n\n top = min(rect.top, top);\n left = min(rect.left, left);\n right = max(rect.right, right);\n bottom = max(rect.bottom, bottom);\n\n }\n\n return {\n top: top,\n left: left,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n\n },\n\n // /**\n // * Trickle down of noFill\n // */\n noFill: function() {\n this.children.forEach(function(child) {\n child.noFill();\n });\n return this;\n },\n\n // /**\n // * Trickle down of noStroke\n // */\n noStroke: function() {\n this.children.forEach(function(child) {\n child.noStroke();\n });\n return this;\n },\n\n // /**\n // * Trickle down subdivide\n // */\n subdivide: function() {\n var args = arguments;\n this.children.forEach(function(child) {\n child.subdivide.apply(child, args);\n });\n return this;\n },\n\n _update: function() {\n\n if (this._flagBeginning || this._flagEnding) {\n\n var beginning = Math.min(this._beginning, this._ending);\n var ending = Math.max(this._beginning, this._ending);\n var length = this.length;\n var sum = 0;\n\n var bd = beginning * length;\n var ed = ending * length;\n var distance = (ed - bd);\n\n for (var i = 0; i < this.children.length; i++) {\n\n var child = this.children[i];\n var l = child.length;\n\n if (bd > sum + l) {\n child.beginning = 1;\n child.ending = 1;\n } else if (ed < sum) {\n child.beginning = 0;\n child.ending = 0;\n } else if (bd > sum && bd < sum + l) {\n child.beginning = (bd - sum) / l;\n child.ending = 1;\n } else if (ed > sum && ed < sum + l) {\n child.beginning = 0;\n child.ending = (ed - sum) / l;\n } else {\n child.beginning = 0;\n child.ending = 1;\n }\n\n sum += l;\n\n }\n\n }\n\n return Two.Shape.prototype._update.apply(this, arguments);\n\n },\n\n flagReset: function() {\n\n if (this._flagAdditions) {\n this.additions.length = 0;\n this._flagAdditions = false;\n }\n\n if (this._flagSubtractions) {\n this.subtractions.length = 0;\n this._flagSubtractions = false;\n }\n\n this._flagOrder = this._flagMask = this._flagOpacity = this._flagClassName\n this._flagBeginning = this._flagEnding = false;\n\n Two.Shape.prototype.flagReset.call(this);\n\n return this;\n\n }\n\n });\n\n Group.MakeObservable(Group.prototype);\n\n // /**\n // * Helper function used to sync parent-child relationship within the\n // * `Two.Group.children` object.\n // *\n // * Set the parent of the passed object to another object\n // * and updates parent-child relationships\n // * Calling with one arguments will simply remove the parenting\n // */\n function replaceParent(child, newParent) {\n\n var parent = child.parent;\n var index;\n\n if (parent === newParent) {\n this.additions.push(child);\n this._flagAdditions = true;\n return;\n }\n\n if (parent && parent.children.ids[child.id]) {\n\n index = _.indexOf(parent.children, child);\n parent.children.splice(index, 1);\n\n // If we're passing from one parent to another...\n index = _.indexOf(parent.additions, child);\n\n if (index >= 0) {\n parent.additions.splice(index, 1);\n } else {\n parent.subtractions.push(child);\n parent._flagSubtractions = true;\n }\n\n }\n\n if (newParent) {\n child.parent = newParent;\n this.additions.push(child);\n this._flagAdditions = true;\n return;\n }\n\n // If we're passing from one parent to another...\n index = _.indexOf(this.additions, child);\n\n if (index >= 0) {\n this.additions.splice(index, 1);\n } else {\n this.subtractions.push(child);\n this._flagSubtractions = true;\n }\n\n delete child.parent;\n\n }\n\n})((typeof global !== 'undefined' ? global : (this || window)).Two);\n\n\nexport default (this || window).Two;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/** @license React v16.8.6\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var k=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.concurrent_mode\"):60111,y=n?Symbol.for(\"react.forward_ref\"):60112,z=n?Symbol.for(\"react.suspense\"):60113,aa=n?Symbol.for(\"react.memo\"):\n60115,ba=n?Symbol.for(\"react.lazy\"):60116,A=\"function\"===typeof Symbol&&Symbol.iterator;function ca(a,b,d,c,e,g,h,f){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[d,c,e,g,h,f],m=0;a=Error(b.replace(/%s/g,function(){return l[m++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction B(a){for(var b=arguments.length-1,d=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=0;cP.length&&P.push(a)}\nfunction S(a,b,d,c){var e=typeof a;if(\"undefined\"===e||\"boolean\"===e)a=null;var g=!1;if(null===a)g=!0;else switch(e){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return d(c,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var h=0;hthis.eventPool.length&&this.eventPool.push(a)}\nfunction hb(a){a.eventPool=[];a.getPooled=ib;a.release=jb}var kb=y.extend({data:null}),lb=y.extend({data:null}),mb=[9,13,27,32],nb=Ra&&\"CompositionEvent\"in window,ob=null;Ra&&\"documentMode\"in document&&(ob=document.documentMode);\nvar pb=Ra&&\"TextEvent\"in window&&!ob,qb=Ra&&(!nb||ob&&8=ob),rb=String.fromCharCode(32),sb={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},tb=!1;\nfunction ub(a,b){switch(a){case \"keyup\":return-1!==mb.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function vb(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var wb=!1;function xb(a,b){switch(a){case \"compositionend\":return vb(b);case \"keypress\":if(32!==b.which)return null;tb=!0;return rb;case \"textInput\":return a=b.data,a===rb&&tb?null:a;default:return null}}\nfunction yb(a,b){if(wb)return\"compositionend\"===a||!nb&&ub(a,b)?(a=eb(),db=cb=bb=null,wb=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1b}return!1}function C(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new C(a,0,!1,a,null)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new C(b,1,!1,a[1],null)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new C(a,2,!1,a.toLowerCase(),null)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new C(a,2,!1,a,null)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new C(a,3,!1,a.toLowerCase(),null)});[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new C(a,3,!0,a,null)});\n[\"capture\",\"download\"].forEach(function(a){D[a]=new C(a,4,!1,a,null)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new C(a,6,!1,a,null)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new C(a,5,!1,a.toLowerCase(),null)});var rc=/[\\-:]([a-z])/g;function sc(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(rc,\nsc);D[b]=new C(b,1,!1,a,null)});\"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/1999/xlink\")});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\")});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new C(a,1,!1,a.toLowerCase(),null)});\nfunction tc(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2zd.length&&zd.push(a)}}}var Fd={},Gd=0,Hd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);\nfunction Id(a){Object.prototype.hasOwnProperty.call(a,Hd)||(a[Hd]=Gd++,Fd[a[Hd]]={});return Fd[a[Hd]]}function Jd(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function Kd(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ld(a,b){var c=Kd(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Kd(c)}}function Md(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Md(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Nd(){for(var a=window,b=Jd();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Jd(a.document)}return b}function Od(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Pd(){var a=Nd();if(Od(a)){if(\"selectionStart\"in a)var b={start:a.selectionStart,end:a.selectionEnd};else a:{b=(b=a.ownerDocument)&&b.defaultView||window;var c=b.getSelection&&b.getSelection();if(c&&0!==c.rangeCount){b=c.anchorNode;var d=c.anchorOffset,e=c.focusNode;c=c.focusOffset;try{b.nodeType,e.nodeType}catch(A){b=null;break a}var f=0,g=-1,h=-1,l=0,k=0,m=a,p=null;b:for(;;){for(var t;;){m!==b||0!==d&&3!==m.nodeType||(g=f+d);m!==e||0!==c&&3!==m.nodeType||(h=f+c);3===m.nodeType&&(f+=m.nodeValue.length);\nif(null===(t=m.firstChild))break;p=m;m=t}for(;;){if(m===a)break b;p===b&&++l===d&&(g=f);p===e&&++k===c&&(h=f);if(null!==(t=m.nextSibling))break;m=p;p=m.parentNode}m=t}b=-1===g||-1===h?null:{start:g,end:h}}else b=null}b=b||{start:0,end:0}}else b=null;return{focusedElem:a,selectionRange:b}}\nfunction Qd(a){var b=Nd(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Md(c.ownerDocument.documentElement,c)){if(null!==d&&Od(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ld(c,f);var g=Ld(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Sd={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},Td=null,Ud=null,Vd=null,Wd=!1;\nfunction Xd(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(Wd||null==Td||Td!==Jd(c))return null;c=Td;\"selectionStart\"in c&&Od(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return Vd&&dd(Vd,c)?null:(Vd=c,a=y.getPooled(Sd.select,Ud,a,b),a.type=\"select\",a.target=Td,Qa(a),a)}\nvar Yd={eventTypes:Sd,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Id(e);f=sa.onSelect;for(var g=0;g=b.length?void 0:x(\"93\"),b=b[0]),c=b),null==c&&(c=\"\"));a._wrapperState={initialValue:uc(c)}}\nfunction de(a,b){var c=uc(b.value),d=uc(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function ee(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var fe={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction ge(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function he(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?ge(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ie=void 0,je=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==fe.svg||\"innerHTML\"in a)a.innerHTML=b;else{ie=ie||document.createElement(\"div\");ie.innerHTML=\"\"+b+\"\";for(b=ie.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ke(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar le={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(le).forEach(function(a){me.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);le[b]=le[a]})});function ne(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||le.hasOwnProperty(a)&&le[a]?(\"\"+b).trim():b+\"px\"}\nfunction oe(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ne(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var pe=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction qe(a,b){b&&(pe[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?x(\"137\",a,\"\"):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?x(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:x(\"61\")),null!=b.style&&\"object\"!==typeof b.style?x(\"62\",\"\"):void 0)}\nfunction re(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}\nfunction se(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Id(a);b=sa[b];for(var d=0;dGe||(a.current=Fe[Ge],Fe[Ge]=null,Ge--)}function G(a,b){Ge++;Fe[Ge]=a.current;a.current=b}var He={},H={current:He},I={current:!1},Ie=He;\nfunction Je(a,b){var c=a.type.contextTypes;if(!c)return He;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function J(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Ke(a){F(I,a);F(H,a)}function Le(a){F(I,a);F(H,a)}\nfunction Me(a,b,c){H.current!==He?x(\"168\"):void 0;G(H,b,a);G(I,c,a)}function Ne(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)e in a?void 0:x(\"108\",ic(b)||\"Unknown\",e);return n({},c,d)}function Oe(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||He;Ie=H.current;G(H,b,a);G(I,I.current,a);return!0}\nfunction Pe(a,b,c){var d=a.stateNode;d?void 0:x(\"169\");c?(b=Ne(a,b,Ie),d.__reactInternalMemoizedMergedChildContext=b,F(I,a),F(H,a),G(H,b,a)):F(I,a);G(I,c,a)}var Qe=null,Re=null;function Se(a){return function(b){try{return a(b)}catch(c){}}}\nfunction Te(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Qe=Se(function(a){return b.onCommitFiberRoot(c,a)});Re=Se(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}\nfunction Ue(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function K(a,b,c,d){return new Ue(a,b,c,d)}\nfunction Ve(a){a=a.prototype;return!(!a||!a.isReactComponent)}function We(a){if(\"function\"===typeof a)return Ve(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===cc)return 11;if(a===ec)return 14}return 2}\nfunction Xe(a,b){var c=a.alternate;null===c?(c=K(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;c.contextDependencies=a.contextDependencies;c.sibling=a.sibling;\nc.index=a.index;c.ref=a.ref;return c}\nfunction Ye(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)Ve(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case Xb:return Ze(c.children,e,f,b);case bc:return $e(c,e|3,f,b);case Yb:return $e(c,e|2,f,b);case Zb:return a=K(12,c,b,e|4),a.elementType=Zb,a.type=Zb,a.expirationTime=f,a;case dc:return a=K(13,c,b,e),a.elementType=dc,a.type=dc,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case $b:g=10;break a;case ac:g=9;break a;case cc:g=11;break a;case ec:g=\n14;break a;case fc:g=16;d=null;break a}x(\"130\",null==a?a:typeof a,\"\")}b=K(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Ze(a,b,c,d){a=K(7,a,d,b);a.expirationTime=c;return a}function $e(a,b,c,d){a=K(8,a,d,b);b=0===(b&1)?Yb:bc;a.elementType=b;a.type=b;a.expirationTime=c;return a}function af(a,b,c){a=K(6,a,null,b);a.expirationTime=c;return a}\nfunction bf(a,b,c){b=K(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function cf(a,b){a.didError=!1;var c=a.earliestPendingTime;0===c?a.earliestPendingTime=a.latestPendingTime=b:cb&&(a.latestPendingTime=b);df(b,a)}\nfunction ef(a,b){a.didError=!1;if(0===b)a.earliestPendingTime=0,a.latestPendingTime=0,a.earliestSuspendedTime=0,a.latestSuspendedTime=0,a.latestPingedTime=0;else{bb?a.earliestPendingTime=a.latestPendingTime=0:a.earliestPendingTime>b&&(a.earliestPendingTime=a.latestPendingTime));c=a.earliestSuspendedTime;0===c?cf(a,b):bc&&cf(a,b)}df(0,a)}function ff(a,b){a.didError=!1;a.latestPingedTime>=b&&(a.latestPingedTime=0);var c=a.earliestPendingTime,d=a.latestPendingTime;c===b?a.earliestPendingTime=d===b?a.latestPendingTime=0:d:d===b&&(a.latestPendingTime=c);c=a.earliestSuspendedTime;d=a.latestSuspendedTime;0===c?a.earliestSuspendedTime=a.latestSuspendedTime=b:cb&&(a.latestSuspendedTime=b);df(b,a)}\nfunction gf(a,b){var c=a.earliestPendingTime;a=a.earliestSuspendedTime;c>b&&(b=c);a>b&&(b=a);return b}function df(a,b){var c=b.earliestSuspendedTime,d=b.latestSuspendedTime,e=b.earliestPendingTime,f=b.latestPingedTime;e=0!==e?e:f;0===e&&(0===a||da&&(a=c);b.nextExpirationTimeToWorkOn=e;b.expirationTime=a}function L(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}\nfunction hf(a){var b=a._result;switch(a._status){case 1:return b;case 2:throw b;case 0:throw b;default:a._status=0;b=a._ctor;b=b();b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)});switch(a._status){case 1:return a._result;case 2:throw a._result;}a._result=b;throw b;}}var jf=(new aa.Component).refs;\nfunction kf(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}\nvar tf={isMounted:function(a){return(a=a._reactInternalFiber)?2===ed(a):!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.tag=rf;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=lf();c=mf(c,a);var d=nf(c);d.tag=\nsf;void 0!==b&&null!==b&&(d.callback=b);of();pf(a,d);qf(a,c)}};function uf(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!dd(c,d)||!dd(e,f):!0}\nfunction vf(a,b,c){var d=!1,e=He;var f=b.contextType;\"object\"===typeof f&&null!==f?f=M(f):(e=J(b)?Ie:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Je(a,e):He);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=tf;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction wf(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&tf.enqueueReplaceState(b,b.state,null)}\nfunction xf(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=jf;var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=M(f):(f=J(b)?Ie:H.current,e.context=Je(a,f));f=a.updateQueue;null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;\"function\"===typeof f&&(kf(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==\ntypeof e.componentWillMount||(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&tf.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState));\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var zf=Array.isArray;\nfunction Af(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;var d=void 0;c&&(1!==c.tag?x(\"309\"):void 0,d=c.stateNode);d?void 0:x(\"147\",a);var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===jf&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}\"string\"!==typeof a?x(\"284\"):void 0;c._owner?void 0:x(\"290\",a)}return a}\nfunction Bf(a,b){\"textarea\"!==a.type&&x(\"31\",\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\")}\nfunction Cf(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=Xe(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,du?(B=q,q=null):B=q.sibling;var w=t(e,q,h[u],k);if(null===w){null===q&&(q=B);break}a&&\nq&&null===w.alternate&&b(e,q);g=f(w,g,u);null===m?l=w:m.sibling=w;m=w;q=B}if(u===h.length)return c(e,q),l;if(null===q){for(;uu?(B=q,q=null):B=q.sibling;var v=t(e,q,w.value,k);if(null===v){q||(q=B);break}a&&q&&null===v.alternate&&b(e,q);g=f(v,g,u);null===m?l=v:m.sibling=v;m=v;q=B}if(w.done)return c(e,q),l;if(null===q){for(;!w.done;u++,w=h.next())w=p(e,w.value,k),null!==w&&(g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);return l}for(q=d(e,q);!w.done;u++,w=h.next())w=A(q,e,u,w.value,k),null!==w&&(a&&null!==w.alternate&&q.delete(null===w.key?u:\nw.key),g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);a&&q.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===Xb&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Vb:a:{l=f.key;for(k=d;null!==k;){if(k.key===l)if(7===k.tag?f.type===Xb:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===Xb?f.props.children:f.props,h);d.ref=Af(a,k,f);d.return=a;a=d;break a}else{c(a,k);break}else b(a,k);k=\nk.sibling}f.type===Xb?(d=Ze(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ye(f.type,f.key,f.props,null,a.mode,h),h.ref=Af(a,d,f),h.return=a,a=h)}return g(a);case Wb:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=bf(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\n\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return=a,a=d):(c(a,d),d=af(f,a.mode,h),d.return=a,a=d),g(a);if(zf(f))return v(a,d,f,h);if(hc(f))return R(a,d,f,h);l&&Bf(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:h=a.type,x(\"152\",h.displayName||h.name||\"Component\")}return c(a,d)}}var Df=Cf(!0),Ef=Cf(!1),Ff={},N={current:Ff},Gf={current:Ff},Hf={current:Ff};function If(a){a===Ff?x(\"174\"):void 0;return a}\nfunction Jf(a,b){G(Hf,b,a);G(Gf,a,a);G(N,Ff,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:he(null,\"\");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=he(b,c)}F(N,a);G(N,b,a)}function Kf(a){F(N,a);F(Gf,a);F(Hf,a)}function Lf(a){If(Hf.current);var b=If(N.current);var c=he(b,a.type);b!==c&&(G(Gf,a,a),G(N,c,a))}function Mf(a){Gf.current===a&&(F(N,a),F(Gf,a))}\nvar Nf=0,Of=2,Pf=4,Qf=8,Rf=16,Sf=32,Tf=64,Uf=128,Vf=Tb.ReactCurrentDispatcher,Wf=0,Xf=null,O=null,P=null,Yf=null,Q=null,Zf=null,$f=0,ag=null,bg=0,cg=!1,dg=null,eg=0;function fg(){x(\"321\")}function gg(a,b){if(null===b)return!1;for(var c=0;c$f&&($f=m)):f=l.eagerReducer===a?l.eagerState:a(f,l.action);g=l;l=l.next}while(null!==l&&l!==d);k||(h=g,e=f);bd(f,b.memoizedState)||(qg=!0);b.memoizedState=f;b.baseUpdate=h;b.baseState=e;c.lastRenderedState=f}return[b.memoizedState,c.dispatch]}\nfunction rg(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};null===ag?(ag={lastEffect:null},ag.lastEffect=a.next=a):(b=ag.lastEffect,null===b?ag.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,ag.lastEffect=a));return a}function sg(a,b,c,d){var e=mg();bg|=a;e.memoizedState=rg(b,c,void 0,void 0===d?null:d)}\nfunction tg(a,b,c,d){var e=ng();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&gg(d,g.deps)){rg(Nf,c,f,d);return}}bg|=a;e.memoizedState=rg(b,c,f,d)}function ug(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function vg(){}\nfunction wg(a,b,c){25>eg?void 0:x(\"301\");var d=a.alternate;if(a===Xf||null!==d&&d===Xf)if(cg=!0,a={expirationTime:Wf,action:c,eagerReducer:null,eagerState:null,next:null},null===dg&&(dg=new Map),c=dg.get(b),void 0===c)dg.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{of();var e=lf();e=mf(e,a);var f={expirationTime:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.last;if(null===g)f.next=f;else{var h=g.next;null!==h&&(f.next=h);g.next=f}b.last=f;if(0===a.expirationTime&&(null===\nd||0===d.expirationTime)&&(d=b.lastRenderedReducer,null!==d))try{var l=b.lastRenderedState,k=d(l,c);f.eagerReducer=d;f.eagerState=k;if(bd(k,l))return}catch(m){}finally{}qf(a,e)}}\nvar kg={readContext:M,useCallback:fg,useContext:fg,useEffect:fg,useImperativeHandle:fg,useLayoutEffect:fg,useMemo:fg,useReducer:fg,useRef:fg,useState:fg,useDebugValue:fg},ig={readContext:M,useCallback:function(a,b){mg().memoizedState=[a,void 0===b?null:b];return a},useContext:M,useEffect:function(a,b){return sg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return sg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,b){return sg(4,Pf|Sf,a,b)},\nuseMemo:function(a,b){var c=mg();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=mg();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=wg.bind(null,Xf,a);return[d.memoizedState,a]},useRef:function(a){var b=mg();a={current:a};return b.memoizedState=a},useState:function(a){var b=mg();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={last:null,dispatch:null,\nlastRenderedReducer:og,lastRenderedState:a};a=a.dispatch=wg.bind(null,Xf,a);return[b.memoizedState,a]},useDebugValue:vg},jg={readContext:M,useCallback:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];c.memoizedState=[a,b];return a},useContext:M,useEffect:function(a,b){return tg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return tg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,\nb){return tg(4,Pf|Sf,a,b)},useMemo:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:pg,useRef:function(){return ng().memoizedState},useState:function(a){return pg(og,a)},useDebugValue:vg},xg=null,yg=null,zg=!1;\nfunction Ag(a,b){var c=K(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function Bg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Cg(a){if(zg){var b=yg;if(b){var c=b;if(!Bg(a,b)){b=De(c);if(!b||!Bg(a,b)){a.effectTag|=2;zg=!1;xg=a;return}Ag(xg,c)}xg=a;yg=Ee(b)}else a.effectTag|=2,zg=!1,xg=a}}function Dg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&18!==a.tag;)a=a.return;xg=a}function Eg(a){if(a!==xg)return!1;if(!zg)return Dg(a),zg=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!xe(b,a.memoizedProps))for(b=yg;b;)Ag(a,b),b=De(b);Dg(a);yg=xg?De(a.stateNode):null;return!0}function Fg(){yg=xg=null;zg=!1}\nvar Gg=Tb.ReactCurrentOwner,qg=!1;function S(a,b,c,d){b.child=null===a?Ef(b,null,c,d):Df(b,a.child,c,d)}function Hg(a,b,c,d,e){c=c.render;var f=b.ref;Ig(b,e);d=hg(a,b,c,d,f,e);if(null!==a&&!qg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),Jg(a,b,e);b.effectTag|=1;S(a,b,d,e);return b.child}\nfunction Kg(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!Ve(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,Lg(a,b,g,d,e,f);a=Ye(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e=c)return Sg(a,b,c);b=Jg(a,b,c);return null!==b?b.sibling:null}}return Jg(a,b,c)}}else qg=!1;b.expirationTime=0;switch(b.tag){case 2:d=\nb.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;var e=Je(b,H.current);Ig(b,c);e=hg(null,b,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;lg();if(J(d)){var f=!0;Oe(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var g=d.getDerivedStateFromProps;\"function\"===typeof g&&kf(b,d,g,a);e.updater=tf;b.stateNode=e;e._reactInternalFiber=b;xf(b,d,a,c);b=Qg(null,b,d,!0,f,\nc)}else b.tag=0,S(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);f=b.pendingProps;a=hf(e);b.type=a;e=b.tag=We(a);f=L(a,f);g=void 0;switch(e){case 0:g=Mg(null,b,a,f,c);break;case 1:g=Og(null,b,a,f,c);break;case 11:g=Hg(null,b,a,f,c);break;case 14:g=Kg(null,b,a,L(a.type,f),d,c);break;default:x(\"306\",a,\"\")}return g;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Mg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,\ne=b.elementType===d?e:L(d,e),Og(a,b,d,e,c);case 3:Rg(b);d=b.updateQueue;null===d?x(\"282\"):void 0;e=b.memoizedState;e=null!==e?e.element:null;yf(b,d,b.pendingProps,null,c);d=b.memoizedState.element;if(d===e)Fg(),b=Jg(a,b,c);else{e=b.stateNode;if(e=(null===a||null===a.child)&&e.hydrate)yg=Ee(b.stateNode.containerInfo),xg=b,e=zg=!0;e?(b.effectTag|=2,b.child=Ef(b,null,d,c)):(S(a,b,d,c),Fg());b=b.child}return b;case 5:return Lf(b),null===a&&Cg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,\ng=e.children,xe(d,e)?g=null:null!==f&&xe(d,f)&&(b.effectTag|=16),Ng(a,b),1!==c&&b.mode&1&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(S(a,b,g,c),b=b.child),b;case 6:return null===a&&Cg(b),null;case 13:return Sg(a,b,c);case 4:return Jf(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Df(b,null,d,c):S(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Hg(a,b,d,e,c);case 7:return S(a,b,b.pendingProps,c),b.child;case 8:return S(a,b,b.pendingProps.children,\nc),b.child;case 12:return S(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;Ug(b,f);if(null!==g){var h=g.value;f=bd(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!I.current){b=Jg(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var l=h.contextDependencies;if(null!==l){g=h.child;for(var k=l.first;null!==k;){if(k.context===d&&0!==\n(k.observedBits&f)){1===h.tag&&(k=nf(c),k.tag=sf,pf(h,k));h.expirationTime=b&&(qg=!0);a.contextDependencies=null}\nfunction M(a,b){if(Yg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)Yg=a,b=1073741823;b={context:a,observedBits:b,next:null};null===Xg?(null===Wg?x(\"308\"):void 0,Xg=b,Wg.contextDependencies={first:b,expirationTime:0}):Xg=Xg.next=b}return a._currentValue}var $g=0,rf=1,sf=2,ah=3,Pg=!1;function bh(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}\nfunction ch(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function nf(a){return{expirationTime:a,tag:$g,payload:null,callback:null,next:null,nextEffect:null}}function dh(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}\nfunction pf(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=bh(a.memoizedState))}else d=a.updateQueue,e=c.updateQueue,null===d?null===e?(d=a.updateQueue=bh(a.memoizedState),e=c.updateQueue=bh(c.memoizedState)):d=a.updateQueue=ch(e):null===e&&(e=c.updateQueue=ch(d));null===e||d===e?dh(d,b):null===d.lastUpdate||null===e.lastUpdate?(dh(d,b),dh(e,b)):(dh(d,b),e.lastUpdate=b)}\nfunction eh(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=bh(a.memoizedState):fh(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function fh(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=ch(b));return b}\nfunction gh(a,b,c,d,e,f){switch(c.tag){case rf:return a=c.payload,\"function\"===typeof a?a.call(f,d,e):a;case ah:a.effectTag=a.effectTag&-2049|64;case $g:a=c.payload;e=\"function\"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return n({},d,e);case sf:Pg=!0}return d}\nfunction yf(a,b,c,d,e){Pg=!1;b=fh(a,b);for(var f=b.baseState,g=null,h=0,l=b.firstUpdate,k=f;null!==l;){var m=l.expirationTime;md?e:d);Ih.current=null;d=void 0;1c?b:c;0===b&&(Fh=null);$h(a,b)}\nfunction ai(a){for(;;){var b=a.alternate,c=a.return,d=a.sibling;if(0===(a.effectTag&1024)){T=a;a:{var e=b;b=a;var f=U;var g=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:J(b.type)&&Ke(b);break;case 3:Kf(b);Le(b);g=b.stateNode;g.pendingContext&&(g.context=g.pendingContext,g.pendingContext=null);if(null===e||null===e.child)Eg(b),b.effectTag&=-3;mh(b);break;case 5:Mf(b);var h=If(Hf.current);f=b.type;if(null!==e&&null!=b.stateNode)nh(e,b,f,g,h),e.ref!==b.ref&&(b.effectTag|=\n128);else if(g){var l=If(N.current);if(Eg(b)){g=b;e=g.stateNode;var k=g.type,m=g.memoizedProps,p=h;e[Fa]=g;e[Ga]=m;f=void 0;h=k;switch(h){case \"iframe\":case \"object\":E(\"load\",e);break;case \"video\":case \"audio\":for(k=0;k\\x3c/script>\",k=e.removeChild(e.firstChild)):\"string\"===typeof e.is?k=k.createElement(p,{is:e.is}):(k=k.createElement(p),\"select\"===p&&(p=k,e.multiple?p.multiple=!0:e.size&&(p.size=e.size))):k=k.createElementNS(l,p);e=k;e[Fa]=m;e[Ga]=g;lh(e,b,!1,!1);p=e;k=f;m=g;var t=h,A=re(k,m);switch(k){case \"iframe\":case \"object\":E(\"load\",\np);h=m;break;case \"video\":case \"audio\":for(h=0;hg&&(g=e),h>g&&(g=h),f=f.sibling;b.childExpirationTime=g}if(null!==T)return T;null!==c&&0===(c.effectTag&1024)&&(null===c.firstEffect&&\n(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1=v)t=0;else if(-1===t||v component higher in the tree to provide a loading indicator or placeholder to display.\"+jc(k))}Nh=!0;m=jh(m,k);h=l;do{switch(h.tag){case 3:h.effectTag|=2048;h.expirationTime=g;g=Ch(h,m,g);eh(h,g);break a;case 1:if(t=m,A=h.type,k=h.stateNode,0===(h.effectTag&64)&&(\"function\"===typeof A.getDerivedStateFromError||null!==k&&\"function\"===typeof k.componentDidCatch&&(null===Fh||!Fh.has(k)))){h.effectTag|=2048;\nh.expirationTime=g;g=Eh(h,t,g);eh(h,g);break a}}h=h.return}while(null!==h)}T=ai(f);continue}}}break}while(1);Kh=!1;Hh.current=c;Yg=Xg=Wg=null;lg();if(e)Lh=null,a.finishedWork=null;else if(null!==T)a.finishedWork=null;else{c=a.current.alternate;null===c?x(\"281\"):void 0;Lh=null;if(Nh){e=a.latestPendingTime;f=a.latestSuspendedTime;g=a.latestPingedTime;if(0!==e&&eb?0:b)):(a.pendingCommitExpirationTime=d,a.finishedWork=c)}}\nfunction sh(a,b){for(var c=a.return;null!==c;){switch(c.tag){case 1:var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Fh||!Fh.has(d))){a=jh(b,a);a=Eh(c,a,1073741823);pf(c,a);qf(c,1073741823);return}break;case 3:a=jh(b,a);a=Ch(c,a,1073741823);pf(c,a);qf(c,1073741823);return}c=c.return}3===a.tag&&(c=jh(b,a),c=Ch(a,c,1073741823),pf(a,c),qf(a,1073741823))}\nfunction mf(a,b){var c=r.unstable_getCurrentPriorityLevel(),d=void 0;if(0===(b.mode&1))d=1073741823;else if(Kh&&!Oh)d=U;else{switch(c){case r.unstable_ImmediatePriority:d=1073741823;break;case r.unstable_UserBlockingPriority:d=1073741822-10*(((1073741822-a+15)/10|0)+1);break;case r.unstable_NormalPriority:d=1073741822-25*(((1073741822-a+500)/25|0)+1);break;case r.unstable_LowPriority:case r.unstable_IdlePriority:d=1;break;default:x(\"313\")}null!==Lh&&d===U&&--d}c===r.unstable_UserBlockingPriority&&\n(0===gi||d=d){a.didError=!1;b=a.latestPingedTime;if(0===b||b>c)a.latestPingedTime=c;df(c,a);c=a.expirationTime;0!==c&&Xh(a,c)}}function Ah(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=lf();b=mf(b,a);a=hi(a,b);null!==a&&(cf(a,b),b=a.expirationTime,0!==b&&Xh(a,b))}\nfunction hi(a,b){a.expirationTimeU&&Sh(),cf(a,b),Kh&&!Oh&&Lh===a||Xh(a,a.expirationTime),ii>ji&&(ii=0,x(\"185\")))}function ki(a,b,c,d,e){return r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){return a(b,c,d,e)})}var li=null,Y=null,mi=0,ni=void 0,W=!1,oi=null,Z=0,gi=0,pi=!1,qi=null,X=!1,ri=!1,si=null,ti=r.unstable_now(),ui=1073741822-(ti/10|0),vi=ui,ji=50,ii=0,wi=null;function xi(){ui=1073741822-((r.unstable_now()-ti)/10|0)}\nfunction yi(a,b){if(0!==mi){if(ba.expirationTime&&(a.expirationTime=b);W||(X?ri&&(oi=a,Z=1073741823,Di(a,1073741823,!1)):1073741823===b?Yh(1073741823,!1):yi(a,b))}\nfunction Ci(){var a=0,b=null;if(null!==Y)for(var c=Y,d=li;null!==d;){var e=d.expirationTime;if(0===e){null===c||null===Y?x(\"244\"):void 0;if(d===d.nextScheduledRoot){li=Y=d.nextScheduledRoot=null;break}else if(d===li)li=e=d.nextScheduledRoot,Y.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===Y){Y=c;Y.nextScheduledRoot=li;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{e>a&&(a=e,b=d);if(d===Y)break;if(1073741823===\na)break;c=d;d=d.nextScheduledRoot}}oi=b;Z=a}var Ei=!1;function di(){return Ei?!0:r.unstable_shouldYield()?Ei=!0:!1}function zi(){try{if(!di()&&null!==li){xi();var a=li;do{var b=a.expirationTime;0!==b&&ui<=b&&(a.nextExpirationTimeToWorkOn=ui);a=a.nextScheduledRoot}while(a!==li)}Yh(0,!0)}finally{Ei=!1}}\nfunction Yh(a,b){Ci();if(b)for(xi(),vi=ui;null!==oi&&0!==Z&&a<=Z&&!(Ei&&ui>Z);)Di(oi,Z,ui>Z),Ci(),xi(),vi=ui;else for(;null!==oi&&0!==Z&&a<=Z;)Di(oi,Z,!1),Ci();b&&(mi=0,ni=null);0!==Z&&yi(oi,Z);ii=0;wi=null;if(null!==si)for(a=si,si=null,b=0;b=c&&(null===si?si=[d]:si.push(d),d._defer)){a.finishedWork=b;a.expirationTime=0;return}a.finishedWork=null;a===wi?ii++:(wi=a,ii=0);r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){Zh(a,b)})}function Dh(a){null===oi?x(\"246\"):void 0;oi.expirationTime=0;pi||(pi=!0,qi=a)}function Gi(a,b){var c=X;X=!0;try{return a(b)}finally{(X=c)||W||Yh(1073741823,!1)}}\nfunction Hi(a,b){if(X&&!ri){ri=!0;try{return a(b)}finally{ri=!1}}return a(b)}function Ii(a,b,c){X||W||0===gi||(Yh(gi,!1),gi=0);var d=X;X=!0;try{return r.unstable_runWithPriority(r.unstable_UserBlockingPriority,function(){return a(b,c)})}finally{(X=d)||W||Yh(1073741823,!1)}}\nfunction Ji(a,b,c,d,e){var f=b.current;a:if(c){c=c._reactInternalFiber;b:{2===ed(c)&&1===c.tag?void 0:x(\"170\");var g=c;do{switch(g.tag){case 3:g=g.stateNode.context;break b;case 1:if(J(g.type)){g=g.stateNode.__reactInternalMemoizedMergedChildContext;break b}}g=g.return}while(null!==g);x(\"171\");g=void 0}if(1===c.tag){var h=c.type;if(J(h)){c=Ne(c,h,g);break a}}c=g}else c=He;null===b.context?b.context=c:b.pendingContext=c;b=e;e=nf(d);e.payload={element:a};b=void 0===b?null:b;null!==b&&(e.callback=b);\nof();pf(f,e);qf(f,d);return d}function Ki(a,b,c,d){var e=b.current,f=lf();e=mf(f,e);return Ji(a,b,c,e,d)}function Li(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function Mi(a,b,c){var d=3=Jh&&(b=Jh-1);this._expirationTime=Jh=b;this._root=a;this._callbacks=this._next=null;this._hasChildren=this._didComplete=!1;this._children=null;this._defer=!0}Ni.prototype.render=function(a){this._defer?void 0:x(\"250\");this._hasChildren=!0;this._children=a;var b=this._root._internalRoot,c=this._expirationTime,d=new Oi;Ji(a,b,null,c,d._onCommit);return d};\nNi.prototype.then=function(a){if(this._didComplete)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};\nNi.prototype.commit=function(){var a=this._root._internalRoot,b=a.firstBatch;this._defer&&null!==b?void 0:x(\"251\");if(this._hasChildren){var c=this._expirationTime;if(b!==this){this._hasChildren&&(c=this._expirationTime=b._expirationTime,this.render(this._children));for(var d=null,e=b;e!==this;)d=e,e=e._next;null===d?x(\"251\"):void 0;d._next=e._next;this._next=b;a.firstBatch=this}this._defer=!1;Bi(a,c);b=this._next;this._next=null;b=a.firstBatch=b;null!==b&&b._hasChildren&&b.render(b._children)}else this._next=\nnull,this._defer=!1};Ni.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var a=this._callbacks;if(null!==a)for(var b=0;b=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};function Qi(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}Gb=Gi;Hb=Ii;Ib=function(){W||0===gi||(Yh(gi,!1),gi=0)};\nfunction Ri(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new Pi(a,!1,b)}\nfunction Si(a,b,c,d,e){var f=c._reactRootContainer;if(f){if(\"function\"===typeof e){var g=e;e=function(){var a=Li(f._internalRoot);g.call(a)}}null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)}else{f=c._reactRootContainer=Ri(c,d);if(\"function\"===typeof e){var h=e;e=function(){var a=Li(f._internalRoot);h.call(a)}}Hi(function(){null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)})}return Li(f._internalRoot)}\nfunction Ti(a,b){var c=2=b){c=a;break}a=a.next}while(a!==d);null===c?c=d:c===d&&(d=h,p());b=c.previous;b.next=c.previous=h;h.next=c;h.previous=\nb}}function v(){if(-1===k&&null!==d&&1===d.priorityLevel){m=!0;try{do u();while(null!==d&&1===d.priorityLevel)}finally{m=!1,null!==d?p():n=!1}}}function t(a){m=!0;var b=e;e=a;try{if(a)for(;null!==d;){var c=exports.unstable_now();if(d.expirationTime<=c){do u();while(null!==d&&d.expirationTime<=c)}else break}else if(null!==d){do u();while(null!==d&&!w())}}finally{m=!1,e=b,null!==d?p():n=!1,v()}}\nvar x=Date,y=\"function\"===typeof setTimeout?setTimeout:void 0,z=\"function\"===typeof clearTimeout?clearTimeout:void 0,A=\"function\"===typeof requestAnimationFrame?requestAnimationFrame:void 0,B=\"function\"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0,C,D;function E(a){C=A(function(b){z(D);a(b)});D=y(function(){B(C);a(exports.unstable_now())},100)}\nif(\"object\"===typeof performance&&\"function\"===typeof performance.now){var F=performance;exports.unstable_now=function(){return F.now()}}else exports.unstable_now=function(){return x.now()};var r,q,w,G=null;\"undefined\"!==typeof window?G=window:\"undefined\"!==typeof global&&(G=global);\nif(G&&G._schedMock){var H=G._schedMock;r=H[0];q=H[1];w=H[2];exports.unstable_now=H[3]}else if(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var I=null,J=function(a){if(null!==I)try{I(a)}finally{I=null}};r=function(a){null!==I?setTimeout(r,0,a):(I=a,setTimeout(J,0,!1))};q=function(){I=null};w=function(){return!1}}else{\"undefined\"!==typeof console&&(\"function\"!==typeof A&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\n\"function\"!==typeof B&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"));var K=null,L=!1,M=-1,N=!1,O=!1,P=0,R=33,S=33;w=function(){return P<=exports.unstable_now()};var T=new MessageChannel,U=T.port2;T.port1.onmessage=function(){L=!1;var a=K,b=M;K=null;M=-1;var c=exports.unstable_now(),f=!1;if(0>=P-c)if(-1!==b&&b<=c)f=!0;else{N||(N=!0,E(V));K=a;M=b;return}if(null!==a){O=!0;try{a(f)}finally{O=!1}}};\nvar V=function(a){if(null!==K){E(V);var b=a-P+S;bb&&(b=8),S=bb?U.postMessage(void 0):N||(N=!0,E(V))};q=function(){K=null;L=!1;M=-1}}exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;\nexports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=g,f=k;g=a;k=exports.unstable_now();try{return b()}finally{g=c,k=f,v()}};exports.unstable_next=function(a){switch(g){case 1:case 2:case 3:var b=3;break;default:b=g}var c=g,f=k;g=b;k=exports.unstable_now();try{return a()}finally{g=c,k=f,v()}};\nexports.unstable_scheduleCallback=function(a,b){var c=-1!==k?k:exports.unstable_now();if(\"object\"===typeof b&&null!==b&&\"number\"===typeof b.timeout)b=c+b.timeout;else switch(g){case 1:b=c+-1;break;case 2:b=c+250;break;case 5:b=c+1073741823;break;case 4:b=c+1E4;break;default:b=c+5E3}a={callback:a,priorityLevel:g,expirationTime:b,next:null,previous:null};if(null===d)d=a.next=a.previous=a,p();else{c=null;var f=d;do{if(f.expirationTime>b){c=f;break}f=f.next}while(f!==d);null===c?c=d:c===d&&(d=a,p());\nb=c.previous;b.next=c.previous=a;a.next=c;a.previous=b}return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)d=null;else{a===d&&(d=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=g;return function(){var c=g,f=k;g=b;k=exports.unstable_now();try{return a.apply(this,arguments)}finally{g=c,k=f,v()}}};exports.unstable_getCurrentPriorityLevel=function(){return g};\nexports.unstable_shouldYield=function(){return!e&&(null!==d&&d.expirationTime) => {\n const { size, color } = {\n ...defaultOption,\n ...option\n }\n const two = new Two({\n type: Two.Types.canvas,\n width: size,\n height: size\n })\n\n const a = two.makeLine(two.width / 2, 0, two.width / 2, two.height)\n const b = two.makeLine(0, two.height / 2, two.width, two.height / 2)\n a.stroke = b.stroke = color\n\n two.update()\n\n return two\n}\n","import Two, { ConstructorParams } from 'two.js'\nexport interface DrawingOption extends ConstructorParams {\n el: SvgDrawing['el']\n penColor?: SvgDrawing['penColor']\n penWidth?: SvgDrawing['penWidth']\n strokeCap?: SvgDrawing['strokeCap'] // butt | round | square | inherit\n strokeLineJoin?: SvgDrawing['strokeLineJoin'] // miter | round | bevel\n}\n\nexport class SvgDrawing extends Two {\n public penColor: Two.Color\n public penWidth: number\n public strokeCap: string\n public strokeLineJoin: string\n private line: Two.Path | null\n private current: Two.Vector\n private el: HTMLElement\n constructor(params: DrawingOption) {\n super(params)\n /**\n * bind methods\n */\n this.drawingStart = this.drawingStart.bind(this)\n this.clearListner = this.clearListner.bind(this)\n this.toSvgXml = this.toSvgXml.bind(this)\n this.toSvgBase64 = this.toSvgBase64.bind(this)\n this.move = this.move.bind(this)\n this.mouseUp = this.mouseUp.bind(this)\n this.mouseMove = this.mouseMove.bind(this)\n this.mouseDown = this.mouseDown.bind(this)\n this.touchStart = this.touchStart.bind(this)\n this.touchMove = this.touchMove.bind(this)\n this.touchEnd = this.touchEnd.bind(this)\n /**\n * Setup parameter\n */\n this.line = null\n // TODO: Fix Two.vector constructor params\n this.current = new Two.Vector(0, 0)\n this.penColor = params.penColor || '#333'\n this.penWidth = params.penWidth || 10\n this.strokeCap = params.strokeCap || 'round'\n this.strokeLineJoin = params.strokeLineJoin || 'round'\n this.type = params.type || Two.Types.svg\n this.el = params.el\n this.width = this.el.clientWidth\n this.height = this.el.clientHeight\n this.drawingStart()\n }\n\n /**\n * toSvgXML\n */\n public toSvgXml(): string | null {\n const domElement: HTMLElement = (this.renderer as any).domElement\n if (!domElement) return null\n return `${\n domElement.innerHTML\n }`\n }\n /**\n * toSvgXML\n */\n public toSvgBase64(): string | null {\n const svgXml = this.toSvgXml()\n if (!svgXml) return null\n return `data:image/svg+xml;base64,${btoa(svgXml)}`\n }\n /**\n * listner clear\n */\n public clearListner() {\n this.el.removeEventListener('mousedown', this.mouseDown)\n this.el.removeEventListener('touchstart', this.touchStart)\n }\n /**\n * DrawingStart\n */\n private drawingStart() {\n this.appendTo(this.el)\n this.el.addEventListener('mousedown', this.mouseDown)\n this.el.addEventListener('touchstart', this.touchStart)\n return this\n }\n /**\n * Drawing Line methods\n */\n private move({ x, y }: { x: number; y: number }): void {\n const rect: ClientRect | DOMRect = this.el.getBoundingClientRect()\n const makePoint = (mx: number, my: number) =>\n new Two.Vector(mx - rect.left, my - rect.top)\n this.current.set(x, y)\n if (this.line) {\n const v = makePoint(x, y)\n this.line.vertices.push(v as Two.Anchor)\n return\n }\n const vprev: Two.Vector = makePoint(this.current.x, this.current.y)\n const vnext: Two.Vector = makePoint(x, y)\n this.line = this.makeCurve([vprev, vnext], true)\n this.line.noFill().stroke = this.penColor\n this.line.linewidth = this.penWidth\n this.line.cap = this.strokeCap\n this.line.join = this.strokeLineJoin\n this.line.vertices.map(v => {\n if (!this.line) return\n v.addSelf(this.line.translation)\n })\n this.line.translation.clear()\n }\n\n /**\n * Drawing MouseEvent\n */\n private mouseMove(e: MouseEvent): void {\n this.move({ x: e.clientX, y: e.clientY })\n }\n private mouseUp(e: MouseEvent) {\n this.el.removeEventListener('mousemove', this.mouseMove)\n this.el.removeEventListener('mouseup', this.mouseUp)\n }\n private mouseDown(e: MouseEvent) {\n this.current.set(e.clientX, e.clientY)\n this.line = null\n this.el.addEventListener('mousemove', this.mouseMove)\n this.el.addEventListener('mouseup', this.mouseUp)\n }\n\n /**\n * Drawing TouchEvent\n */\n private touchMove(e: TouchEvent) {\n e.preventDefault()\n const touch = e.touches[0]\n this.move({\n x: touch.pageX,\n y: touch.pageY\n })\n return false\n }\n private touchEnd(e: TouchEvent) {\n e.preventDefault()\n this.el.removeEventListener('touchmove', this.touchMove)\n this.el.removeEventListener('touchend', this.touchEnd)\n return false\n }\n private touchStart(e: TouchEvent) {\n e.preventDefault()\n const touch = e.touches[0]\n this.current.set(touch.pageX, touch.pageY)\n this.line = null\n this.el.addEventListener('touchmove', this.touchMove)\n this.el.addEventListener('touchend', this.touchEnd)\n return false\n }\n}\n","import Two, { ConstructorParams } from 'two.js'\nexport interface AnimationOption extends ConstructorParams {\n el: SvgAnimation['el']\n shakingRange?: SvgAnimation['shakingRange']\n}\n\nexport class SvgAnimation extends Two {\n public shakingRange: number\n private el: HTMLElement\n constructor(params: AnimationOption) {\n super(params)\n /**\n * bind methods\n */\n this.animationStart = this.animationStart.bind(this)\n this.shaking = this.shaking.bind(this)\n this.initSvgXml = this.initSvgXml.bind(this)\n this.strokeAnimation = this.strokeAnimation.bind(this)\n /**\n * Setup parameter\n */\n // TODO: Fix Two.vector constructor params\n this.shakingRange = params.shakingRange || 2\n this.type = params.type || Two.Types.canvas\n this.el = params.el\n this.width = this.el.clientWidth\n this.height = this.el.clientHeight\n this.animationStart()\n }\n /**\n * Shaking Drawing line\n */\n public shaking(): () => void {\n const randomShaking = (): number =>\n Math.random() * this.shakingRange - this.shakingRange / 2\n const updateShake = (frameCount: any, timeDelta: any) => {\n // shake speed\n if (frameCount % 5 !== 0) return\n this.scene.children.map((child: Two.Object) => {\n if (!(child as Two.Path).vertices) return\n ;(child as Two.Path).vertices.map((v: Two.Anchor | any) => {\n // TODO: define position types\n // v.position is base position\n if (!v.position) {\n v.position = v.clone()\n }\n v.x = v.position.x + randomShaking()\n v.y = v.position.y + randomShaking()\n })\n })\n }\n\n const sceneChildrenRestore = () =>\n this.scene.children.map((child: Two.Object) => {\n const vertices = (child as Two.Path).vertices\n if (!vertices) return\n vertices.map((v: Two.Anchor | any) => {\n // TODO: define position types\n if (!v.position) {\n return\n }\n v.x = v.position.x\n v.y = v.position.y\n delete v.position\n })\n })\n this.bind('update', updateShake).play()\n return () => {\n this.unbind('update', updateShake)\n sceneChildrenRestore()\n }\n }\n /**\n * DrawingStart\n */\n private animationStart(): SvgAnimation {\n this.appendTo(this.el)\n return this\n }\n // TODO: SvgElement XML test\n public initSvgXml(svgNode: SVGElement) {\n this.clear()\n const fresh: Two.Group = this.interpret(svgNode)\n ;(fresh as any).subdivide()\n this.scene.add(fresh)\n }\n\n public strokeAnimation() {\n const distances = calculateDistances(this.scene)\n const total = distances.reduce((to: number, d: number) => to + d, 0)\n const setEnding = (group: Two.Group, ti: number) => {\n const traversed: number = ti * total\n let current = 0\n group.children.map((child: Two.Object, i: number) => {\n const distance = distances[i]\n const min = current\n const max = current + distance\n ;(child as Two.Path).ending = cmap(traversed, min, max, 0, 1)\n current = max\n })\n }\n let t = 0\n const update = (...arg: any[]) => {\n if (t < 0.9999) {\n t += 0.00625\n } else {\n t = 0\n }\n setEnding(this.scene, t)\n }\n this.bind('update', update).play()\n return () => this.unbind('update', update)\n }\n}\n\nfunction calculateDistances(group: Two.Group): number[] {\n return group.children.reduce((distances: number[], child: Two.Object) => {\n let d: number = 0\n let a: Two.Vector\n if (!(child as Two.Path).vertices) return distances\n ;(child as Two.Path).vertices.map((b: Two.Vector, i: number) => {\n if (i > 0) {\n d += a.distanceTo(b)\n }\n a = b\n })\n return [...distances, d]\n }, [])\n}\n\nconst clamp = (v: number, min: number, max: number) =>\n Math.max(Math.min(v, max), min)\n\nconst map = (v: number, i1: number, i2: number, o1: number, o2: number) =>\n o1 + (o2 - o1) * ((v - i1) / (i2 - i1))\n\nconst cmap = (v: number, i1: number, i2: number, o1: number, o2: number) =>\n clamp(map(v, i1, i2, o1, o2), o1, o2)\n","import React, { useEffect, useRef, Fragment, useCallback } from 'react'\nimport Two from 'two.js'\nimport { render } from 'react-dom'\nimport { createGrid } from './createGrid'\nimport { SvgDrawing, SvgAnimation } from '../'\n\nconst size = 30\nconst gridImage = (createGrid({\n size\n}).renderer as any).domElement.toDataURL('image/png')\n\nconst mimeTypeMap = {\n png: 'image/png',\n jpg: 'image/jpeg',\n svg: 'image/svg+xml'\n}\nconst getRandomInt = (max: number): number =>\n Math.floor(Math.random() * Math.floor(max))\nconst getRandomColor = (): string =>\n `#${Array.from({ length: 3 }, () =>\n String(getRandomInt(255).toString(16)).padStart(2, '0')\n ).join('')}`\n\nconst getMimeType = (extention: keyof typeof mimeTypeMap) =>\n mimeTypeMap.hasOwnProperty(extention)\n ? mimeTypeMap[extention]\n : mimeTypeMap['png']\nconst downloadBlob = (base64: string, extention: keyof typeof mimeTypeMap) => {\n const bin = atob(base64.replace(/^.*,/, ''))\n const buffer = new Uint8Array(bin.length)\n for (let i = 0; i < bin.length; i++) {\n buffer[i] = bin.charCodeAt(i)\n }\n const filename = `${new Date().toISOString()}.${extention}`\n const blob = new Blob([buffer.buffer], {\n type: getMimeType(extention)\n })\n if (window.navigator.msSaveBlob) {\n // IE\n window.navigator.msSaveBlob(blob, filename)\n } else if (window.URL && window.URL.createObjectURL) {\n // Firefox, Chrome, Safari\n const a = document.createElement('a')\n a.download = filename\n a.href = window.URL.createObjectURL(blob)\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n } else {\n // Other\n window.open(base64, '_blank')\n }\n}\n\nconst Example = () => {\n const divRef = useRef(null)\n const svgDrawingRef = useRef(null)\n const animationRef = useRef(null)\n const svgAnimationRef = useRef(null)\n const stopShakingRef = useRef<(() => void) | null>(null)\n const stopStrokeRef = useRef<(() => void) | null>(null)\n const stopShaking = useCallback(() => {\n if (stopShakingRef.current) {\n stopShakingRef.current()\n stopShakingRef.current = null\n return true\n }\n return false\n }, [])\n const clickShaking = useCallback(\n (e: React.MouseEvent) => {\n if (stopShaking()) return\n if (!svgAnimationRef.current) return\n stopShakingRef.current = svgAnimationRef.current.shaking()\n },\n [stopShaking]\n )\n const stopStroke = useCallback(() => {\n if (stopStrokeRef.current) {\n stopStrokeRef.current()\n stopStrokeRef.current = null\n return true\n }\n return false\n }, [])\n const clickStroke = useCallback(\n (e: React.MouseEvent) => {\n if (stopStroke()) return\n if (!svgAnimationRef.current) return\n stopStrokeRef.current = svgAnimationRef.current.strokeAnimation()\n },\n [stopStroke]\n )\n const animationFrameUpdate = useCallback(() => {\n if (!svgAnimationRef.current || !svgDrawingRef.current) return\n svgAnimationRef.current.clear()\n // This is nesting dom\n // animation.current.makeGroup(svgDrawingRef.current.scene.clone())\n svgDrawingRef.current.scene.children.map((twoObj: Two.Object) => {\n if (!svgAnimationRef.current) return\n svgAnimationRef.current.scene.add(twoObj.clone())\n })\n svgAnimationRef.current.update()\n }, [])\n const clickDownload = useCallback(\n (extention: keyof typeof mimeTypeMap) => (\n e: React.MouseEvent\n ) => {\n if (!svgAnimationRef.current) return\n const domElemet = (svgAnimationRef.current.renderer as any).domElement\n const blob = domElemet.toDataURL(getMimeType(extention))\n downloadBlob(blob, extention)\n },\n []\n )\n const clickDownloadSVG = useCallback(() => {\n if (!svgDrawingRef.current) return\n const data = svgDrawingRef.current.toSvgBase64()\n if (!data) return\n downloadBlob(data, 'svg')\n }, [])\n const clickClear = useCallback(() => {\n if (svgDrawingRef.current) svgDrawingRef.current.clear()\n stopShaking()\n stopStroke()\n animationFrameUpdate()\n }, [animationFrameUpdate, stopStroke, stopShaking])\n const clickUndo = useCallback(() => {\n if (!svgDrawingRef.current) return\n const path = svgDrawingRef.current.scene.children\n if (path.length === 0) return\n svgDrawingRef.current.remove(path[path.length - 1])\n animationFrameUpdate()\n }, [animationFrameUpdate])\n const clickRandomColor = useCallback(() => {\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.penColor = getRandomColor()\n }, [])\n\n const changePenWidth = useCallback(\n (e: React.ChangeEvent) => {\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.penWidth = Number(e.target.value)\n },\n []\n )\n const changeShakingRange = useCallback(\n (e: React.ChangeEvent) => {\n if (!svgAnimationRef.current) return\n svgAnimationRef.current.shakingRange = Number(e.target.value)\n },\n []\n )\n const changeCap = useCallback((e: React.ChangeEvent) => {\n const cap = e.target.value\n if (!['butt', 'round', 'square'].includes(e.target.value)) return\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.strokeCap = cap\n }, [])\n const changeLineJoin = useCallback(\n (e: React.ChangeEvent) => {\n const lineJoin = e.target.value\n if (!['miter', 'round', 'bevel'].includes(e.target.value)) return\n if (!svgDrawingRef.current) return\n svgDrawingRef.current.strokeLineJoin = lineJoin\n },\n []\n )\n useEffect(() => {\n if (svgDrawingRef.current) return\n if (!divRef.current) return\n svgDrawingRef.current = new SvgDrawing({\n el: divRef.current,\n autostart: true,\n penWidth: 5\n })\n })\n useEffect(() => {\n if (!animationRef.current) return\n svgAnimationRef.current = new SvgAnimation({\n el: animationRef.current,\n type: Two.Types.canvas,\n shakingRange: 5\n })\n })\n return (\n \n
\n pen width\n \n
\n
\n stroke cap\n \n
\n
\n stroke line join\n \n
\n \n \n \n
\n \n \n \n \n \n
\n
\n \n \n \n
\n Shaking Range\n \n
\n
\n \n
\n )\n}\n\nconst app = document.createElement('div')\ndocument.body.appendChild(app)\nrender(, app)\n"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/index.min.js b/lib/index.min.js index c60134b73..610a60da2 100644 --- a/lib/index.min.js +++ b/lib/index.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("two.js")):"function"==typeof define&&define.amd?define(["two.js"],e):"object"==typeof exports?exports["svg-drawing"]=e(require("two.js")):t["svg-drawing"]=e(t["two.js"])}(window,function(t){return function(t){var e={};function n(o){if(e[o])return e[o].exports;var i=e[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(o,i,function(e){return t[e]}.bind(null,i));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(e,n){e.exports=t},function(t,e,n){"use strict";n.r(e);var o,i=n(0),r=n.n(i),s=(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),u=function(t){function e(e){var n=t.call(this,e)||this;return n.drawingStart=n.drawingStart.bind(n),n.clearListner=n.clearListner.bind(n),n.toSvgXml=n.toSvgXml.bind(n),n.toSvgBase64=n.toSvgBase64.bind(n),n.move=n.move.bind(n),n.mouseUp=n.mouseUp.bind(n),n.mouseMove=n.mouseMove.bind(n),n.mouseDown=n.mouseDown.bind(n),n.touchStart=n.touchStart.bind(n),n.touchMove=n.touchMove.bind(n),n.touchEnd=n.touchEnd.bind(n),n.line=null,n.current=new r.a.Vector(0,0),n.penColor=e.penColor||"#333",n.penWidth=e.penWidth||10,n.strokeCap=e.strokeCap||"round",n.strokeLineJoin=e.strokeLineJoin||"round",n.type=e.type||r.a.Types.svg,n.el=e.el,n.width=n.el.clientWidth,n.height=n.el.clientHeight,n.drawingStart(),n}return s(e,t),e.prototype.toSvgXml=function(){var t=this.renderer.domElement;return t?''+t.innerHTML+"":null},e.prototype.toSvgBase64=function(){var t=this.toSvgXml();return t?"data:image/svg+xml;base64,"+btoa(t):null},e.prototype.clearListner=function(){this.el.removeEventListener("mousedown",this.mouseDown),this.el.removeEventListener("touchstart",this.touchStart)},e.prototype.drawingStart=function(){return this.appendTo(this.el),this.el.addEventListener("mousedown",this.mouseDown),this.el.addEventListener("touchstart",this.touchStart),this},e.prototype.move=function(t){var e=this,n=t.x,o=t.y,i=this.el.getBoundingClientRect(),s=function(t,e){return new r.a.Vector(t-i.left,e-i.top)};if(this.current.set(n,o),this.line){var u=s(n,o);this.line.vertices.push(u)}else{var a=s(this.current.x,this.current.y),c=s(n,o);this.line=this.makeCurve([a,c],!0),this.line.noFill().stroke=this.penColor,this.line.linewidth=this.penWidth,this.line.cap=this.strokeCap,this.line.join=this.strokeLineJoin,this.line.vertices.map(function(t){e.line&&t.addSelf(e.line.translation)}),this.line.translation.clear()}},e.prototype.mouseMove=function(t){this.move({x:t.clientX,y:t.clientY})},e.prototype.mouseUp=function(t){this.el.removeEventListener("mousemove",this.mouseMove),this.el.removeEventListener("mouseup",this.mouseUp)},e.prototype.mouseDown=function(t){this.current.set(t.clientX,t.clientY),this.line=null,this.el.addEventListener("mousemove",this.mouseMove),this.el.addEventListener("mouseup",this.mouseUp)},e.prototype.touchMove=function(t){t.preventDefault();var e=t.touches[0];return this.move({x:e.pageX,y:e.pageY}),!1},e.prototype.touchEnd=function(t){return t.preventDefault(),this.el.removeEventListener("touchmove",this.touchMove),this.el.removeEventListener("touchend",this.touchEnd),!1},e.prototype.touchStart=function(t){t.preventDefault();var e=t.touches[0];return this.current.set(e.pageX,e.pageY),this.line=null,this.el.addEventListener("touchmove",this.touchMove),this.el.addEventListener("touchend",this.touchEnd),!1},e}(r.a),a=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function o(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(o.prototype=n.prototype,new o)}}(),c=function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,i,r=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(o=r.next()).done;)s.push(o.value)}catch(t){i={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return s},h=function(){for(var t=[],e=0;e0&&(o+=n.distanceTo(t)),n=t}),h(t,[o])):t},[]),n=e.reduce(function(t,e){return t+e},0),o=0,i=function(){for(var i,r,s,u=[],a=0;a'+t.innerHTML+"":null},e.prototype.toSvgBase64=function(){var t=this.toSvgXml();return t?"data:image/svg+xml;base64,"+btoa(t):null},e.prototype.clearListner=function(){this.el.removeEventListener("mousedown",this.mouseDown),this.el.removeEventListener("touchstart",this.touchStart)},e.prototype.drawingStart=function(){return this.appendTo(this.el),this.el.addEventListener("mousedown",this.mouseDown),this.el.addEventListener("touchstart",this.touchStart),this},e.prototype.move=function(t){var e=this,n=t.x,o=t.y,i=this.el.getBoundingClientRect(),s=function(t,e){return new r.a.Vector(t-i.left,e-i.top)};if(this.current.set(n,o),this.line){var u=s(n,o);this.line.vertices.push(u)}else{var a=s(this.current.x,this.current.y),c=s(n,o);this.line=this.makeCurve([a,c],!0),this.line.noFill().stroke=this.penColor,this.line.linewidth=this.penWidth,this.line.cap=this.strokeCap,this.line.join=this.strokeLineJoin,this.line.vertices.map(function(t){e.line&&t.addSelf(e.line.translation)}),this.line.translation.clear()}},e.prototype.mouseMove=function(t){this.move({x:t.clientX,y:t.clientY})},e.prototype.mouseUp=function(t){this.el.removeEventListener("mousemove",this.mouseMove),this.el.removeEventListener("mouseup",this.mouseUp)},e.prototype.mouseDown=function(t){this.current.set(t.clientX,t.clientY),this.line=null,this.el.addEventListener("mousemove",this.mouseMove),this.el.addEventListener("mouseup",this.mouseUp)},e.prototype.touchMove=function(t){t.preventDefault();var e=t.touches[0];return this.move({x:e.pageX,y:e.pageY}),!1},e.prototype.touchEnd=function(t){return t.preventDefault(),this.el.removeEventListener("touchmove",this.touchMove),this.el.removeEventListener("touchend",this.touchEnd),!1},e.prototype.touchStart=function(t){t.preventDefault();var e=t.touches[0];return this.current.set(e.pageX,e.pageY),this.line=null,this.el.addEventListener("touchmove",this.touchMove),this.el.addEventListener("touchend",this.touchEnd),!1},e}(r.a),a=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function o(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(o.prototype=n.prototype,new o)}}(),c=function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,i,r=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(o=r.next()).done;)s.push(o.value)}catch(t){i={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return s},h=function(){for(var t=[],e=0;e0&&(o+=n.distanceTo(t)),n=t}),h(t,[o])):t},[]),n=e.reduce(function(t,e){return t+e},0),o=0,i=function(){for(var i,r,s,u=[],a=0;a