(function(window){"use strict";function Matrix(t){var e=this;e._t=e.transform,e.a=e.d=1,e.b=e.c=e.e=e.f=0,e.props=[1,0,0,1,0,0],e.cssParts=["matrix(","",")"],e.a1=e.b1=e.c1=e.d1=e.e1=e.f1=0,e.context=t,e.cos=e.sin=0,t&&t.setTransform(1,0,0,1,0,0)}function matrixManagerFunction(){var t=new Matrix,e=function(t,e,a,i,r,n,s,o,h){var m,p,l,c,d,u,f;return m=$M([[1,0,0,0],[0,Math.cos(t),Math.sin(-t),0],[0,Math.sin(t),Math.cos(t),0],[0,0,0,1]]),p=$M([[Math.cos(e),0,Math.sin(e),0],[0,1,0,0],[Math.sin(-e),0,Math.cos(e),0],[0,0,0,1]]),l=$M([[Math.cos(a),Math.sin(-a),0,0],[Math.sin(a),Math.cos(a),0,0],[0,0,1,0],[0,0,0,1]]),d=$M([[i,0,0,0],[0,r,0,0],[0,0,n,0],[0,0,0,1]]),u=m.x(p).x(l).x(d),u=u.transpose(),f=$M([[1,0,0,0],[0,1,0,0],[0,0,1,0],[s,o,h,1]]),u=u.x(f),c="matrix3d(",c+=u.e(1,1).toFixed(5)+","+u.e(1,2).toFixed(5)+","+u.e(1,3).toFixed(5)+","+u.e(1,4).toFixed(5)+",",c+=u.e(2,1).toFixed(5)+","+u.e(2,2).toFixed(5)+","+u.e(2,3).toFixed(5)+","+u.e(2,4).toFixed(5)+",",c+=u.e(3,1).toFixed(5)+","+u.e(3,2).toFixed(5)+","+u.e(3,3).toFixed(5)+","+u.e(3,4).toFixed(5)+",",c+=u.e(4,1).toFixed(5)+","+u.e(4,2).toFixed(5)+","+u.e(4,3).toFixed(5)+","+u.e(4,4).toFixed(5),c+=")"},a=function(e,a,i,r,n){return t.reset().translate(r,n).rotate(e).scale(a,i).toCSS()},i=function(e,a,i,r,n){return t.reset().translate(r,n).rotate(e).scale(a,i).toArray()},r=function(t){return a(t.r,t.s[0],t.s[1],t.p[0],t.p[1])},n=function(t,i){return i?e(-t.tr.r[0],t.tr.r[1],t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.s[2],t.tr.p[0],t.tr.p[1],t.tr.p[2]):a(t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.p[0],t.tr.p[1])},s=function(t,i){return i?e(-t.r[0],t.r[1],t.r[2],t.s[0],t.s[1],t.s[2],t.p[0],t.p[1],t.p[2]):a(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])},o=function(t,e){return e?null:i(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])};return{get2DMatrix:r,getMatrix:n,getMatrix2:s,getMatrixArray:o,getMatrixArrayFromParams:i,getMatrix2FromParams:a}}function styleDiv(t){t.style.position="absolute",t.style.top=0,t.style.left=0,t.style.display="block",t.style.verticalAlign="top",t.style.backfaceVisibility=t.style.webkitBackfaceVisibility="hidden",styleUnselectableDiv(t)}function styleUnselectableDiv(t){t.style.userSelect="none",t.style.MozUserSelect="none",t.style.webkitUserSelect="none",t.style.oUserSelect="none"}function randomString(t,e){void 0===e&&(e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");var a,i="";for(a=t;a>0;--a)i+=e[Math.round(Math.random()*(e.length-1))];return i}function componentToHex(t){var e=t.toString(16);return 1==e.length?"0"+e:e}function rgbToHex(t,e,a){return"#"+colorMap[t]+colorMap[e]+colorMap[a]}function fillToRgba(t,e){if(!cachedColors[t]){var a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);cachedColors[t]=parseInt(a[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)}return"rgba("+cachedColors[t]+","+e+")"}function createColorMap(){var t,e;for(t=0;256>t;t+=1)e=t.toString(16),colorMap[t]=1==e.length?"0"+e:e}function createElement(t,e,a){if(!e){var i=Object.create(t.prototype,a),r={};return i&&"[object Function]"===r.toString.call(i.init)&&i.init(),i}e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.prototype.parent=t.prototype}function defineDescriptor(t,e,a,i){var r={writable:!1,configurable:!1,enumerable:!1,value:a};if(i)for(var n in i)r[n]=i[n];var s={};t&&"[object Function]"===s.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,r)}function defineAccessor(t,e,a){var i,r={enumerable:!1,configurable:!1,get:function(){return i},set:function(t){i=t}};if(a)for(var n in a)r[n]=a[n];var s={};t&&"[object Function]"===s.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,r)}function bezFunction(){function t(t,e,a,i,r,n){return o.abs((a-t)*(n-e)-(r-t)*(i-e))<1e-5}function e(t){return n[t].fnc}function a(t,e,a,i,r){if(r||(r=("bez_"+t+"_"+e+"_"+a+"_"+i).replace(/\./g,"p")),n[r])return n[r];var s,o,h,m,p,l;return n[r]=function(r,n,c,d,u){for(var f,y=n/u,r=y,g=0;++g<14&&(h=3*t,o=3*(a-t)-h,s=1-h-o,f=r*(h+r*(o+r*s))-y,!(Math.abs(f)<.001));)r-=f/(h+r*(2*o+3*s*r));l=3*e,p=3*(i-e)-l,m=1-l-p;var v=r*(l+r*(p+r*m));return d*v+c},n[r]}function i(e,a,i,r){var n=(e.join("_")+"_"+a.join("_")+"_"+i.join("_")+"_"+r.join("_")).replace(/\./g,"p");if(s[n])return s[n];var o,h,m,p,l,c,d,u,f,y,g,v,E=500,b=0,x=null,C={points:[],segmentLength:0};for(t(e[0],e[1],a[0],a[1],i[0],i[1])&&t(e[0],e[1],a[0],a[1],r[0],r[1])&&(E=2),m=i.length,o=0;E>o;o+=1){for(v=[],y=o/(E-1),g=0,h=0;m>h;h+=1)p=e[h]+(i[h]-e[h])*y,l=i[h]+(r[h]-i[h])*y,c=r[h]+(a[h]-r[h])*y,d=p+(l-p)*y,u=l+(c-l)*y,f=d+(u-d)*y,v.push(f),null!==x&&(g+=Math.pow(v[h]-x[h],2));g=Math.sqrt(g),b+=g,C.points.push({partialLength:g,cumulatedLength:b,point:v}),x=v}return C.segmentLength=b,s[n]=C,C}function r(e){var a,i,r,n,s,o,h,m,p,l,c,d,u=e.s,f=e.e,y=e.to,g=e.ti,v=500,E=0,b=null,x={points:[],segmentLength:0};for(t(u[0],u[1],f[0],f[1],u[0]+y[0],u[1]+y[1])&&t(u[0],u[1],f[0],f[1],f[0]+g[0],f[1]+g[1])&&(v=2),r=y.length,a=0;v>a;a+=1){for(d=[],l=a/(v-1),c=0,i=0;r>i;i+=1)n=u[i]+y[i]*l,s=u[i]+y[i]+(f[i]+g[i]-(u[i]+y[i]))*l,o=f[i]+g[i]+-g[i]*l,h=n+(s-n)*l,m=s+(o-s)*l,p=h+(m-h)*l,d.push(p),null!==b&&(c+=Math.pow(d[i]-b[i],2));c=Math.sqrt(c),E+=c,x.points.push({partialLength:c,cumulatedLength:E,point:d}),b=d}x.segmentLength=E,e.bezierData=x}var n=[],s={},o=Math,h={getEasingCurve:a,getEasingCurveByIndex:e,drawBezierCurve:i,buildBezierData:r};return h}function dataFunctionManager(){function t(t,e,a){var i,r=s(t,e,a),n=[];for(i=0;e>i;i+=1)n.push(Math.floor(r[i]*f));return n}function e(t,e){var a,i,r,n=t.length;for(a=0;n>a;a+=1)if(void 0!==t[a].t)if(t[a].s instanceof Array)for(r=t[a].s.length,i=0;r>i;i+=1)t[a].s[i]*=e,t[a].e[i]*=e;else t[a].s&&(t[a].s*=e,t[a].e*=e);else t[a]=t[a]*e}function a(r){var s,o,h,m,p,l,c,d,u,f,y,g=r.length;for(c=0;g>c;c+=1){if(h=r[c],s=h.outPoint-h.startTime,o=h.startTime,h.layerName=n(h.layerName),h.parent&&(h.parent=n(h.parent)),h.renderedFrame={},h.renderedData={},m=[],p=-1,h.tm&&(h.tm=t(h.tm,s,o)),h.ks.o instanceof Array?e(h.ks.o,.01):h.ks.o/=100,h.ks.s instanceof Array?e(h.ks.s,.01):h.ks.s/=100,h.ks.r instanceof Array?e(h.ks.r,v):h.ks.r*=v,h.hasMask){var E=h.masksProperties;for(u=E.length,d=0;u>d;d+=1)if(E[d].pt.i)i(E[d].pt);else for(y=E[d].pt.length,f=0;y>f;f+=1)E[d].pt[f].s&&(i(E[d].pt[f].s[0]),i(E[d].pt[f].e[0]))}if("PreCompLayer"==h.type)a(h.layers);else if("ShapeLayer"==h.type)for(u=h.shapes.length,d=0;u>d;d+=1)if(l=h.shapes[d],l.renderedData={},l.tr.o instanceof Array?e(l.tr.o,.01):l.tr.o/=100,l.tr.s instanceof Array?e(l.tr.s,.01):l.tr.s/=100,l.tr.r instanceof Array?e(l.tr.r,v):l.tr.r*=v,l.fl&&(l.fl.o instanceof Array?e(l.fl.o,.01):l.fl.o*=.01),l.st&&(l.st.o instanceof Array?e(l.st.o,.01):l.st.o*=.01),l.ks)if(l.ks.i)i(l.ks);else for(y=l.ks.length,f=0;y>f;f+=1)l.ks[f].s&&(i(l.ks[f].s[0]),i(l.ks[f].e[0]))}}function i(t){var e,a=t.i.length;for(e=0;a>e;e+=1)t.i[e][0]+=t.v[e][0],t.i[e][1]+=t.v[e][1],t.o[e][0]+=t.v[e][0],t.o[e][1]+=t.v[e][1]}function r(t){g[t._id]={data:t,renderedFrames:[]},f=t.animation.frameRate,a(t.animation.layers)}function n(t){return t=t.replace(/ /g,"_"),t=t.replace(/-/g,"_"),t=t.replace(/\./g,"_"),t=t.replace(/\//g,"_")}function s(t,e,a){var i,r,n=[];if(!(t instanceof Array)||null==t[0].t)return n.push(t),n;var s,o;n=[];var h,m,p,l=[];r=t.length;var c,d=1e3,u=[],f=[];for(i=0;r>i;i+=1)if(s=t[i],s.t-=a,s.to){var y,g,v,E,b,x,C,c,S,F,A=0,I=null,w={points:[],length:0};for(y=0;d>y;y+=1)F=[],c=y/(d-1),S=0,u=[],f=[],s.to.forEach(function(t,e){null==u[e]&&(u[e]=s.s[e]+s.to[e],f[e]=s.e[e]+s.ti[e]),g=s.s[e]+(u[e]-s.s[e])*c,v=u[e]+(f[e]-u[e])*c,E=f[e]+(s.e[e]-f[e])*c,b=g+(v-g)*c,x=v+(E-v)*c,C=b+(x-b)*c,F.push(C),null!==I&&(S+=Math.pow(F[e]-I[e],2))}),S=Math.sqrt(S),A+=S,w.points.push({partialLength:A,point:F}),I=F,s.bezierData=w;w.segmentLength=A}var k=0,M=0;for(i=0;e>i;i+=1){h=k;for(var D=!1;r-1>h;){if(s=t[h],o=t[h+1],i<s.t&&0==h){for(p=s.s.length,l=[],m=0;p>m;m+=1)l.push(s.s[m]);n.push(l),D=!0,k!=h&&(k=h,M=0);break}if(i>=s.t&&i<o.t){if(l=[],s.to){c=bez.getEasingCurve(s.o.x,s.o.y,s.i.x,s.i.y)("",i-s.t,0,1,o.t-s.t);var y,_,T,w=s.bezierData,P=w.segmentLength*c;for(m=M;m<w.points.length;){if(0==i||0==P||0==c){l=w.points[m].point,M=m;break}if(m==w.points.length-1)l=w.points[m].point;else if(P>w.points[m].partialLength&&P<w.points[m+1].partialLength){for(_=w.points[m].point.length,T=(P-w.points[m].partialLength)/(w.points[m+1].partialLength-w.points[m].partialLength),y=0;_>y;y+=1)l.push(w.points[m].point[y]+(w.points[m+1].point[y]-w.points[m].point[y])*T);M=m;break}m+=1}}else{var N,z,L,V;s.s.forEach(function(t,e){if(1!==s.h&&(s.o.x instanceof Array?(N=s.o.x[e],z=s.o.y[e],L=s.i.x[e],V=s.i.y[e]):(N=s.o.x,z=s.o.y,L=s.i.x,V=s.i.y),c=bez.getEasingCurve(N,z,L,V)("",i-s.t,0,1,o.t-s.t)),t.i){var a={i:[],o:[],v:[]};t.i.forEach(function(i,r){var n=[],o=[],h=[];i.forEach(function(a,i){1===s.h?(n.push(a),o.push(t.o[r][i]),h.push(t.v[r][i])):(n.push(a+(s.e[e].i[r][i]-a)*c),o.push(t.o[r][i]+(s.e[e].o[r][i]-t.o[r][i])*c),h.push(t.v[r][i]+(s.e[e].v[r][i]-t.v[r][i])*c))}),a.i.push(n),a.o.push(o),a.v.push(h)}),l.push(a)}else l.push(1===s.h?t:t+(s.e[e]-t)*c)})}n.push(l),D=!0,k!=h&&(k=h,M=0);break}h+=1}0==D&&(s=t[t.length-2],l=[],s.e.forEach(function(t){l.push(t)}),n.push(l))}for(h=n.length;e>h;)n.push(l),h+=1;return n}function o(t,e,a,i,r){if(!t.length)return t;if(null==t[0].t)return t[i];var n,s,o;if(r)return n=t[t.__lastKey],n.to?(o=n.bezierData,0==n.__type?o.points[n.__lastPoint].point[i]:o.points[n.__lastPoint].point[i]+(o.points[n.__lastPoint+1].point[i]-o.points[n.__lastPoint].point[i])*n.__lastPerc):1===n.h?n.s[i]:n.s[i]+(n.e[i]-n.s[i])*n.__lastPerc;var h,m=0,p=t.length-1,l=1;void 0!==t.__lastFrameNum&&(m=t.__lastKey,t.__lastFrameNum>e&&(l=-1));var c=!0;for(t.__lastFrameNum==e?(c=!1,n=t[m],s=t[m+1]):m==p?m-=1:-1==m&&(m=0);!(!c||(n=t[m],s=t[m+1],m==p-1&&e>=s.t-a)||s.t-a>e&&1==l);){if(s.t-a<e&&-1==l){m+=1,n=t[m],s=t[m+1];break}p-1>m&&1==l||m>0&&-1==l?m+=l:c=!1}t.__lastKey=m,t.__lastFrameNum=e,n.to&&!n.bezierData&&bez.buildBezierData(n);var d,u=0;if(!n.to){var f,y,g,v;if(1!==n.h){n.o.x instanceof Array?(f=n.o.x[i],y=n.o.y[i],g=n.i.x[i],v=n.i.y[i]):(f=n.o.x,y=n.o.y,g=n.i.x,v=n.i.y);var E;n.__fnct?E=n.__fnct:(E=bez.getEasingCurve(f,y,g,v),n.__fnct=E),d=E("",e-(n.t-a),0,1,s.t-a-(n.t-a)),e>=s.t-a?d=1:e<n.t-a&&(d=0)}return 1===n.h?(n.__type=0,n.s[i]):(n.__lastPerc=d,n.__type=0,n.s[i]+(n.e[i]-n.s[i])*d)}if(o=n.bezierData,e>=s.t-a)return n.__lastPoint=o.points.length-1,n.__type=0,o.points[o.points.length-1].point[i];if(e<n.t-a)return n.__lastPoint=0,n.__type=0,o.points[0].point[i];var E;n.__fnct?E=n.__fnct:(E=bez.getEasingCurve(n.o.x,n.o.y,n.i.x,n.i.y),n.__fnct=E),d=E("",e-(n.t-a),0,1,s.t-a-(n.t-a));var b,x=o.segmentLength*d,C=0;for(l=1,void 0!==n.__lastPoint&&(u=n.__lastPoint,C=o.points[u].cumulatedLength,x<n.__lastDistanceInLine&&(l=-1)),c=!0,h=o.points.length;c;){if(C+=o.points[u].partialLength*l,0==e||0==x||0==d)return n.__lastPoint=u,n.__lastDistanceInLine=x,n.__type=0,o.points[u].point[i];if(u==o.points.length-1)return n.__lastPoint=u,n.__lastDistanceInLine=x,n.__type=0,o.points[u].point[i];if(x>C&&x<C+o.points[u+1].partialLength)return b=(x-C)/o.points[u+1].partialLength,n.__lastPoint=u,n.__lastDistanceInLine=x,n.__type=1,n.__lastPerc=b,o.points[u].point[i]+(o.points[u+1].point[i]-o.points[u].point[i])*b;h-1>u&&1==l||u>0&&-1==l?u+=l:c=!1}}function h(t,e,a,i){var r,n,s,o,h,m;if(!t.length)return"p"==i.type?(b.px=t,b.py=t):"s"==i.type?(b.sx=t,b.sy=t):"r"==i.type&&(b.r=t),i.toArray?[t]:t;if(null==t[0].t)return"p"==i.type?(b.px=t[0],b.py=t[1]):"s"==i.type?(b.sx=t[0],b.sy=t[1]):"r"==i.type&&(b.r=t[0]),t;h=0,m=t.length-1;var p=1,l=!0;for(void 0!==t.__lastFrameNum&&(h=t.__lastKey,t.__lastFrameNum>e?p=-1:t.__lastFrameNum==e?(l=!1,r=t[h],n=t[h+1]):h==m?h-=1:-1==h&&(h=0));!(!l||(r=t[h],n=t[h+1],h==m-1&&e>=n.t-a)||n.t-a>e&&1==p);){if(n.t-a<e&&-1==p){h+=1,r=t[h],n=t[h+1];break}m-1>h&&1==p||h>0&&-1==p?h+=p:l=!1}t.__lastKey=h,t.__lastFrameNum=e,r.to&&!r.bezierData&&bez.buildBezierData(r);var c,d,u,f=0;if("default"==i.type&&(s=[]),r.to){if(o=r.bezierData,e>=n.t-a)return"p"==i.type?(b.px=o.points[o.points.length-1].point[0],b.py=o.points[o.points.length-1].point[1]):"s"==i.type?(b.sx=o.points[o.points.length-1].point[0],b.sy=o.points[o.points.length-1].point[1]):"r"==i.type&&(b.r=o.points[o.points.length-1].point[0]),o.points[o.points.length-1].point;if(e<r.t-a)return"p"==i.type?(b.px=o.points[0].point[0],b.py=o.points[0].point[1]):"s"==i.type?(b.sx=o.points[0].point[0],b.sy=o.points[0].point[1]):"r"==i.type&&(b.r=o.points[0].point[0]),o.points[0].point;var y;r.__fnct?y=r.__fnct:(y=bez.getEasingCurve(r.o.x,r.o.y,r.i.x,r.i.y,r.n),r.__fnct=y),u=y("",e-(r.t-a),0,1,n.t-a-(r.t-a));var g,v=o.segmentLength*u,E=0;for(p=1,void 0!==r.__lastPoint&&(f=r.__lastPoint,E=o.points[f].cumulatedLength,v<r.__lastDistanceInLine&&(p=-1)),l=!0,I=o.points.length;l;){if(E+=o.points[f].partialLength*p,0==e||0==v||0==u){"p"==i.type?(b.px=o.points[f].point[0],b.py=o.points[f].point[1]):"s"==i.type?(b.sx=o.points[f].point[0],b.sy=o.points[f].point[1]):"r"==i.type?b.r=o.points[f].point[0]:s=o.points[f].point,r.__lastPoint=f,r.__lastDistanceInLine=v;break}if(f==o.points.length-1){"p"==i.type?(b.px=o.points[f].point[0],b.py=o.points[f].point[1]):"s"==i.type?(b.sx=o.points[f].point[0],b.sy=o.points[f].point[1]):"r"==i.type?b.r=o.points[f].point[0]:s=o.points[f].point,r.__lastPoint=f,r.__lastDistanceInLine=v;break}if(v>E&&v<E+o.points[f+1].partialLength){if(g=(v-E)/o.points[f+1].partialLength,"p"==i.type)b.px=o.points[f].point[0]+(o.points[f+1].point[0]-o.points[f].point[0])*g,b.py=o.points[f].point[1]+(o.points[f+1].point[1]-o.points[f].point[1])*g;else if("s"==i.type)b.sx=o.points[f].point[0]+(o.points[f+1].point[0]-o.points[f].point[0])*g,b.sy=o.points[f].point[1]+(o.points[f+1].point[1]-o.points[f].point[1])*g;else if("r"==i.type)b.r=o.points[f].point[0]+(o.points[f+1].point[0]-o.points[f].point[0])*g;else for(d=o.points[f].point.length,c=0;d>c;c+=1)s.push(o.points[f].point[c]+(o.points[f+1].point[c]-o.points[f].point[c])*g);r.__lastPoint=f,r.__lastDistanceInLine=v;break}I-1>f&&1==p||f>0&&-1==p?f+=p:l=!1}}else{var x,C,S,F;for(m=r.s.length,h=0;m>h;h+=1){if(1!==r.h){r.o.x instanceof Array?(x=r.o.x[h],C=r.o.y[h],S=r.i.x[h],F=r.i.y[h]):(x=r.o.x,C=r.o.y,S=r.i.x,F=r.i.y);var y;r.__fnct?y=r.__fnct:(y=bez.getEasingCurve(x,C,S,F),r.__fnct=y),u=y("",e-(r.t-a),0,1,n.t-a-(r.t-a)),e>=n.t-a?u=1:e<r.t-a&&(u=0)}if(r.s[h].i){var A={i:[],o:[],v:[]},I=r.s[h].i.length;for(f=0;I>f;f+=1){var w=[],k=[],M=[];for(d=r.s[h].i[f].length,c=0;d>c;c+=1)1===r.h?(w.push(r.s[h].i[f][c]),k.push(r.s[h].o[f][c]),M.push(r.s[h].v[f][c])):(w.push(r.s[h].i[f][c]+(r.e[h].i[f][c]-r.s[h].i[f][c])*u),k.push(r.s[h].o[f][c]+(r.e[h].o[f][c]-r.s[h].o[f][c])*u),M.push(r.s[h].v[f][c]+(r.e[h].v[f][c]-r.s[h].v[f][c])*u));A.i.push(w),A.o.push(k),A.v.push(M)}s.push(A)}else 1===r.h?"p"==i.type?0==h?b.px=r.s[h]:1==h&&(b.py=r.s[h]):"s"==i.type?0==h?b.sx=r.s[h]:1==h&&(b.sy=r.s[h]):"r"==i.type?b.r=r.s[h]:s.push(r.s[h]):"p"==i.type?0==h?b.px=r.s[h]+(r.e[h]-r.s[h])*u:1==h&&(b.py=r.s[h]+(r.e[h]-r.s[h])*u):"s"==i.type?0==h?b.sx=r.s[h]+(r.e[h]-r.s[h])*u:1==h&&(b.sy=r.s[h]+(r.e[h]-r.s[h])*u):"r"==i.type?b.r=r.s[h]+(r.e[h]-r.s[h])*u:s.push(r.s[h]+(r.e[h]-r.s[h])*u)}}return s}function m(t,e){var a,i,r,n,s,o,h="";if(!(t instanceof Array)){for(a=t.v,i=t.o,r=t.i,o=a.length,h+="M"+a[0].join(","),s=1;o>s;s++)h+=" C"+i[s-1].join(",")+" "+r[s].join(",")+" "+a[s].join(",");return e!==!1&&(h+=" C"+i[s-1].join(",")+" "+r[0].join(",")+" "+a[0].join(",")),h}var m,p=t.length;for(h="",m=0;p>m;m+=1){for(n=t[m],a=n.v,i=n.o,r=n.i,o=a.length,h+="M"+a[0].join(","),s=1;o>s;s++)h+=" C"+i[s-1].join(",")+" "+r[s].join(",")+" "+a[s].join(",");e!==!1&&(h+=" C"+i[s-1].join(",")+" "+r[0].join(",")+" "+a[0].join(","))}return h}function p(t,e,a){var i,r,n,s,c,d,u,f,g,v,b,x,C,S,F,A,I,w,k,M,D,_,T,P,N,z,L={},V=t.length;for(M=0;V>M;M+=1)if(D=t[M],F=e-D.startTime,!(e<D.inPoint||e>D.outPoint||D.an[F])){if(i={},E.arrayFlag=!1,E.type="default",i.a=h(D.ks.a,F,D.startTime,E),E.arrayFlag=!1,E.type="default",i.o=h(D.ks.o,F,D.startTime,E),E.arrayFlag=!1,E.type="p",_=o(D.ks.p,F,D.startTime,0),T=o(D.ks.p,F,D.startTime,1,!0),E.arrayFlag=!0,E.type="r",z=o(D.ks.r,F,D.startTime,0),E.arrayFlag=!0,E.type="s",P=o(D.ks.s,F,D.startTime,0),N=o(D.ks.s,F,D.startTime,1,!0),w={},w.an={tr:i},E.arrayFlag=!1,E.type="default","canvas"==a?w.an.matrixArray=y.getMatrixArrayFromParams(z,P,N,_,T):w.an.matrixValue=y.getMatrix2FromParams(z,P,N,_,T),D.renderedData[F]=w,D.hasMask)for(r=D.masksProperties,I=r.length,A=0;I>A;A+=1)r[A].pathStrings||(r[A].pathStrings=[],r[A].pathVertices=[],r[A].opacity=[]),n=h(r[A].pt,F,D.startTime,E),r[A].pathVertices[F]=n instanceof Array?n:[n],"svg"==a&&(r[A].pathStrings[F]=m(n,r[A].cl)),r[A].opacity[F]=h(r[A].o,F,D.startTime,E),r[A].opacity[F]=r[A].opacity[F]instanceof Array?r[A].opacity[F][0]/100:r[A].opacity[F]/100;if("PreCompLayer"==D.type)s=D.tm?D.tm[F]<0?0:D.tm[F]:F,p(D.layers,s,a);else if("ShapeLayer"==D.type)for(I=D.shapes.length,A=0;I>A;A+=1){if(k={},c=D.shapes[A],c.renderedData[F]=k,c._created||(c.an.tr=[],c.an.renderedFrame={},c.ks?c.an.path=[]:c.el?c.an.ell=[]:c.rc&&(c.an.rect=[]),c.fl&&(c.an.fill=[]),c.st&&(c.an.stroke=[])),c.trim&&!c._created&&(c.trim.an=[]),c.fl&&(u=h(c.fl.c,F,D.startTime,E),d=h(c.fl.o,F,D.startTime,E),k.fill={opacity:d instanceof Array?d[0]:d},"canvas"==a?(l(u),k.fill.color=u):k.fill.color=rgbToHex(Math.round(u[0]),Math.round(u[1]),Math.round(u[2]))),c.ks?(f=h(c.ks,F,D.startTime,E),k.path={pathNodes:f,closed:c.closed},"svg"==a&&(k.path.pathString=m(f,c.closed))):c.el?(x=h(c.el.p,F,D.startTime,E),C=h(c.el.s,F,D.startTime,E),k.ell={p:x,size:C}):c.rc&&(x=h(c.rc.p,F,D.startTime,E),C=h(c.rc.s,F,D.startTime,E),S=h(c.rc.r,F,D.startTime,E),k.rect={position:x,size:C,roundness:S}),c.st&&(g=h(c.st.c,F,D.startTime,E),v=h(c.st.o,F,D.startTime,E),b=h(c.st.w,F,D.startTime,E),k.stroke={opacity:v instanceof Array?v[0]:v,width:b instanceof Array?b[0]:b},"canvas"==a?(l(g),k.stroke.color=g):k.stroke.color=rgbToHex(Math.round(g[0]),Math.round(g[1]),Math.round(g[2]))),L={},L.a=h(c.tr.a,F,D.startTime,E),L.o=h(c.tr.o,F,D.startTime,E),E.arrayFlag=!0,E.type="s",P=o(c.tr.s,F,D.startTime,0),N=o(c.tr.s,F,D.startTime,1,!0),E.arrayFlag=!0,E.type="r",z=o(c.tr.r,F,D.startTime,0),E.arrayFlag=!1,E.type="p",_=o(c.tr.p,F,D.startTime,0),T=o(c.tr.p,F,D.startTime,1,!0),E.arrayFlag=!1,E.type="default","canvas"==a?L.mtArr=y.getMatrixArrayFromParams(z,P,N,_,T):L.mt=y.getMatrix2FromParams(z,P,N,_,T),c.an.tr[F]=L,k.tr=L,c.trim){var R=h(c.trim.s,F,D.startTime,E),B=h(c.trim.e,F,D.startTime,E),j=h(c.trim.o,F,D.startTime,E);k.trim={s:R,e:B,o:j}}c._created||(c._created=!0)}}}function l(t){var e,a=t.length;for(e=0;a>e;e+=1)t[e]=Math.round(t[e])}function c(t,e){for(var a=1;a>0;){if(e+=1,e>=t.data.animation.totalFrames){t.renderFinished=!0;break}t.renderedFrames[e]||(d(t.data._id,e),a-=1)}}function d(t,e){return 2==g[t].renderedFrames[e]?void(g[t].renderFinished||c(g[t],e)):(g[t].renderedFrames[e]=2,void p(g[t].data.animation.layers,e,g[t].data._animType))}function u(t){var e,a=g[t].data,i=a.animation.totalFrames,r=[];for(e=0;i>e;e+=1)r.push({num:e,data:d(t,e)})}var f=0,y=new MatrixManager,g={},v=Math.PI/180,E={arrayFlag:!1},b={r:0,sx:1,sy:1,px:1,py:1},x={};return x.completeData=r,x.renderFrame=d,x.renderAllFrames=u,x}function SVGRenderer(t){this.animationItem=t,this.layers=null,this.lastFrame=-1}function CanvasRenderer(t){this.animationItem=t,this.lastFrame=-1}function MaskElement(){}function ICompElement(t,e){this.parent.constructor.call(this,t,e),this.layers=t.layers}function IImageElement(t,e){this.animationItem=e,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e)}function IShapeElement(t,e){this.shapes=[],this.parent.constructor.call(this,t,e)}function ShapeItemElement(t){this.data=t,this.shapeG=document.createElementNS(svgNS,"g"),this.pathLength=0,this.cachedData=[],this.renderedFrame={path:"",stroke:{},fill:{},tr:{a:[]},trim:{},ellipse:{},rect:{}},"pathShape"===this.data.type?this.shape=document.createElementNS(svgNS,"path"):"rectShape"===this.data.type?this.shape=document.createElementNS(svgNS,"rect"):"ellipseShape"===this.data.type?(this.shape=document.createElementNS(svgNS,"ellipse"),this.data.trim&&this.adjustTrim()):this.shape=document.createElementNS(svgNS,"path"),this.data.trim?this.shape.setAttribute("stroke-linecap","round"):(this.shape.setAttribute("stroke-linejoin","round"),this.shape.setAttribute("stroke-linecap","round")),this.data.renderedData||(this.data.renderedData={}),this.shape.setAttribute("name",this.data.name),styleUnselectableDiv(this.shapeG),styleUnselectableDiv(this.shape),this.shapeG.appendChild(this.shape)}function ISolidElement(t,e){this.parent.constructor.call(this,t,e)}function ITextElement(t,e){this.parent.constructor.call(this,t,e)}function CVBaseElement(t,e){this.renderer=e,this.data=t,this.currentAnimData=null,this.init()}function CVCompElement(t,e){this.parent.constructor.call(this,t,e),this.layers=t.layers}function CVImageElement(t,e){this.renderer=e,this.animationItem=e.animationItem,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e),this.animationItem.pendingElements+=1}function CVShapeElement(t,e){this.shapes=[],this.parent.constructor.call(this,t,e)}function CVShapeItemElement(t,e){this.data=t,this.renderer=e,this.frameNum=-1,this.renderedPaths={},this.trims=[]}function CVSolidElement(t,e){this.parent.constructor.call(this,t,e)}function CVTextElement(t,e){this.parent.constructor.call(this,t,e)}function CVMaskElement(){}var svgNS="http://www.w3.org/2000/svg";Matrix.prototype={concat:function(t){return this.clone()._t(t.a,t.b,t.c,t.d,t.e,t.f)},flipX:function(){return this._t(-1,0,0,1,0,0)},flipY:function(){return this._t(1,0,0,-1,0,0)},reflectVector:function(t,e){var a=this.applyToPoint(0,1),i=2*(a.x*t+a.y*e);return t-=i*a.x,e-=i*a.y,{x:t,y:e}},reset:function(){return this.setTransform(1,0,0,1,0,0)},rotate:function(t){return 0==t?this:(this.cos=Math.cos(t),this.sin=Math.sin(t),this._t(this.cos,this.sin,-this.sin,this.cos,0,0))},rotateFromVector:function(t,e){return this.rotate(Math.atan2(e,t))},rotateDeg:function(t){return this.rotate(t*Math.PI/180)},scaleU:function(t){return this._t(t,0,0,t,0,0)},scale:function(t,e){return 1==t&&1==e?this:this._t(t,0,0,e,0,0)},scaleX:function(t){return this._t(t,0,0,1,0,0)},scaleY:function(t){return this._t(1,0,0,t,0,0)},shear:function(t,e){return this._t(1,e,t,1,0,0)},shearX:function(t){return this._t(1,0,t,1,0,0)},shearY:function(t){return this._t(1,t,0,1,0,0)},skew:function(t,e){return this.shear(Math.tan(t),Math.tan(e))},skewX:function(t){return this.shearX(Math.tan(t))},skewY:function(t){return this.shearY(Math.tan(t))},setTransform:function(t,e,a,i,r,n){return this.props[0]=t,this.props[1]=e,this.props[2]=a,this.props[3]=i,this.props[4]=r,this.props[5]=n,this._x()},translate:function(t,e){return this._t(1,0,0,1,t,e)},translateX:function(t){return this._t(1,0,0,1,t,0)},translateY:function(t){return this._t(1,0,0,1,0,t)},transform:function(t,e,a,i,r,n){return this.a1=this.props[0],this.b1=this.props[1],this.c1=this.props[2],this.d1=this.props[3],this.e1=this.props[4],this.f1=this.props[5],this.props[0]=this.a1*t+this.c1*e,this.props[1]=this.b1*t+this.d1*e,this.props[2]=this.a1*a+this.c1*i,this.props[3]=this.b1*a+this.d1*i,this.props[4]=this.a1*r+this.c1*n+this.e1,this.props[5]=this.b1*r+this.d1*n+this.f1,this._x()},divide:function(t){if(!t.isInvertible())throw"Input matrix is not invertible";var e=t.inverse();return this._t(e.a,e.b,e.c,e.d,e.e,e.f)},divideScalar:function(t){var e=this;return e.a/=t,e.b/=t,e.c/=t,e.d/=t,e.e/=t,e.f/=t,e._x()},inverse:function(){if(this.isIdentity())return new Matrix;if(this.isInvertible()){var t=this,e=t.a,a=t.b,i=t.c,r=t.d,n=t.e,s=t.f,o=new Matrix,h=e*r-a*i;return o.a=r/h,o.b=-a/h,o.c=-i/h,o.d=e/h,o.e=(i*s-r*n)/h,o.f=-(e*s-a*n)/h,o}throw"Matrix is not invertible."},interpolate:function(t,e,a){var i=this,r=a?new Matrix(a):new Matrix;return r.a=i.a+(t.a-i.a)*e,r.b=i.b+(t.b-i.b)*e,r.c=i.c+(t.c-i.c)*e,r.d=i.d+(t.d-i.d)*e,r.e=i.e+(t.e-i.e)*e,r.f=i.f+(t.f-i.f)*e,r._x()},interpolateAnim:function(t,e,a){var i=this,r=a?new Matrix(a):new Matrix,n=i.decompose(),s=t.decompose(),o=n.rotation+(s.rotation-n.rotation)*e,h=n.translate.x+(s.translate.x-n.translate.x)*e,m=n.translate.y+(s.translate.y-n.translate.y)*e,p=n.scale.x+(s.scale.x-n.scale.x)*e,l=n.scale.y+(s.scale.y-n.scale.y)*e;return r.translate(h,m),r.rotate(o),r.scale(p,l),r._x()},decompose:function(t){var e=this,a=e.a,i=e.b,r=e.c,n=e.d,s=Math.acos,o=Math.atan,h=Math.sqrt,m=Math.PI,p={x:e.e,y:e.f},l=0,c={x:1,y:1},d={x:0,y:0},u=a*n-i*r;if(t)a?(d={x:o(r/a),y:o(i/a)},c={x:a,y:u/a}):i?(l=.5*m,c={x:i,y:u/i},d.x=o(n/i)):(c={x:r,y:n},d.x=.25*m);else if(a||i){var f=h(a*a+i*i);l=i>0?s(a/f):-s(a/f),c={x:f,y:u/f},d.x=o((a*r+i*n)/(f*f))}else if(r||n){var y=h(r*r+n*n);l=.5*m-(n>0?s(-r/y):-s(r/y)),c={x:u/y,y:y},d.y=o((a*r+i*n)/(y*y))}else c={x:0,y:0};return{scale:c,translate:p,rotation:l,skew:d}},determinant:function(){return this.a*this.d-this.b*this.c},applyToPoint:function(t,e){var a=this;return{x:t*a.a+e*a.c+a.e,y:t*a.b+e*a.d+a.f}},applyToArray:function(t){var e,a,i=0,r=[];if("number"==typeof t[0])for(a=t.length;a>i;)e=this.applyToPoint(t[i++],t[i++]),r.push(e.x,e.y);else for(;e=t[i];i++)r.push(this.applyToPoint(e.x,e.y));return r},applyToTypedArray:function(t,e){for(var a,i=0,r=t.length,n=e?new Float64Array(r):new Float32Array(r);r>i;)a=this.applyToPoint(t[i],t[i+1]),n[i++]=a.x,n[i++]=a.y;return n},applyToContext:function(t){var e=this;return t.setTransform(e.a,e.b,e.c,e.d,e.e,e.f),e},isIdentity:function(){var t=this;return t._q(t.a,1)&&t._q(t.b,0)&&t._q(t.c,0)&&t._q(t.d,1)&&t._q(t.e,0)&&t._q(t.f,0)},isInvertible:function(){return!this._q(this.determinant(),0)},isValid:function(){return!this._q(this.a*this.d,0)},clone:function(t){var e=this,a=new Matrix;return a.a=e.a,a.b=e.b,a.c=e.c,a.d=e.d,a.e=e.e,a.f=e.f,t||(a.context=e.context),a},isEqual:function(t){var e=this,a=e._q;return a(e.a,t.a)&&a(e.b,t.b)&&a(e.c,t.c)&&a(e.d,t.d)&&a(e.e,t.e)&&a(e.f,t.f)},toArray:function(){return[this.props[0],this.props[1],this.props[2],this.props[3],this.props[4],this.props[5]]},toCSS:function(){return this.cssParts[1]=this.props.join(","),this.cssParts.join("")},toJSON:function(){var t=this;return'{"a":'+t.a+',"b":'+t.b+',"c":'+t.c+',"d":'+t.d+',"e":'+t.e+',"f":'+t.f+"}"},toString:function(){return""+this.toArray()},_q:function(t,e){return Math.abs(t-e)<1e-14},_x:function(){return this.context&&this.context.setTransform(this.a,this.b,this.c,this.d,this.e,this.f),this}};var MatrixManager=matrixManagerFunction;!function(){for(var t=0,e=["ms","moz","webkit","o"],a=0;a<e.length&&!window.requestAnimationFrame;++a)window.requestAnimationFrame=window[e[a]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[a]+"CancelAnimationFrame"]||window[e[a]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e){var a=(new Date).getTime(),i=Math.max(0,16-(a-t)),r=window.setTimeout(function(){e(a+i)},i);return t=a+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)})}();var subframeEnabled=!1,supportsPath2D="function"==typeof Path2D,cachedColors={},colorMap=[],body,fillColorToString=function(){var t=[];return function(e,a){return t[e[0]]||(t[e[0]]=[]),t[e[0]][e[1]]||(t[e[0]][e[1]]=[]),t[e[0]][e[1]][e[2]]||(void 0!=a&&(e[3]=a),t[e[0]][e[1]][e[2]]="rgba("+e.join(",")+")"),t[e[0]][e[1]][e[2]]}}();createColorMap(),function(){function t(){this.commandArrays=[]}void 0==CanvasRenderingContext2D.prototype.ellipse&&(CanvasRenderingContext2D.prototype.ellipse=function(t,e,a,i,r,n,s,o){this.save(),this.translate(t,e),this.rotate(r),this.scale(a,i),this.arc(0,0,1,n,s,o),this.restore()}),supportsPath2D||(t.prototype.moveTo=function(t,e){this.commandArrays.push({type:"move",coord:[t,e]})},t.prototype.lineTo=function(t,e){this.commandArrays.push({type:"line",coord:[t,e]})},t.prototype.bezierCurveTo=function(t,e,a,i,r,n){this.commandArrays.push({type:"bezierCurve",coord:[t,e,a,i,r,n]})},t.prototype.drawToContext=function(t){var e,a,i=this.commandArrays.length;for(t.beginPath(),a=0;i>a;a+=1)switch(e=this.commandArrays[a],e.type){case"move":t.moveTo(e.coord[0],e.coord[1]);break;case"line":t.lineTo(e.coord[0],e.coord[1]);break;case"bezierCurve":t.bezierCurveTo(e.coord[0],e.coord[1],e.coord[2],e.coord[3],e.coord[4],e.coord[5])}},Path2D=t)}();var bez=bezFunction(),dataManager=dataFunctionManager();SVGRenderer.prototype.buildItems=function(t){var e,a=0,i=t.length;for(e=0;i>e;e++)"StillLayer"==t[e].type?(a++,this.createImage(t[e])):"PreCompLayer"==t[e].type?this.createComp(t[e]):"SolidLayer"==t[e].type?this.createSolid(t[e]):"ShapeLayer"==t[e].type?this.createShape(t[e]):"TextLayer"==t[e].type?this.createText(t[e]):console.log("NO TYPE: ",t[e])},SVGRenderer.prototype.createShape=function(t){t.element=new IShapeElement(t,this.animationItem)},SVGRenderer.prototype.createText=function(t){t.element=new ITextElement(t,this.animationItem)},SVGRenderer.prototype.createImage=function(t){t.element=new IImageElement(t,this.animationItem)},SVGRenderer.prototype.createComp=function(t){t.element=new ICompElement(t,this.animationItem),this.buildItems(t.layers,t.element.getType())},SVGRenderer.prototype.createSolid=function(t){t.element=new ISolidElement(t,this.animationItem)},SVGRenderer.prototype.configAnimation=function(t){this.animationItem.container=document.createElementNS(svgNS,"svg"),this.animationItem.container.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.animationItem.container.setAttribute("width",t.animation.compWidth),this.animationItem.container.setAttribute("height",t.animation.compHeight),this.animationItem.container.setAttribute("viewBox","0 0 "+t.animation.compWidth+" "+t.animation.compHeight),this.animationItem.container.setAttribute("preserveAspectRatio","xMidYMid meet"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container);var e=document.createElementNS(svgNS,"defs");this.animationItem.container.appendChild(e);var a=document.createElementNS(svgNS,"clipPath"),i=document.createElementNS(svgNS,"rect");i.setAttribute("width",t.animation.compWidth),i.setAttribute("height",t.animation.compHeight),i.setAttribute("x",0),i.setAttribute("y",0),a.setAttribute("id","animationMask"),a.appendChild(i);var r=document.createElementNS(svgNS,"g");r.setAttribute("clip-path","url(#animationMask)"),this.animationItem.container.appendChild(r),e.appendChild(a),this.animationItem.container=r,this.layers=t.animation.layers},SVGRenderer.prototype.buildStage=function(t,e){var a,i,r=e.length;for(a=r-1;a>=0;a--){if(i=e[a],i.parent){var n=this.buildItemHierarchy(i.element.getDomElement(),i.layerName,i.parent,e,t);n.setAttribute("data-layer-name",i.layerName),t.appendChild(n),i.element.setMainElement(n)}else i.element.getDomElement().setAttribute("data-layer-name",i.layerName),t.appendChild(i.element.getDomElement()),i.element.setMainElement(i.element.getDomElement());"PreCompLayer"==i.type&&this.buildStage(i.element.getComposingElement(),i.layers,i.element.getType())}},SVGRenderer.prototype.buildItemHierarchy=function(t,e,a,i,r){for(var n=0,s=i.length;s>n;){if(i[n].layerName==a){i[n].relateds||(i[n].relateds=[]);var o,h;return o=document.createElementNS(svgNS,"g"),h=document.createElementNS(svgNS,"g"),i[n].relateds.push({item:o,itemCont:h}),o.appendChild(t),h.appendChild(o),void 0!=i[n].parent?this.buildItemHierarchy(h,e,i[n].parent,i,r):h}n+=1}return null},SVGRenderer.prototype.updateContainerSize=function(){},SVGRenderer.prototype.renderFrame=function(t){if(this.lastFrame!=t){this.lastFrame=t;var e,a=this.layers.length;
for(e=0;a>e;e++)this.layers[e].element.renderFrame(t-this.layers[e].startTime)}},CanvasRenderer.prototype.buildItems=function(t){var e,a=0,i=t.length;for(e=0;i>e;e++)"StillLayer"==t[e].type?(a++,this.createImage(t[e])):"PreCompLayer"==t[e].type?this.createComp(t[e]):"SolidLayer"==t[e].type?this.createSolid(t[e]):"ShapeLayer"==t[e].type?this.createShape(t[e]):"TextLayer"==t[e].type?this.createText(t[e]):console.log("NO TYPE: ",t[e])},CanvasRenderer.prototype.createShape=function(t){t.element=new CVShapeElement(t,this)},CanvasRenderer.prototype.createText=function(t){t.element=new CVTextElement(t,this)},CanvasRenderer.prototype.createImage=function(t){t.element=new CVImageElement(t,this)},CanvasRenderer.prototype.createComp=function(t){t.element=new CVCompElement(t,this),this.buildItems(t.layers)},CanvasRenderer.prototype.createSolid=function(t){t.element=new CVSolidElement(t,this)},CanvasRenderer.prototype.configAnimation=function(t){this.animationItem.container=document.createElement("canvas"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container),this.layers=t.animation.layers,this.canvasContext=this.animationItem.container.getContext("2d"),this.transformCanvas={},this.transformCanvas.w=t.animation.compWidth,this.transformCanvas.h=t.animation.compHeight,this.updateContainerSize()},CanvasRenderer.prototype.updateContainerSize=function(){var t=this.animationItem.wrapper.offsetWidth,e=this.animationItem.wrapper.offsetHeight;this.animationItem.container.setAttribute("width",t),this.animationItem.container.setAttribute("height",e);var a=t/e,i=this.transformCanvas.w/this.transformCanvas.h;i>a?(this.transformCanvas.sx=t/this.transformCanvas.w,this.transformCanvas.sy=t/this.transformCanvas.w,this.transformCanvas.tx=0,this.transformCanvas.ty=(e-this.transformCanvas.h*(t/this.transformCanvas.w))/2):(this.transformCanvas.sx=e/this.transformCanvas.h,this.transformCanvas.sy=e/this.transformCanvas.h,this.transformCanvas.tx=(t-this.transformCanvas.w*(e/this.transformCanvas.h))/2,this.transformCanvas.ty=0)},CanvasRenderer.prototype.buildStage=function(t,e){var a,i,r=e.length;for(a=r-1;a>=0;a--)i=e[a],i.parent&&(i.parentHierarchy=[],this.buildItemHierarchy(i,e,i.parent)),"PreCompLayer"==i.type&&this.buildStage(null,i.layers)},CanvasRenderer.prototype.buildItemHierarchy=function(t,e,a){for(var i=0,r=e.length;r>i;){if(e[i].layerName==a){t.parentHierarchy.push(e[i]),void 0==e[i].parent||this.buildItemHierarchy(t,e,e[i].parent);break}i+=1}},CanvasRenderer.prototype.prepareFrame=function(t){var e,a=this.layers.length;for(e=0;a>e;e++)this.layers[e].element.prepareFrame(t-this.layers[e].startTime)},CanvasRenderer.prototype.draw=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.layers[t].element.draw()},CanvasRenderer.prototype.renderFrame=function(t){this.lastFrame!=t&&(this.lastFrame=t,this.animationItem.container.width=this.animationItem.container.width,this.canvasContext.transform(this.transformCanvas.sx,0,0,this.transformCanvas.sy,this.transformCanvas.tx,this.transformCanvas.ty),this.canvasContext.beginPath(),this.canvasContext.rect(0,0,this.transformCanvas.w,this.transformCanvas.h),this.canvasContext.clip(),this.prepareFrame(t),this.draw())},MaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length;var t=this.element.maskingGroup,e=this.element.maskedElement,a=document.createElementNS(svgNS,"defs");t.appendChild(a);var i,r=this.masksProperties.length;if(this.layerSize=this.element.getLayerSize(),this.usePaths){this.maskElement=document.createElementNS(svgNS,"clipPath");var n,s=this.data.masksProperties;for(i=0;r>i;i++)n=document.createElementNS(svgNS,"path"),s[i].cl?n.setAttribute("fill","#ffffff"):(n.setAttribute("fill","none"),n.setAttribute("stroke","#ffffff"),n.setAttribute("stroke-width","1"),n.setAttribute("stroke-miterlimit","10")),n.setAttribute("clip-rule","nonezero"),this.maskElement.appendChild(n),s[i].elem=n,s[i].lastPath="";var o=randomString(10);this.maskElement.setAttribute("id",o),e.setAttribute("clip-path","url(#"+o+")")}else{this.maskElement=document.createElementNS(svgNS,"mask"),this.canvas=document.createElement("canvas"),this.imageElement=document.createElementNS(svgNS,"image"),this.imageElement.setAttribute("width",this.layerSize.w),this.imageElement.setAttribute("height",this.layerSize.h),this.imageElement.setAttribute("x","0"),this.imageElement.setAttribute("y","0"),this.canvasContext=this.canvas.getContext("2d"),this.canvas.width=this.layerSize.w,this.canvas.height=this.layerSize.h,this.maskElement.appendChild(this.imageElement);var o=randomString(10);this.maskElement.setAttribute("id",o),e.setAttribute("mask","url(#"+o+")")}a.appendChild(this.maskElement)},MaskElement.prototype.createInvertedMask=function(t,e){this.helperCanvas.width=this.layerSize.w,this.helperCanvas.height=this.layerSize.h;var a=this.invertedContext;a.globalCompositeOperation="source-over";var i=t.o[e];if("a"==t.mode)a.fillStyle="rgba(255, 255, 255, "+t.o[e]+")",this.canvasContext.globalCompositeOperation="source-over";else if("s"==t.mode)a.fillStyle="rgba(0, 0, 0, "+i+")",this.canvasContext.globalCompositeOperation="source-over";else if("f"==t.mode)a.fillStyle="rgba(255, 255, 255, "+i+")",this.canvasContext.globalCompositeOperation="xor";else{if("i"!=t.mode)return;a.fillStyle="rgba(255, 255, 255, "+i+")",this.canvasContext.globalCompositeOperation="destination-in"}a.fillRect(0,0,this.helperCanvas.width,this.helperCanvas.height),a.fillStyle="rgba(255, 255, 255, 1)",a.globalCompositeOperation="destination-out",a.beginPath(),this.drawShape(a,t.pathVertices[e][0]),this.canvasContext.drawImage(this.helperCanvas,0,0)},MaskElement.prototype.renderFrame=function(t){var e,a=this.data.masksProperties.length;if(this.usePaths===!0){if("fullSvg"!==this.element.animationItem.animType)for(e=0;a>e;e++)this.drawPath(this.data.masksProperties[e],this.data.masksProperties[e].pathStrings[t])}else{this.canvas.width=this.canvas.width;var i=this.canvasContext;for(e=0;a>e;e++){var r=this.data.masksProperties[e].opacity[t];if(this.masksProperties[e].inv)this.createInvertedMask(this.masksProperties[e],t);else{if("a"==this.masksProperties[e].mode)i.globalCompositeOperation="source-over",i.fillStyle="rgba(255, 255, 255, "+r+")";else if("s"==this.masksProperties[e].mode)i.globalCompositeOperation="source-over",i.fillStyle="rgba(0, 0, 0, "+r+")";else if("f"==this.masksProperties[e].mode)i.globalCompositeOperation="xor",i.fillStyle="rgba(255, 255, 255, "+r+")";else{if("i"!=this.masksProperties[e].mode)continue;i.globalCompositeOperation="destination-in",i.fillStyle="rgba(255, 255, 255, "+r+")"}this.drawShape(i,this.data.masksProperties[e].pathVertices[t][0])}}var n=this.canvas.toDataURL("image/png");this.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href",n)}},MaskElement.prototype.processMaskFromEffects=function(t,e){var a,i=this.registeredEffects.length;for(a=0;i>a;a++)this.registeredEffects[a].renderMask(t,e)},MaskElement.prototype.registerEffect=function(t){this.registeredEffects.push(t)},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var t="M0,0 ";return t+="h"+this.layerSize.w,t+="v"+this.layerSize.h,t+="h"+-this.layerSize.w,t+="v"+-this.layerSize.h},MaskElement.prototype.drawPath=function(t,e){t.lastPath!==e&&(t.inv?t.elem.setAttribute("d",this.createLayerSolidPath()+e):t.elem.setAttribute("d",e),t.lastPath=e)},MaskElement.prototype.drawShape=function(t,e){t.beginPath();var a,i=e.v.length;for(a=0;i>a;a++)0==a?t.moveTo(e.v[a][0],e.v[a][1]):t.bezierCurveTo(e.o[a-1][0]+e.v[a-1][0],e.o[a-1][1]+e.v[a-1][1],e.i[a][0]+e.v[a][0],e.i[a][1]+e.v[a][1],e.v[a][0],e.v[a][1]);t.bezierCurveTo(e.o[a-1][0]+e.v[a-1][0],e.o[a-1][1]+e.v[a-1][1],e.i[0][0]+e.v[0][0],e.i[0][1]+e.v[0][1],e.v[0][0],e.v[0][1]),t.closePath(),t.fill()},defineDescriptor(MaskElement,"helperCanvas",document.createElement("canvas")),defineDescriptor(MaskElement,"helperContext",MaskElement.prototype.helperCanvas.getContext("2d")),defineDescriptor(MaskElement,"data",null,{writable:!0}),defineDescriptor(MaskElement,"element",null),defineDescriptor(MaskElement,"usePaths",!0,{writable:!0}),defineDescriptor(MaskElement,"paths",[],{writable:!0});var BaseElement=function(t,e){this.animationItem=e,this.data=t,this.init()};BaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},BaseElement.prototype.createElements=function(){this.layerElement=document.createElementNS(svgNS,"g"),this.anchorElement=document.createElementNS(svgNS,"g"),this.anchorElement.setAttribute("id",this.data.layerName),this.layerElement.appendChild(this.anchorElement),this.maskingGroup=this.anchorElement,this.maskedElement=this.anchorElement},BaseElement.prototype.renderFrame=function(t){if(!(this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>t))return this.isVisible!==!1&&(this.isVisible=!1,this.mainElement.setAttribute("opacity",0)),!1;if(this.isVisible!==!0&&(this.isVisible=!0,this.mainElement.setAttribute("opacity",1)),this.currentAnimData=this.data.renderedData[t].an,this.data.eff&&this.effectsManager.renderFrame(t,this.currentAnimData.mk),t===this.data.renderedFrame.num)return!0;this.data.hasMask&&this.maskManager.renderFrame(t),this.data.renderedFrame.o!==this.currentAnimData.tr.o&&(this.data.renderedFrame.o=this.currentAnimData.tr.o,this.anchorElement.setAttribute("opacity",this.currentAnimData.tr.o));var e=!1;(!this.data.renderedFrame.a||this.data.renderedFrame.a[0]!==this.currentAnimData.tr.a[0]&&this.data.renderedFrame.a[1]!==this.currentAnimData.tr.a[1])&&(this.data.renderedFrame.a=[this.currentAnimData.tr.a[0],this.currentAnimData.tr.a[1]],this.anchorElement.setAttribute("transform","translate("+-this.currentAnimData.tr.a[0]+" "+-this.currentAnimData.tr.a[1]+")"),e=!0);var a=!1;if(this.data.renderedFrame.tr!==this.currentAnimData.matrixValue&&(this.layerElement.setAttribute("transform",this.currentAnimData.matrixValue),this.data.renderedFrame.tr=this.currentAnimData.matrixValue,a=!0),this.data.relateds&&(a||e)){var i,r,n,s=this.data.relateds,o=s.length;for(i=0;o>i;i++)r=s[i].item,n=s[i].itemCont,e&&r.setAttribute("transform","translate("+-this.currentAnimData.tr.a[0]+" "+-this.currentAnimData.tr.a[1]+")"),a&&n.setAttribute("transform",this.currentAnimData.matrixValue)}return!0},BaseElement.prototype.getDomElement=function(){return this.layerElement},BaseElement.prototype.setMainElement=function(t){this.mainElement=t},BaseElement.prototype.getMaskManager=function(){return this.maskManager},BaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this}};this.maskManager=createElement(MaskElement,null,e)},BaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},BaseElement.prototype.getType=function(){return this.type},BaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},createElement(BaseElement,ICompElement),ICompElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g"),this.parent.createElements.call(this)},ICompElement.prototype.getComposingElement=function(){return this.anchorElement},ICompElement.prototype.renderFrame=function(t){var e=this.parent.renderFrame.call(this,t);if(e!==!1){var a,i=this.layers.length,r=this.data.tm?this.data.tm[t]<0?0:this.data.tm[t]:t;for(a=0;i>a;a+=1)this.layers[a].element.renderFrame(r-this.layers[a].startTime)}},createElement(BaseElement,IImageElement),IImageElement.prototype.createElements=function(){var t=this,e=function(){t.image.setAttributeNS("http://www.w3.org/1999/xlink","href",t.path+t.assets[t.data.assetId].path),t.maskedElement=t.image,t.animationItem.elementLoaded()},a=new Image;a.addEventListener("load",e,!1),a.src=this.path+this.assets[this.data.assetId].path,this.svgElem=document.createElementNS(svgNS,"g"),this.parent.createElements.call(this),this.image=document.createElementNS(svgNS,"image"),this.image.setAttribute("width",this.data.width+"px"),this.image.setAttribute("height",this.data.height+"px"),this.svgElem.appendChild(this.image),this.anchorElement.appendChild(this.svgElem),this.maskingGroup=this.svgElem,styleUnselectableDiv(this.image)},createElement(BaseElement,IShapeElement),IShapeElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g"),styleUnselectableDiv(this.svgElem),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem);var t,e,a=this.data.shapes.length;for(t=a-1;t>=0;t--)this.data.trim&&(this.data.shapes[t].trim=this.data.trim),e=new ShapeItemElement(this.data.shapes[t]),this.svgElem.appendChild(e.getElement()),this.shapes.push(e)},IShapeElement.prototype.renderFrame=function(t){var e=this.parent.renderFrame.call(this,t);e!==!1&&this.renderShapes(t)},IShapeElement.prototype.renderShapes=function(t){var e,a,i,r=this.data.shapes.length;for(e=r-1;e>=0;e--)a=this.data.shapes[e],i=this.shapes[r-1-e],i.renderShape(t)},ShapeItemElement.prototype.adjustTrim=function(){var t,e=this.data.trim,a=e.length;for(t=0;a>t;t+=1)e[t].o&&(e[t].o-=90)},ShapeItemElement.prototype.getElement=function(){return this.shapeG},ShapeItemElement.prototype.renderShape=function(t){this.currentData=this.data.renderedData[t],"pathShape"==this.data.type?this.pathLength=this.renderPath(t):"rectShape"==this.data.type?this.renderRect(t):"ellipseShape"==this.data.type&&(this.pathLength=this.renderEllipse(t)),this.data.trim&&this.renderTrim(t),this.renderFill(t),this.renderStroke(t),this.renderTransform(t)},ShapeItemElement.prototype.renderPath=function(){var t=this.currentData,e=t.path;return e.pathString!=this.renderedFrame.path?(this.renderedFrame.path=e.pathString,this.shape.setAttribute("d",e.pathString),this.data.trim?(null==this.cachedData.pathLengths&&(this.cachedData.pathLengths={}),null==this.cachedData.pathLengths[e.pathString]&&(this.cachedData.pathLengths[e.pathString]=this.shape.getTotalLength()),this.cachedData.pathLengths[e.pathString]):void 0):this.data.trim?this.cachedData.pathLengths[e.pathString]:void 0},ShapeItemElement.prototype.renderEllipse=function(t){var e=this.currentData.ell;if(this.renderedFrame.ellipse.rx!=e.size[0]&&(this.shape.setAttribute("rx",e.size[0]/2),this.renderedFrame.ellipse.rx=e.size[0]),this.renderedFrame.ellipse.ry!=e.size[1]&&(this.shape.setAttribute("ry",e.size[1]/2),this.renderedFrame.ellipse.ry=e.size[1]),this.renderedFrame.ellipse.cx!=e.p[0]&&(this.shape.setAttribute("cx",e.p[0]),this.renderedFrame.ellipse.ry=e.p[0]),this.renderedFrame.ellipse.cy!=e.p[1]&&(this.shape.setAttribute("cy",e.p[1]),this.renderedFrame.ellipse.ry=e.p[1]),this.data.trim){if(null==this.cachedData.pathLengths&&(this.cachedData.pathLengths={}),null==this.cachedData.pathLengths["ellipse_"+t])if(e.size[0]==e.size[1])this.cachedData.pathLengths["ellipse_"+t]=Math.PI*e.size[0];else{var a=Math.max(e.size[0],e.size[1])/2,i=Math.max(e.size[0],e.size[1])/2,r=(a-i)/(a+i),n=(a+i)*Math.PI*(1+.25*r+1/64*Math.pow(r,2)+1/256*Math.pow(r,3));this.cachedData.pathLengths["ellipse_"+t]=n}return this.cachedData.pathLengths["ellipse_"+t]}},ShapeItemElement.prototype.renderRect=function(){var t=this.currentData;if(t.rect){var e=t.rect;this.renderedFrame.rect.rx!=e.roundness&&(this.shape.setAttribute("rx",e.roundness),this.shape.setAttribute("ry",e.roundness),this.renderedFrame.rect.rx=e.roundness),this.renderedFrame.rect.width!=e.size[0]&&(this.shape.setAttribute("width",e.size[0]),this.renderedFrame.rect.width=e.size[0]),this.renderedFrame.rect.height!=e.size[1]&&(this.shape.setAttribute("height",e.size[1]),this.renderedFrame.rect.height=e.size[1]),this.renderedFrame.rect.x!=e.position[0]-e.size[0]&&(this.shape.setAttribute("x",e.position[0]-e.size[0]/2),this.renderedFrame.rect.x=e.position[0]-e.size[0]),this.renderedFrame.rect.y!=e.position[1]-e.size[1]&&(this.shape.setAttribute("y",e.position[1]-e.size[1]/2),this.renderedFrame.rect.y=e.position[1]-e.size[1])}},ShapeItemElement.prototype.renderFill=function(){var t=this.currentData;if(t.fill){var e=t.fill;this.renderedFrame.fill.color!==e.color&&(this.shape.setAttribute("fill",e.color),this.renderedFrame.fill.color=e.color),this.data.fillEnabled!==!1?this.renderedFrame.fill.opacity!==e.opacity&&(this.shape.setAttribute("fill-opacity",e.opacity),this.renderedFrame.fill.opacity=e.opacity):0!==this.renderedFrame.fill.opacity&&(this.shape.setAttribute("fill-opacity",0),this.renderedFrame.fill.opacity=0)}else 0!==this.renderedFrame.fill.opacity&&(this.shape.setAttribute("fill-opacity",0),this.renderedFrame.fill.opacity=0)},ShapeItemElement.prototype.renderStroke=function(){var t=this.currentData;if(t.stroke){var e=t.stroke;this.renderedFrame.stroke.color!==e.color&&(this.renderedFrame.stroke.color=e.color,this.shape.setAttribute("stroke",e.color)),this.renderedFrame.stroke.width!==e.width&&(this.renderedFrame.stroke.width=e.width,this.shape.setAttribute("stroke-width",e.width)),this.renderedFrame.stroke.width!==e.width&&(this.renderedFrame.stroke.width=e.width,this.shape.setAttribute("stroke-width",e.width)),this.data.strokeEnabled!==!1?this.renderedFrame.stroke.opacity!==e.opacity&&(this.renderedFrame.stroke.opacity=e.opacity,this.shape.setAttribute("stroke-opacity",e.opacity)):0!==this.renderedFrame.stroke.opacity&&(this.renderedFrame.stroke.opacity=0,this.shape.setAttribute("stroke-opacity",0))}},ShapeItemElement.prototype.renderTransform=function(){var t=this.currentData;if(t.tr){var e=t.tr;this.renderedFrame.tr.o!==e.o&&(this.renderedFrame.tr.o=e.o,this.shapeG.setAttribute("opacity",e.o)),this.renderedFrame.tr.mt!==e.mt&&(this.renderedFrame.tr.mt=e.mt,this.shapeG.setAttribute("transform",e.mt)),(this.renderedFrame.tr.a[0]!==e.a[0]||this.renderedFrame.tr.a[1]!==e.a[1])&&(this.renderedFrame.tr.a[0]=e.a[0],this.renderedFrame.tr.a[1]=e.a[1],this.shape.setAttribute("transform","translate("+-e.a[0]+", "+-e.a[1]+")"))}},ShapeItemElement.prototype.renderTrim=function(){var t=this.currentData.trim;if(0==this.pathLength)this.shape.setAttribute("stroke-opacity",0);else{this.renderedFrame.trim.e==t.e&&this.renderedFrame.trim.s==t.s&&this.renderedFrame.trim.o==t.o,this.renderedFrame.trim.e=t.e,this.renderedFrame.trim.s=t.s,this.renderedFrame.trim.o=t.o;var e=this.pathLength*(t.e-t.s)/100,a=this.pathLength-e,i=this.pathLength*t.s/100+this.pathLength*t.o/360,r=e+" , "+a;this.shape.setAttribute("stroke-dasharray",r),this.shape.setAttribute("stroke-dashoffset",this.pathLength-i),t.e==t.s?this.shape.setAttribute("stroke-opacity",0):this.currentData.stroke&&(this.data.strokeEnabled!==!1?this.shape.setAttribute("stroke-opacity",this.currentData.stroke.opacity):this.shape.setAttribute("stroke-opacity",0))}},createElement(BaseElement,ISolidElement),ISolidElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g"),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem);var t=document.createElementNS(svgNS,"rect");t.setAttribute("width",this.data.width),t.setAttribute("height",this.data.height),t.setAttribute("fill",this.data.color),this.svgElem.appendChild(t),styleUnselectableDiv(this.svgElem),styleUnselectableDiv(t),this.maskingGroup=this.svgElem,this.maskedElement=t},createElement(BaseElement,ITextElement),ITextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",this.svgElem.style["-webkit-transform"]="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskingGroup=this.svgElem,this.maskedElement=t},CVBaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},CVBaseElement.prototype.createElements=function(){},CVBaseElement.prototype.prepareFrame=function(t){return this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>t?(this.currentAnimData=this.data.renderedData[t].an,void(this.data.hasMask&&this.maskManager.prepareFrame(t))):(this.currentAnimData=null,!1)},CVBaseElement.prototype.initDraw=function(){},CVBaseElement.prototype.draw=function(t){if(t!==!1&&this.renderer.canvasContext.save(),!this.currentAnimData)return!1;var e,a=this.renderer.canvasContext;if(this.data.parentHierarchy){var i,r,n=this.data.parentHierarchy.length;for(i=n-1;i>=0;i-=1)r=this.data.parentHierarchy[i].element.getCurrentAnimData(),e=r.matrixArray,a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),a.translate(-r.tr.a[0],-r.tr.a[1])}a.globalAlpha=a.globalAlpha*this.currentAnimData.tr.o,e=this.currentAnimData.matrixArray,a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),a.translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]),this.data.hasMask&&this.maskManager.draw(),t!==!1&&this.renderer.canvasContext.restore()},CVBaseElement.prototype.endDraw=function(){},CVBaseElement.prototype.getCurrentAnimData=function(){return this.currentAnimData},CVBaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this}};this.maskManager=createElement(CVMaskElement,null,e)},CVBaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},CVBaseElement.prototype.getType=function(){return this.type},CVBaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},createElement(CVBaseElement,CVCompElement),CVCompElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);if(e!==!1){var a,i=this.layers.length,r=this.data.tm?this.data.tm[t]<0?0:this.data.tm[t]:t;for(a=0;i>a;a+=1)this.layers[a].element.prepareFrame(r-this.layers[a].startTime)}},CVCompElement.prototype.draw=function(){this.renderer.canvasContext.save(),this.parent.draw.call(this,!1);var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.layers[t].element.draw();this.renderer.canvasContext.restore()},createElement(CVBaseElement,CVImageElement),CVImageElement.prototype.createElements=function(){var t=this,e=function(){t.animationItem.elementLoaded()};this.img=new Image,this.img.addEventListener("load",e,!1),this.img.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this)},CVImageElement.prototype.draw=function(){this.renderer.canvasContext.save();var t=this.parent.draw.call(this,!1);if(t!==!1){var e=this.renderer.canvasContext;e.drawImage(this.img,0,0),this.renderer.canvasContext.restore()}},createElement(CVBaseElement,CVShapeElement),CVShapeElement.prototype.createElements=function(){this.parent.createElements.call(this);var t,e,a=this.data.shapes.length;for(t=a-1;t>=0;t--)this.data.trim&&(this.data.shapes[t].trim=this.data.trim),e=new CVShapeItemElement(this.data.shapes[t],this.renderer),this.shapes.push(e)},CVShapeElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);if(e!==!1){var a,i=this.data.shapes.length;for(a=i-1;a>=0;a--)this.shapes[i-1-a].prepareFrame(t)}},CVShapeElement.prototype.draw=function(){this.renderer.canvasContext.save();var t=this.parent.draw.call(this,!1);t!==!1&&(this.drawShapes(),this.renderer.canvasContext.restore())},CVShapeElement.prototype.drawShapes=function(){var t,e=this.data.shapes.length;for(t=e-1;t>=0;t--)this.shapes[e-1-t].renderShape()},CVShapeItemElement.prototype.adjustTrim=function(){var t,e=this.data.trim,a=e.length;for(t=0;a>t;t+=1)e[t].o&&(e[t].o-=90)},CVShapeItemElement.prototype.renderShape=function(){if(""!==this.data.type){var t=this.frameNum;this.currentData=this.data.renderedData[t];var e=this.renderer.canvasContext,a=this.renderTransform(t);"pathShape"==this.data.type?this.data.trim?this.renderTrimPath(t):this.renderPath(t):"rectShape"==this.data.type?this.renderRect(t):"ellipseShape"==this.data.type&&(this.pathLength=this.renderEllipse(t)),this.renderFill(t),this.renderStroke(t),this.renderer.canvasContext.lineCap="round",this.renderer.canvasContext.lineJoin="round",this.renderedPaths[t]?supportsPath2D?(this.renderer.canvasContext.fill(this.renderedPaths[t]),this.renderer.canvasContext.stroke(this.renderedPaths[t])):(this.renderedPaths[t].drawToContext(this.renderer.canvasContext),this.renderer.canvasContext.fill(),this.renderer.canvasContext.stroke()):(this.renderer.canvasContext.fill(),this.renderer.canvasContext.stroke()),a&&e.restore()}},CVShapeItemElement.prototype.prepareFrame=function(t){this.frameNum=t},CVShapeItemElement.prototype.renderTransform=function(){var t=this.currentData;if(t.tr){var e=!1,a=this.renderer.canvasContext,i=t.tr,r=i.mtArr;return(1!==r[0]||0!==r[1]||0!==r[2]||1!==r[3]||0!==r[4]||0!==r[5])&&(a.save(),a.transform(r[0],r[1],r[2],r[3],r[4],r[5]),e=!0),(0!=i.a[0]||0!=i.a[1])&&(a.translate(-i.a[0],-i.a[1]),e||(a.save(),e=!0)),i.o<1&&(a.globalAlpha*=i.o,e||(a.save(),e=!0)),e}},CVShapeItemElement.prototype.addToTrim=function(t,e,a){this.trims[t]||this.trims.push({}),this.trims[t].s=e,this.trims[t].e=a,this.trims[t].ended=!1},CVShapeItemElement.prototype.renderTrimPath=function(t){var e=this.currentData.trim;if(e.e!=e.s&&!this.renderedPaths[t]){var a,i=new Path2D,r=this.currentData.path,n=r.pathNodes,s=[],o=0,h=n.v.length;for(a=0;h-1>a;a+=1)s.push(bez.drawBezierCurve(n.v[a],n.v[a+1],n.o[a],n.i[a+1])),o+=s[a].segmentLength;r.closed&&(s.push(bez.drawBezierCurve(n.v[a],n.v[0],n.o[a],n.i[0])),o+=s[a].segmentLength),h=s.length;var m=o*(e.e-e.s)/100;e.o=e.o%360,e.o<0&&(e.o+=360);var p=(e.s/100+e.o/360)%1*o,l=0;if(p+m-o>1e-5){var c=p+m-o;this.addToTrim(0,p,p+m-c),this.addToTrim(1,0,p+m-o),l+=2}else this.addToTrim(0,p,p+m),l+=1;var d,u,f,y,g,v=0,E=!1,b=this.trims.length;for(a=0;h>a&&!E;a+=1){for(u=s[a].points.length,y=!0,g=0;b>g;g+=1)v+s[a].segmentLength>this.trims[g].s&&(y=!1);if(y)v+=s[a].segmentLength;else{var x,C;for(d=0;u-1>d&&!E;d+=1)for(b=this.trims.length,x=s[a].points[d],C=s[a].points[d+1],v+=x.partialLength,g=0;b>g;g+=1)if(!this.trims[g].ended)if(this.trims[g].s>=v&&this.trims[g].s<v+C.partialLength&&(f=(this.trims[g].s-v)/C.partialLength,i.moveTo(x.point[0]+(C.point[0]-x.point[0])*f,x.point[1]+(C.point[1]-x.point[1])*f)),this.trims[g].e>v&&this.trims[g].e<=v+C.partialLength){if(f=(this.trims[g].e-v)/C.partialLength,i.lineTo(x.point[0]+(C.point[0]-x.point[0])*f,x.point[1]+(C.point[1]-x.point[1])*f),l-=1,this.trims[g].ended=!0,0==l){E=!0;break}}else v>this.trims[g].s&&v<this.trims[g].e&&i.lineTo(x.point[0],x.point[1]);this.renderedPaths[t]=i}}}},CVShapeItemElement.prototype.renderPath=function(t){var e=this.currentData,a=e.path;if(!this.renderedPaths[t]){var i=new Path2D,r=this.renderer.canvasContext,n=a.pathNodes;n instanceof Array&&(n=n[0]);var s,o=n.i.length;for(r.beginPath(),i.moveTo(n.v[0][0],n.v[0][1]),s=1;o>s;s+=1)i.bezierCurveTo(n.o[s-1][0],n.o[s-1][1],n.i[s][0],n.i[s][1],n.v[s][0],n.v[s][1]);a.closed&&i.bezierCurveTo(n.o[s-1][0],n.o[s-1][1],n.i[0][0],n.i[0][1],n.v[0][0],n.v[0][1]),this.renderedPaths[t]=i}},CVShapeItemElement.prototype.renderEllipse=function(){var t=this.currentData.ell,e=this.renderer.canvasContext;e.beginPath(),e.ellipse(t.p[0],t.p[1],t.size[0]/2,t.size[1]/2,0,0,2*Math.PI,!0),e.closePath()},CVShapeItemElement.prototype.renderRect=function(){var t=this.currentData.rect,e=t.roundness,a=this.renderer.canvasContext;if(a.beginPath(),0==e)a.rect(t.position[0]-t.size[0]/2,t.position[1]-t.size[1]/2,t.size[0],t.size[1]);else{var i=t.position[0]-t.size[0]/2,r=t.position[1]-t.size[1]/2,n=t.size[0],s=t.size[1];e instanceof Array&&(e=e[0]),a.moveTo(i+e,r),a.lineTo(i+n-e,r),a.quadraticCurveTo(i+n,r,i+n,r+e),a.lineTo(i+n,r+s-e),a.quadraticCurveTo(i+n,r+s,i+n-e,r+s),a.lineTo(i+e,r+s),a.quadraticCurveTo(i,r+s,i,r+s-e),a.lineTo(i,r+e),a.quadraticCurveTo(i,r,i+e,r)}},CVShapeItemElement.prototype.renderFill=function(){var t=this.currentData;if(t.fill){var e=t.fill;if(this.data.fillEnabled!==!1)return void(this.renderer.canvasContext.fillStyle=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color))}this.renderer.canvasContext.fillStyle="rgba(0,0,0,0)"},CVShapeItemElement.prototype.renderStroke=function(){var t=this.currentData;if(t.stroke){var e=t.stroke;if(this.renderer.canvasContext.lineWidth=e.width,this.data.strokeEnabled!==!1)return void(this.renderer.canvasContext.strokeStyle=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color))}this.renderer.canvasContext.strokeStyle="rgba(0,0,0,0)"},createElement(CVBaseElement,CVSolidElement),CVSolidElement.prototype.draw=function(){this.renderer.canvasContext.save(),this.parent.draw.call(this,!1);var t=this.renderer.canvasContext;t.fillStyle=this.data.color,t.fillRect(0,0,this.data.width,this.data.height),this.renderer.canvasContext.restore()},createElement(CVBaseElement,CVTextElement),CVTextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",this.svgElem.style["-webkit-transform"]="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskingGroup=this.svgElem,this.maskedElement=t},CVMaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length,this.ctx=this.element.renderer.canvasContext,this.layerSize=this.element.getLayerSize()},CVMaskElement.prototype.prepareFrame=function(t){this.frameNum=t},CVMaskElement.prototype.draw=function(){var t,e=this.data.masksProperties.length;for(t=0;e>t;t++)this.masksProperties[t].inv?this.createInvertedMask(this.masksProperties[t],this.frameNum):this.drawShape(this.ctx,this.data.masksProperties[t].pathVertices[this.frameNum][0])},CVMaskElement.prototype.drawShape=function(t,e){t.beginPath();var a,i=e.v.length;for(t.moveTo(e.v[0][0],e.v[0][1]),a=1;i>a;a++)t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[a][0],e.i[a][1],e.v[a][0],e.v[a][1]);t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[0][0],e.i[0][1],e.v[0][0],e.v[0][1]),t.closePath(),t.clip()};var animationManager=function(){function t(t){if(t){for(var e=0;y>e;){if(d[e].elem==t)return;
e+=1}var a=new AnimationItem;return a.setData(t),d.push({elem:t,animation:a}),y+=1,a}}function e(t,e){var a;for(a=0;y>a;a+=1)d[a].animation.setSpeed(t,e)}function a(t,e){var a;for(a=0;y>a;a+=1)d[a].animation.setDirection(t,e)}function i(t){var e;for(e=0;y>e;e+=1)d[e].animation.play(t)}function r(t,e){f=!1,u=Date.now();var a;for(a=0;y>a;a+=1)d[a].animation.moveFrame(t,e)}function n(){var t,e=Date.now(),a=e-u;for(t=0;y>t;t+=1)d[t].animation.advanceTime(a);u=e,requestAnimationFrame(n)}function s(t){var e;for(e=0;y>e;e+=1)d[e].animation.pause(t)}function o(t){var e;for(e=0;y>e;e+=1)d[e].animation.stop(t)}function h(t){var e;for(e=0;y>e;e+=1)d[e].animation.togglePause(t)}function m(){var e=document.getElementsByClassName("bodymovin");Array.prototype.forEach.call(e,t)}function p(){var t;for(t=0;y>t;t+=1)d[t].animation.resize()}function l(){u=Date.now(),requestAnimationFrame(n)}var c={},d=[],u=0,f=!0,y=0;return setTimeout(l,0),c.registerAnimation=t,c.setSpeed=e,c.setDirection=a,c.play=i,c.moveFrame=r,c.pause=s,c.stop=o,c.togglePause=h,c.searchAnimations=m,c.resize=p,c.start=l,c}(),AnimationItem=function(){this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.pendingElements=0,this.playCount=0,this.prerenderFramesFlag=!0,this.repeat="indefinite",this.animationData={},this.layers=[],this.assets=[],this.isPaused=!0,this.isScrolling=!1,this.loop=!0,this.renderer=null,this.animationID=randomString(10),this.renderedFrameCount=0,this.math=Math};AnimationItem.prototype.setData=function(t){this.wrapper=t;var e=this,a=this.wrapper.attributes;switch(this.path=a.getNamedItem("data-animation-path")?a.getNamedItem("data-animation-path").value:a.getNamedItem("data-bm-path")?a.getNamedItem("data-bm-path").value:a.getNamedItem("bm-path")?a.getNamedItem("bm-path").value:"",this.animType=a.getNamedItem("data-anim-type")?a.getNamedItem("data-anim-type").value:a.getNamedItem("data-bm-type")?a.getNamedItem("data-bm-type").value:a.getNamedItem("bm-type")?a.getNamedItem("bm-type").value:"canvas",this.animType){case"canvas":this.renderer=new CanvasRenderer(this);break;case"svg":this.renderer=new SVGRenderer(this)}this.repeat=a.getNamedItem("data-anim-repeat")?a.getNamedItem("data-anim-repeat").value:this.repeat;var i=a.getNamedItem("data-anim-loop")?a.getNamedItem("data-anim-loop").value:a.getNamedItem("data-bm-loop")?a.getNamedItem("data-bm-loop").value:a.getNamedItem("bm-loop")?a.getNamedItem("bm-loop").value:"";""==i||(this.loop="false"===i?!1:"true"===i?!0:parseInt(i)),this.name=a.getNamedItem("data-name")?a.getNamedItem("data-name").value:a.getNamedItem("data-bm-name")?a.getNamedItem("data-bm-name").value:a.getNamedItem("bm-name")?a.getNamedItem("bm-name").value:"";var r=a.getNamedItem("data-anim-prerender")?a.getNamedItem("data-anim-prerender").value:a.getNamedItem("data-bm-prerender")?a.getNamedItem("data-bm-prerender").value:a.getNamedItem("bm-prerender")?a.getNamedItem("bm-prerender").value:"";if("false"===r&&(this.prerenderFramesFlag=!1),""!=this.path){"/"!=this.path.substr(-1,1)&&(this.path+="/");var n=new XMLHttpRequest;n.open("GET",this.path+"data.json",!0),n.send(),n.onreadystatechange=function(){if(4==n.readyState)if(200==n.status)e.configAnimation(JSON.parse(n.responseText));else try{var t=JSON.parse(n.responseText);e.configAnimation(t)}catch(a){}}}},AnimationItem.prototype.configAnimation=function(t){this.renderer.configAnimation(t),this.animationData=t,this.animationData._id=this.animationID,this.animationData._animType=this.animType,this.layers=this.animationData.animation.layers,this.assets=this.animationData.assets,this.totalFrames=this.animationData.animation.totalFrames,this.frameRate=this.animationData.animation.frameRate,this.frameMult=this.animationData.animation.frameRate/1e3,dataManager.completeData(this.animationData),this.renderer.buildItems(this.animationData.animation.layers),this.updaFrameModifier(),this.checkLoaded()},AnimationItem.prototype.elementLoaded=function(){this.pendingElements--,this.checkLoaded()},AnimationItem.prototype.checkLoaded=function(){this.renderer.buildStage(this.container,this.layers),0==this.pendingElements&&(this.prerenderFramesFlag?(this.prerenderFrames(0),dataManager.renderFrame(this.animationID,this.currentFrame),this.renderer.renderFrame(this.currentFrame)):(this.isLoaded=!0,this.gotoFrame()))},AnimationItem.prototype.prerenderFrames=function(t){t||(t=0),this.renderedFrameCount===this.totalFrames?(this.isLoaded=!0,this.gotoFrame()):(dataManager.renderFrame(this.animationID,this.renderedFrameCount),this.renderedFrameCount+=1,t>5?setTimeout(this.prerenderFrames.bind(this),0):(t+=1,this.prerenderFrames(t)))},AnimationItem.prototype.resize=function(){this.renderer.updateContainerSize()},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=subframeEnabled?this.math.round(100*this.currentRawFrame)/100:this.math.floor(this.currentRawFrame),this.renderFrame()},AnimationItem.prototype.renderFrame=function(){this.isLoaded!==!1&&(dataManager.renderFrame(this.animationID,this.currentFrame),this.renderer.renderFrame(this.currentFrame))},AnimationItem.prototype.play=function(t){t&&this.name!=t||this.isPaused===!0&&(this.isPaused=!1)},AnimationItem.prototype.pause=function(t){t&&this.name!=t||this.isPaused===!1&&(this.isPaused=!0)},AnimationItem.prototype.togglePause=function(t){t&&this.name!=t||(this.isPaused===!0?(this.isPaused=!1,this.play()):(this.isPaused=!0,this.pause()))},AnimationItem.prototype.stop=function(t){t&&this.name!=t||(this.isPaused=!0,this.currentFrame=this.currentRawFrame=0,this.playCount=0,this.gotoFrame())},AnimationItem.prototype.goToAndStop=function(t){this.isPaused=!0,this.currentFrame=this.currentRawFrame=t,this.playCount=0,this.gotoFrame()},AnimationItem.prototype.advanceTime=function(t){this.isPaused!==!0&&this.isScrolling!==!0&&this.isLoaded!==!1&&this.setCurrentRawFrameValue(this.currentRawFrame+t*this.frameModifier)},AnimationItem.prototype.updateAnimation=function(t){this.setCurrentRawFrameValue(this.totalFrames*t)},AnimationItem.prototype.moveFrame=function(t,e){e&&this.name!=e||this.setCurrentRawFrameValue(this.currentRawFrame+t)},AnimationItem.prototype.setCurrentRawFrameValue=function(t){this.currentRawFrame=t,this.currentRawFrame>=this.totalFrames?(this.currentRawFrame=this.currentRawFrame%this.totalFrames,this.loop===!1?this.goToAndStop(this.totalFrames-1):(this.playCount+=1,this.loop!==!0&&this.playCount==this.loop&&this.goToAndStop(this.totalFrames-1))):this.currentRawFrame<0&&(this.playCount-=1,this.playCount<0&&(this.playCount=0),this.currentRawFrame=this.totalFrames+this.currentRawFrame),this.gotoFrame()},AnimationItem.prototype.setSpeed=function(t){this.playSpeed=t,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(t){this.playDirection=0>t?-1:1,this.updaFrameModifier()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssets=function(){return this.assets},function(t){function e(t){animationManager.play(t)}function a(t){animationManager.pause(t)}function i(t){animationManager.togglePause(t)}function r(t,e){animationManager.setSpeed(t,e)}function n(t,e){animationManager.setDirection(t,e)}function s(t){animationManager.stop(t)}function o(t){animationManager.moveFrame(t)}function h(){animationManager.searchAnimations()}function m(t){animationManager.registerAnimation(t)}function p(){animationManager.resize()}function l(){animationManager.start()}function c(t){subframeEnabled=t}function d(){"complete"===document.readyState&&(clearInterval(f),h(),e())}var u={};u.play=e,u.pause=a,u.togglePause=i,u.setSpeed=r,u.setDirection=n,u.stop=s,u.moveFrame=o,u.searchAnimations=h,u.registerAnimation=m,u.setSubframeRendering=c,u.resize=p,u.start=l,u.checkReady=d,t.bodymovin=u;var f=setInterval(d,100)}(window);}(window));