svg-path-simplify 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";const{abs:e,acos:t,asin:l,atan:a,atan2:s,ceil:n,cos:r,exp:p,floor:u,log:i,max:y,min:o,pow:h,random:c,round:x,sin:f,sqrt:g,tan:v,PI:d}=Math;function m(e,t,l=!1){let a=s(t.y-e.y,t.x-e.x);return l&&a<0&&(a+=2*Math.PI),a}function M(e,t,l,a,s=!0){let n,r,p,u,i,y={};try{if(n=(a.y-l.y)*(t.x-e.x)-(a.x-l.x)*(t.y-e.y),0==n)return!1}catch{console.log("!catch",e,t,"p3:",l,a)}r=e.y-l.y,p=e.x-l.x,u=(a.x-l.x)*r-(a.y-l.y)*p,i=(t.x-e.x)*r-(t.y-e.y)*p,r=u/n,p=i/n,y={x:e.x+r*(t.x-e.x),y:e.y+r*(t.y-e.y)};let o=!1;return r>0&&r<1&&p>0&&p<1&&(o=!0),!(s&&!o)&&y}function b(e,t){return g((t.x-e.x)*(t.x-e.x)+(t.y-e.y)*(t.y-e.y))}function C(e,t){return(t.x-e.x)**2+(t.y-e.y)**2}function A(e,t,l,a=!1){let s={x:(t.x-e.x)*l+e.x,y:(t.y-e.y)*l+e.y};return a&&(s.angle=m(e,t),s.angle<0&&(s.angle+=2*d)),s}function w(e,t=.5,l=!1,a=!1){let s;return s=e.length>2?((e,t,l=!1)=>{let s=4===e.length,n=e[0],r=e[1],p=s?e[2]:e[1],u=e[e.length-1],i={x:0,y:0};if(l||a){let e,l,y,o,h,c=n.x===r.x&&n.y===r.y,x=u.x===p.x&&u.y===p.y;0!==t||c?1!==t||x?(c&&(t+=1e-7),x&&(t-=1e-7),e=A(n,r,t),s?(l=A(r,p,t),y=A(p,u,t),o=A(e,l,t),h=A(l,y,t),i=A(o,h,t),i.angle=m(o,h),a&&(i.cpts=[l,y,o,h])):(l=A(n,r,t),y=A(r,u,t),i=A(l,y,t),i.angle=m(l,y),a&&(i.cpts=[l,y]))):(i.x=u.x,i.y=u.y,i.angle=m(p,u)):(i.x=n.x,i.y=n.y,i.angle=m(n,r))}else{let e=1-t;i=s?{x:e**3*n.x+3*e**2*t*r.x+3*e*t**2*p.x+t**3*u.x,y:e**3*n.y+3*e**2*t*r.y+3*e*t**2*p.y+t**3*u.y}:{x:e*e*n.x+2*e*t*r.x+t**2*u.x,y:e*e*n.y+2*e*t*r.y+t**2*u.y}}return i})(e,t,l):A(e[0],e[1],t,l),l&&s.angle<0&&(s.angle+=2*d),s}function L(e,t,l,s,n,p=0,u=!0,i=!1){if(n=i?n*d/180:n,p=i?p*d/180:p,p=l!==s&&p!==2*d?p:0,u&&l!==s){let e=a(v(n=p?n-p:n)*(l/s));n=r(n)<0?e+d:e}let y=e+l*r(n),o=t+s*f(n),h={x:y,y:o};return p&&(h.x=e+(y-e)*r(p)-(o-t)*f(p),h.y=t+(y-e)*f(p)+(o-t)*r(p)),h}function P(e,t=[],l=.05){let a=3===t.length,s=t[0]||null,n=a?t[1]:null,r=a?t[2]:t[1],p=.5*Math.PI,u=!1,i=!1,y=s?m(r,s,!0):null;if(u=Math.abs(y%p)<l||Math.abs(y%p-p)<l,a){let e=n?m(n,r,!0):0;i=Math.abs(e%p)<=l||Math.abs(e%p-p)<=l}return u||i}function S(e){return 4===e.length?function(e,t,l,a){let[s,n,r,p,u,i,y,o]=[e.x,e.y,t.x,t.y,l.x,l.y,a.x,a.y],h=Math.min(e.y,a.y),c=Math.min(e.x,a.x),x=Math.max(e.x,a.x),f=Math.max(e.y,a.y);if(t.y>=h&&t.y<=f&&l.y>=h&&l.y<=f&&t.x>=c&&t.x<=x&&l.x>=c&&l.x<=x)return[];let g,v,d,m,M,b,C,A,w=[];for(let e=0;e<2;++e)if(0==e?(v=6*s-12*r+6*u,g=-3*s+9*r-9*u+3*y,d=3*r-3*s):(v=6*n-12*p+6*i,g=-3*n+9*p-9*i+3*o,d=3*p-3*n),Math.abs(g)<1e-12){if(Math.abs(v)<1e-12)continue;m=-d/v,0<m&&m<1&&w.push(m)}else C=v*v-4*d*g,C<0?Math.abs(C)<1e-12&&(m=-v/(2*g),0<m&&m<1&&w.push(m)):(A=Math.sqrt(C),M=(-v+A)/(2*g),0<M&&M<1&&w.push(M),b=(-v-A)/(2*g),0<b&&b<1&&w.push(b));let L=w.length;for(;L--;)m=w[L];return w}(e[0],e[1],e[2],e[3]):function(e,t,l){let a,s,n,r=Math.min(e.y,l.y),p=Math.min(e.x,l.x),u=Math.max(e.x,l.x),i=Math.max(e.y,l.y);if(t.y>=r&&t.y<=i&&t.x>=p&&t.x<=u)return[];let[y,o,h,c,x,f]=[e.x,e.y,t.x,t.y,l.x,l.y],g=[];for(let e=0;e<2;++e)a=0==e?y-2*h+x:o-2*c+f,s=0==e?-2*y+2*h:-2*o+2*c,Math.abs(a)>1e-12&&(n=-s/(2*a),n>0&&n<1&&g.push(n));return g}(e[0],e[1],e[2])}function I(e,t=.025){let l=e[0],a=e[e.length-1],s=e.map(e=>e.x),n=e.map(e=>e.y),r=Math.min(...s),p=Math.max(...s),u=Math.min(...n),i=p-r,y=Math.max(...n)-u;if(e.length<3||0===i||0===y)return{area:0,flat:!0,thresh:1e-4,ratio:0};let o=C(l,a),h=C(l,e[0]),c=(h+(e.length>3?C(a,e[1]):h))/2;let x=.5*(i+y)*.5,f=0;for(let t=0,l=e.length;t<l;t++){f+=e[t].x*e[t===e.length-1?0:t+1].y*.5-e[t===e.length-1?0:t+1].x*e[t].y*.5}f=+Math.abs(f).toFixed(9);return{area:f,flat:0===f||f<c/1e3,thresh:x,ratio:f/c,squareDist:o,areaThresh:o/1e3}}function k(e,t,l){let a=!1,s=2===t.length,n=t[0],r=s?t[1]:n;if(e.x===n.x&&e.y===n.y&&l.x===r.x&&l.y===r.y)return!0;let p=n.x-e.x,u=n.y-e.y,i=l.x-r.x,y=l.y-r.y,o=Math.abs(p*y-u*i);if(!o)return!0;let h=l.x-e.x,c=l.y-e.y,x=Math.abs(h*u-c*p);return!x||(x/o<1.1&&(a=!0),a)}function F(e,t){return(Math.abs(t.x-e.x)+Math.abs(t.y-e.y))/2}function z(e){let t=[];try{e.map((e,t)=>"m"===e.type.toLowerCase()?t:-1).filter(e=>-1!==e)}catch{console.log("catch",e)}let l=e.map((e,t)=>"m"===e.type.toLowerCase()?t:-1).filter(e=>-1!==e);return 1===l.length?[e]:(l.forEach((a,s)=>{t.push(e.slice(a,l[s+1]))}),t)}function E(e,t){let l,a,s,n,r,p,u=[],i=[],y=e[0],o=e[1],h=e[e.length-2],c=e[e.length-1];return 4===e.length?(l=w([y,o],t),a=w([o,h],t),s=w([h,c],t),n=w([l,a],t),r=w([a,s],t),p=w([n,r],t),u.push({x:y.x,y:y.y},{x:l.x,y:l.y},{x:n.x,y:n.y},{x:p.x,y:p.y}),i.push({x:p.x,y:p.y},{x:r.x,y:r.y},{x:s.x,y:s.y},{x:c.x,y:c.y})):3===e.length?(a=w([y,o],t),s=w([o,c],t),p=w([a,s],t),u.push({x:y.x,y:y.y},{x:a.x,y:a.y},{x:p.x,y:p.y}),i.push({x:p.x,y:p.y},{x:s.x,y:s.y},{x:c.x,y:c.y})):2===e.length&&(a=w([y,c],t),u.push({x:y.x,y:y.y},{x:a.x,y:a.y}),i.push({x:a.x,y:a.y},{x:c.x,y:c.y})),[u,i]}function Q(e,t,l=0,a=1){let s=[],n=6===t.length?"C":"Q",r={x:t[0],y:t[1]},p="C"===n?{x:t[2],y:t[3]}:r,u={x:t[4],y:t[5]},i=Math.max(u.x,e.x),y=Math.min(u.x,e.x),o=Math.max(u.y,e.y),h=Math.min(u.y,e.y),c=0;if(r.x<y||r.x>i||r.y<h||r.y>o||p.x<y||p.x>i||p.y<h||p.y>o){let i=S("C"===n?[e,r,p,u]:[e,r,u]).sort();if(i=i.filter(e=>e>l&&e<a),i.length){let l=function(e,t,l,a=!0){let s=[];if(!l.length)return!1;let n,r,p,u=t.length,i={x:t[u-2],y:t[u-1]};2===t.length?p=[e,i]:4===t.length?(n={x:t[0],y:t[1]},p=[e,n,i]):6===t.length&&(n={x:t[0],y:t[1]},r={x:t[2],y:t[3]},p=[e,n,r,i]);if(l.length)if(1===l.length){let e=E(p,l[0]),t=e[0],a=e[1];s.push(t,a)}else{let e=l[0],t=E(p,e),a=t[0];s.push(a),p=t[1];for(let t=1;t<l.length;t++){e=l[t-1];let a=E(p,(l[t]-e)/(1-e));s.push(a[0]),t===l.length-1&&s.push(a[a.length-1]),p=a[1]}}if(a){let e,t,l=[];return s.forEach(a=>{e={type:"",values:[]},a.shift(),t=a.map(e=>Object.values(e)).flat(),e.values=t,3===a.length?e.type="C":2===a.length?e.type="Q":1===a.length&&(e.type="L"),l.push(e)}),l}return s}(e,t,i);s.push(...l),c+=l.length}else s.push({type:n,values:t})}else s.push({type:n,values:t});return{pathData:s,count:c}}function T(e,t=0,l=1){let a=[e[0]],s={x:e[0].values[0],y:e[0].values[1]},n={x:e[0].values[0],y:e[0].values[1]},r=e.length;for(let p=1;r&&p<r;p++){let r=e[p],{type:u,values:i}=r,y=i.slice(-2);if(y[0],y[1],"C"!==u&&"Q"!==u)a.push(r);else if("C"===u||"Q"===u){let e=Q(s,i,t,l).pathData;a.push(...e)}s={x:y[0],y:y[1]},"z"===u.toLowerCase()?s=n:"M"===u&&(n={x:y[0],y:y[1]})}return a}function $(e,t=-1){let l=e.map(e=>e.x),a=e.map(e=>e.y),s=Math.min(...l),n=Math.max(...l),r=Math.min(...a),p=Math.max(...a),u={x:s,left:s,right:n,y:r,top:r,bottom:p,width:n-s,height:p-r};if(t>-1)for(let e in u)u[e]=+u[e].toFixed(t);return u}function q(e){let t=[];return e.forEach(e=>{let l=function(e){let t=function(e){let t=[];for(let l=0;l<e.length;l++){let a=e[l],s=l>0?e[l-1]:e[l],{type:n,values:r}=a,p={x:s.values[s.values.length-2],y:s.values[s.values.length-1]},u=r.length?{x:r[r.length-2],y:r[r.length-1]}:"",i=r.length?{x:r[0],y:r[1]}:"";switch(n){case"A":if("function"!=typeof arcToBezier){let e=b(p,u)/2,l=A(p,u,.5),a=L(l.x,l.y,e,e,0),s=L(l.x,l.y,e,e,Math.PI);t.push(a,s,u);break}arcToBezier(p,r).forEach(e=>{let l=e.values,a={x:l[0],y:l[1]},s={x:l[2],y:l[3]},n={x:l[4],y:l[5]};t.push(a,s,n)});break;case"C":let e={x:r[2],y:r[3]};t.push(i,e);break;case"Q":t.push(i)}"z"!==n.toLowerCase()&&t.push(u)}return t}(e),l=$(t);return l}(e);t.push(l)}),t}function D(e,t){let[l,a,s,n,r,p]=[e.x,e.y,e.width,e.height,e.x+e.width,e.y+e.height],[u,i,y,o,h,c]=[t.x,t.y,t.width,t.height,t.x+t.width,t.y+t.height],x=!1;return s*n!=y*o&&s*n>y*o&&l<u&&r>h&&a<i&&p>c&&(x=!0),x}function O(t,l=9){let a=0,n=[],p=z(t),u=p.length>1,i=[];if(u){let e=q(p);e.forEach(function(t,l){for(let l=0;l<e.length;l++){let a=e[l];if(t!=a){D(t,a)&&i.push(l)}}})}return p.forEach((t,l)=>{n=[];let p=0,u=0,y=1,o=[];t.forEach(function(l,a){let[u,i]=[l.type,l.values],y=i.length;if(i.length){let h=(a>0?t[a-1]:t[0]).values,c=h.length,x={x:h[c-2],y:h[c-1]},v={x:i[y-2],y:i[y-1]};if("C"===u||"Q"===u){let e={x:i[0],y:i[1]};o="C"===u?[x,e,{x:i[2],y:i[3]},v]:[x,e,v];let t=Math.abs(function(e,t=!1){let l,[a,s,n,r]=[e[0],e[1],e[2],e[e.length-1]];if(e.length<3)return 0;3===e.length&&(s={x:1*e[0].x/3+2*e[1].x/3,y:1*e[0].y/3+2*e[1].y/3},n={x:1*e[2].x/3+2*e[1].x/3,y:1*e[2].y/3+2*e[1].y/3});return l=3*(a.x*(-2*s.y-n.y+3*r.y)+s.x*(2*a.y-n.y-r.y)+n.x*(a.y+s.y-2*r.y)+r.x*(-3*a.y+s.y+2*n.y))/20,t?Math.abs(l):l}(o));p+=t,n.push(x,v)}else if("A"===u){let t=function(t,l,a,n,p,u,i,y,o){const h=(e,t,l,a)=>s(a-t,l-e);let c={cx:0,cy:0,rx:a=e(a),ry:n=e(n),startAngle:0,endAngle:0,deltaAngle:0,clockwise:i,xAxisRotation:p,largeArc:u,sweep:i};if(0==a||0==n)throw Error("rx and ry can not be 0");if(a===n){let e=Math.abs(y-t),a=Math.abs(o-l),s=e,n=Math.min(t,y),r=Math.min(l,o),p=.5*Math.PI;if(0===e&&a||0===a&&e)return s=0===e&&a?a/2:e/2,c.rx=s,c.ry=s,0===e&&a?(c.cx=t,c.cy=r+a/2,c.startAngle=l>o?p:-p,c.endAngle=l>o?-p:p,c.deltaAngle=i?Math.PI:-Math.PI):0===a&&e&&(c.cx=n+e/2,c.cy=l,c.startAngle=t>y?Math.PI:0,c.endAngle=t>y?-Math.PI:Math.PI,c.deltaAngle=i?Math.PI:-Math.PI),c}let x,v,m=a===n?0:p*d/180,M=m?f(m):0,b=m?r(m):1,C=(t-y)/2,A=(l-o)/2,w=(t+y)/2,L=(l+o)/2,P=m?b*C+M*A:C,S=m?b*A-M*C:A,I=P*P/(a*a)+S*S/(n*n);I>1&&(a*=g(I),n*=g(I),c.rx=a,c.ry=n);let k=a*n,F=a*S,z=n*P,E=F**2+z**2;if(!E)throw Error("start point can not be same as end point");let Q=g(e((k*k-E)/E));u==i&&(Q=-Q);let T=Q*F/n,$=-Q*z/a;x=m?b*T-M*$+w:w+T,v=m?M*T+b*$+L:L+$,c.cy=v,c.cx=x;let q=h(x,v,t,l),D=h(x,v,y,o);!i&&D>q&&(D-=2*Math.PI),i&&q>D&&(D=D<=0?D+2*Math.PI:D);let O=D-q;return c.startAngle=q,c.endAngle=D,c.deltaAngle=O,c}(x.x,x.y,l.values[0],l.values[1],l.values[2],l.values[3],l.values[4],v.x,v.y),{cx:a,cy:u,rx:i,ry:y,startAngle:o,endAngle:h,deltaAngle:c}=t,m=Math.abs(function(e,t,l,a){const s=Math.PI*e*t;let n=(a-l+2*Math.PI)%(2*Math.PI);if(e===t)return s*(n/(2*Math.PI));const r=l=>Math.atan2(e*Math.sin(l),t*Math.cos(l));return l=r(l),a=r(a),n=(a-l+2*Math.PI)%(2*Math.PI),s*(n/(2*Math.PI))}(i,y,o,h));m-=Math.abs(N([x,{x:a,y:u},v])),n.push(x,v),p+=m}else n.push(x,v)}});let h=N(n);-1!==i.indexOf(l)&&(y=-1),u=h<0&&p<0?(Math.abs(p)-Math.abs(h))*y:(Math.abs(p)+Math.abs(h))*y,a+=u}),a}function N(e,t=!1){let l=0;for(let t=0,a=e.length;a&&t<a;t++){l+=e[t].x*e[t===e.length-1?0:t+1].y*.5-e[t===e.length-1?0:t+1].x*e[t].y*.5}return t&&(l=Math.abs(l)),l}function j(e,t=0){t=parseFloat(t);let l=e.length,a=t>1,s=!a&&!t,n="",r=a?"\n":s?"":" ",p=s?"":" ";n=`${e[0].type}${p}${e[0].values.join(" ")}${r}`;for(let t=1;t<l;t++){let l=e[t-1],a=e[t],{type:u,values:i}=a;if(!s||"A"!==u&&"a"!==u||(i=[i[0],i[1],i[2],`${i[3]}${i[4]}${i[5]}`,i[6]]),u=l.type===a.type&&"m"!==a.type.toLowerCase()&&s||"M"===l.type&&"L"===a.type&&s?" ":a.type,s){let e="",t=!1;for(let l=0,a=i.length;l<a;l++){let a=i[l],s=a.toString(),n=s.includes(".")&&Math.abs(a)<1;n&&t&&(s=s.replace(/^0\./,".")),!(l>0)||t&&n||(e+=" "),e+=s,t=n}n+=`${u}${p}${e}${r}`}else n+=`${u}${p}${i.join(" ")}${r}`}return s&&(n=n.replace(/ 0\./g," .").replace(/ -/g,"-").replace(/-0\./g,"-.").replace(/Z/g,"z")),n}function B(e,t,l=!1,a=1){let s=[e,t],n=function(e,t){let l=M(e.p0,e.cp1,t.cp2,t.p,!1),a=M(l,t.p,t.p0,t.cp1,!1),s=b(l,t.p),n=b(a,t.p),r=1-n/s,p=b(e.cp2,e.p),u=b(e.cp2,t.cp1);return r=Math.min(p)/u,r}(e,t),r=F(e.p0,e.p),p=F(t.p0,t.p),u=.05*Math.min(r,p)*a,i=function(e,t,l=0,a=0){let{p0:s,cp1:n}=e,{p:r,cp2:p}=t,u={x:(n.x-(1-l)*s.x)/l,y:(n.y-(1-l)*s.y)/l},i={x:(p.x-a*r.x)/(1-a),y:(p.y-a*r.y)/(1-a)},y={p0:s,cp1:u,cp2:i,p:r};return y}(e,t,n,n),y=w([i.p0,i.cp1,i.cp2,i.p],n),o=F(e.p,y),h=0,c=0,x=!1,f=o;if(o<u){let l=.5*(1+n);if(h=F(w([t.p0,t.cp1,t.cp2,t.p],.5),w([i.p0,i.cp1,i.cp2,i.p],l)),f+=h,h<u){let t=.5*n;c=F(w([e.p0,e.cp1,e.cp2,e.p],.5),w([i.p0,i.cp1,i.cp2,i.p],t)),h+c<u&&(x=!0),f+=c}}if(l&&!x){let l=function(e,t,l=0,a=1){const s=(e,t,l,a,s)=>{let n=1-s;return{x:3*n*n*(t.x-e.x)+6*n*s*(l.x-t.x)+3*s*s*(a.x-l.x),y:3*n*n*(t.y-e.y)+6*n*s*(l.y-t.y)+3*s*s*(a.y-l.y)}};let n=[e,t],r=C(e.p0,e.p)>C(t.p0,t.p),p=JSON.parse(JSON.stringify(e)),u=JSON.parse(JSON.stringify(t)),i=M(p.p0,p.cp1,u.p,u.cp2,!1);if(!i)return n;if(r){let l={p0:{x:e.p.x,y:e.p.y},cp1:{x:e.cp2.x,y:e.cp2.y},cp2:{x:e.cp1.x,y:e.cp1.y},p:{x:e.p0.x,y:e.p0.y}};e={p0:{x:t.p.x,y:t.p.y},cp1:{x:t.cp2.x,y:t.cp2.y},cp2:{x:t.cp1.x,y:t.cp1.y},p:{x:t.p0.x,y:t.p0.y}},t=l}let y=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),o=(e,t)=>({x:e.x*t,y:e.y*t}),h=(e,t)=>e.x*t.x+e.y*t.y,c=t.p0,x=s(t.p0,t.cp1,t.cp2,t.p,0),f=h(y(e.p0,c),x)/h(x,x),g=w([t.p0,t.cp1,t.cp2,t.p],f),v=s(t.p0,t.cp1,t.cp2,t.p,f);f-=h(y(g,e.p0),v)/h(v,v);let d=w([t.p0,t.cp1,t.cp2,t.p],f),m=t.p,b=s(t.p0,t.cp1,t.cp2,t.p,f),L=s(t.p0,t.cp1,t.cp2,t.p,1),P=1-f,S=(I=d,k=o(b,P/3),{x:I.x+k.x,y:I.y+k.y});var I,k;let z=y(m,o(L,P/3)),E={p0:d,cp1:S,cp2:z,p:m};r&&(E={p0:m,cp1:z,cp2:S,p:d});let Q=.5*(1-f),T=w([E.p0,E.cp1,E.cp2,E.p],Q,!1,!0),$=T.cpts[2],q=M(T,$,E.p0,i,!1),D=M(T,$,E.p,i,!1),N=A(E.p0,q,1.333),B=A(E.p,D,1.333);if(M(p.p0,N,u.p,B,!0))return n;E.cp1=N,E.cp2=B;let Z=F(p.p0,E.p0)+F(u.p,E.p);if(E.p0=p.p0,E.p=u.p,E.extreme=u.extreme,E.corner=u.corner,E.dimA=u.dimA,E.directionChange=u.directionChange,E.values=[E.cp1.x,E.cp1.y,E.cp2.x,E.cp2.y,E.p.x,E.p.y],Z<l){let e=O([{type:"M",values:[p.p0.x,p.p0.y]},{type:"C",values:[p.cp1.x,p.cp1.y,p.cp2.x,p.cp2.y,p.p.x,p.p.y]},{type:"C",values:[u.cp1.x,u.cp1.y,u.cp2.x,u.cp2.y,u.p.x,u.p.y]}]),t=[{type:"M",values:[E.p0.x,E.p0.y]},{type:"C",values:[E.cp1.x,E.cp1.y,E.cp2.x,E.cp2.y,E.p.x,E.p.y]}],l=O(t),s=Math.abs(l/e-1);E.error=10*s*a,j(t),s<.01&&(n=[E])}return n}(e,t,u,a);1===l.length&&(x=!0,i=l[0],f=i.error)}return x&&(i.p0=e.p0,i.p=t.p,i.dimA=F(i.p0,i.p),i.type="C",i.extreme=t.extreme,i.directionChange=t.directionChange,i.corner=t.corner,i.values=[i.cp1.x,i.cp1.y,i.cp2.x,i.cp2.y,i.p.x,i.p.y],i.error=f/u,s=[i]),s}function Z(e=[]){let t,l=[],a=function(e){let t=[],l={x:e[0].values[0],y:e[0].values[1]};return e.forEach(e=>{let{type:a,values:s}=e;if(s.length){let e=s.length>1?{x:s[s.length-2],y:s[s.length-1]}:"V"===a?{x:l.x,y:s[0]}:{x:s[0],y:l.y};t.push(e),l=e}}),t}(e),s=$(a),{left:n,right:r,top:p,bottom:u,width:i,height:y}=s,o=e[0].values[0],h=e[0].values[1],c={x:e[0].values[0],y:e[0].values[1]},x={x:e[0].values[0],y:e[0].values[1]};e[0].idx=0,e[0].p0=c,e[0].p=c,e[0].lineto=!1,e[0].corner=!1,e[0].extreme=!1,e[0].directionChange=!1,e[0].closePath=!1,e[0].dimA=0;let f=[e[0]],g=0,v=e.length;for(let l=2;v&&l<=v;l++){let a=e[l-1],{type:s,values:i}=a,y=i.slice(-2),v=[x],d=!1;a.idx=l-1,a.lineto=!1,a.corner=!1,a.extreme=!1,a.directionChange=!1,a.closePath=!1,a.dimA=0;let M,b,A,w,L,S,k,z=.05;t=y.length?{x:y[0],y:y[1]}:c,"M"===s?(c=t,x=t):"z"===s.toLowerCase()&&(t=c),a.p0=x,a.p=t;let E=F(x,t);if(a.dimA=E,"L"===s&&(a.lineto=!0),"Z"===s&&(a.closePath=!0,c.x!==o&&c.y!==h&&(a.lineto=!0)),"Q"!==s&&"C"!==s||(M={x:i[0],y:i[1]},b="C"===s?{x:i[2],y:i[3]}:null,a.cp1=M,b&&(a.cp2=b)),i.length>2){"Q"!==s&&"C"!==s||v.push(M),"C"===s&&v.push(b),v.push(t),d=I(v).flat,a.flat=d,d&&(a.extreme=!1)}d||"L"===s||t.x!==n&&t.y!==p&&t.x!==r&&t.y!==u||(a.extreme=!0);let Q=e[l]?e[l]:null,T=Q?Q.values.slice(-2):null;S=Q?Q.type:null,!Q||"Q"!==Q.type&&"C"!==Q.type||(L=Q?{x:T[0],y:T[1]}:null,A={x:Q.values[0],y:Q.values[1]},w="C"===Q.type?{x:Q.values[2],y:Q.values[3]}:null),k=N(v);let $=g<0&&k>0||g>0&&k<0;if(g=k,$&&(a.directionChange=!0),("Q"===s||"C"===s)&&("Q"===s&&"Q"===S||"C"===s&&"C"===S)){let e=v.slice(1),l=I("C"===s?[t,A,w,L]:[t,A,L],((L?Math.abs(L.x-x.x):0)+(L?Math.abs(L.y-x.y):0))/2*.1).flat;if((!d||!l)&&(!!a.extreme||P(0,e,z)))a.extreme=!0;else{let e=b?[b,t]:[M,t],l=[t,A],s=m(...e,!0),n=m(...l,!0),r=180*Math.abs(s-n)/Math.PI,p=C(...e),u=C(...l);r>10&&p&&u&&(a.corner=!0)}}f.push(a),x=t}return l={pathData:f,bb:s,dimA:(i+y)/2},l}function R(e,t=-1){let l=!("auto"!=t||!e[0].hasOwnProperty("decimals"));for(let a=0,s=e.length;a<s;a++){let s=e[a];(t>-1||l)&&(t=l?s.decimals:t,e[a].values=s.values.map(e=>e?+e.toFixed(t):e))}return e}function H(e={},t={},l={},a={}){let s=A(e,t,1.5),n=A(a,l,1.5),r=.01*F(e,a),p=F(s,n),u=null,i={type:"C",values:[t.x,t.y,l.x,l.y,a.x,a.y]};return p<r&&(u=M(e,t,a,l,!1),u&&(i.type="Q",i.values=[u.x,u.y,a.x,a.y],i.p0=e,i.cp1=u,i.p=a)),i}function U(e,{toShorthands:t=!0,toRelative:l=!0,decimals:a=3}={}){return t&&(e=function(e,t=-1,l=!0){let a;if(l){let t=e.map(e=>e.type).join("");a=/[astvqmhlc]/g.test(t)}e=l&&a?W(e,t):e;let s={type:"M",values:e[0].values};e[0].decimals&&(s.decimals=e[0].decimals);let n,r=[s],p={x:e[0].values[0],y:e[0].values[1]},u=.01;for(let l=1,a=e.length;l<a;l++){let a=e[l],{type:i,values:y}=a,o=y.slice(-2),h=e[l-1],c=h.type;n={x:o[0],y:o[1]};let x,f,g,v,d={x:y[0],y:y[1]},m=Math.abs(n.x-p.x),M=Math.abs(n.y-p.y),b=(m+M)/2*u;switch(i){case"L":s=0===M||M<b&&m>b?{type:"H",values:[y[0]]}:0===m||M>b&&m<b?{type:"V",values:[y[1]]}:a;break;case"Q":if("Q"!==c){p={x:o[0],y:o[1]},r.push(a);continue}let e={x:h.values[0],y:h.values[1]};v={x:2*p.x-e.x,y:2*p.y-e.y},x=Math.abs(d.x-v.x),f=Math.abs(d.y-v.y),g=(x+f)/2,s=g<b?{type:"T",values:[n.x,n.y]}:a;break;case"C":let t={x:y[2],y:y[3]};if("C"!==c){r.push(a),p={x:o[0],y:o[1]};continue}let l={x:h.values[2],y:h.values[3]};v={x:2*p.x-l.x,y:2*p.y-l.y},x=Math.abs(d.x-v.x),f=Math.abs(d.y-v.y),g=(x+f)/2,s=g<b?{type:"S",values:[t.x,t.y,n.x,n.y]}:a;break;default:s={type:i,values:y}}(a.decimals||0===a.decimals)&&(s.decimals=a.decimals),t>-1&&(s.values=s.values.map(e=>+e.toFixed(t))),p={x:o[0],y:o[1]},r.push(s)}return r}(e)),e=R(e,a),l&&(e=function(e,t=-1){return V(e,!0,t)}(e)),a>-1&&(e=R(e,a)),e}function J(e,t){Array.isArray(e)&&(e={x:e[0],y:e[1]});let l={x:e.x+2/3*(t[0]-e.x),y:e.y+2/3*(t[1]-e.y)},a={x:t[2]+2/3*(t[0]-t[2]),y:t[3]+2/3*(t[1]-t[3])};return{type:"C",values:[l.x,l.y,a.x,a.y,t[2],t[3]]}}function V(e,t=!1,l=-1){l>=0&&(e[0].values=e[0].values.map(e=>+e.toFixed(l)));let a=e[0].values,s=a[0],n=a[1],r=s,p=n;for(let a=1,u=e.length;a<u;a++){let u=e[a],{type:i,values:y}=u,o=t?i.toLowerCase():i.toUpperCase();if(i!==o)switch(i=o,u.type=i,i){case"a":case"A":y[5]=t?y[5]-s:y[5]+s,y[6]=t?y[6]-n:y[6]+n;break;case"v":case"V":y[0]=t?y[0]-n:y[0]+n;break;case"h":case"H":y[0]=t?y[0]-s:y[0]+s;break;case"m":case"M":t?(y[0]-=s,y[1]-=n):(y[0]+=s,y[1]+=n),r=t?y[0]+s:y[0],p=t?y[1]+n:y[1];break;default:if(y.length)for(let e=0;e<y.length;e++)y[e]=t?y[e]-(e%2?n:s):y[e]+(e%2?n:s)}let h=y.length;switch(i){case"z":case"Z":s=r,n=p;break;case"h":case"H":s=t?s+y[0]:y[0];break;case"v":case"V":n=t?n+y[0]:y[0];break;case"m":case"M":r=y[h-2]+(t?s:0),p=y[h-1]+(t?n:0);default:s=y[h-2]+(t?s:0),n=y[h-1]+(t?n:0)}l>=0&&(u.values=u.values.map(e=>+e.toFixed(l)))}return e}function W(e,t=-1){return V(e,!1,t)}function X(e,t,l=1){const a=2*Math.PI;let[s,n,r,p,u,i,y]=t;if(0===s||0===n)return[];let o=r?r*a/360:0,h=o?Math.sin(o):0,c=o?Math.cos(o):1,x=c*(e.x-i)/2+h*(e.y-y)/2,f=-h*(e.x-i)/2+c*(e.y-y)/2;if(0===x&&0===f)return[];s=Math.abs(s),n=Math.abs(n);let g=x*x/(s*s)+f*f/(n*n);if(g>1){let e=Math.sqrt(g);s*=e,n*=e}let v=s*s,d=s===n?v:n*n,m=x*x,M=f*f,b=v*d-v*M-d*m;b<=0?b=0:(b/=v*M+d*m,b=Math.sqrt(b)*(p===u?-1:1));let C=b?b*s/n*f:0,A=b?b*-n/s*x:0,w=c*C-h*A+(e.x+i)/2,L=h*C+c*A+(e.y+y)/2,P=(x-C)/s,S=(f-A)/n,I=(-x-C)/s,k=(-f-A)/n;const F=(e,t,l,a)=>{let s=+(e*l+t*a).toFixed(9);return 1===s||-1===s?1===s?0:Math.PI:(s=s>1?1:s<-1?-1:s,(e*a-t*l<0?-1:1)*Math.acos(s))};let z=F(1,0,P,S),E=F(P,S,I,k);0===u&&E>0?E-=2*Math.PI:1===u&&E<0&&(E+=2*Math.PI);let Q=(+(Math.abs(E)/(a/4)).toFixed(0)||1)*l;E/=Q;let T=[];const $=1.5707963267948966,q=.551785;let D=E===$?q:E===-$?-q:4/3*Math.tan(E/4),O=E?Math.cos(E):1,N=E?Math.sin(E):0;const j=(e,t,l,a,s)=>{let n=e!=t?Math.cos(e):a,r=e!=t?Math.sin(e):s,p=Math.cos(e+t),u=Math.sin(e+t);return[{x:n-r*l,y:r+n*l},{x:p+u*l,y:u-p*l},{x:p,y:u}]};for(let e=0;e<Q;e++){let e={type:"C",values:[]};j(z,E,D,O,N).forEach(t=>{let l=t.x*s,a=t.y*n;e.values.push(c*l-h*a+w,h*l+c*a+L)}),T.push(e),z+=E}return T}function Y(e,t,l,a,s=7.5){let n={type:"C",values:[t.x,t.y,l.x,l.y,a.x,a.y]},r=0,p=!1,u=m(e,t,!0),i=m(a,l,!0),y=180*Math.abs(u-i)/Math.PI;if(Math.abs(y%180-90)<3){let u=M(e,t,a,l,!1);if(u){let i=b(e,u),y=b(a,u),o=+Math.max(i,y).toFixed(8),h=+Math.min(i,y).toFixed(8),c=h,x=o,f=N([e,t,l,a])<0?0:1,g=Math.abs(a.x-e.x)>Math.abs(a.y-e.y);100/c*Math.abs(c-x)<5&&(c=o,x=c),g&&(c=o,x=h);let v=O([{type:"M",values:[e.x,e.y]},{type:"C",values:[t.x,t.y,l.x,l.y,a.x,a.y]}]),d={type:"A",values:[c,x,0,0,f,a.x,a.y]};r=Math.PI*(c*x)/4,r-=Math.abs(N([e,a,u])),function(e,t){let l=Math.abs(e-t);return Math.abs(100-100/e*(e+l))}(v,r)<s&&(p=!0,n=d)}}return{com:n,isArc:p,area:r}}function G(e){let t,l=[[]],a=0,s=[[]],n={x:e[0].values[0],y:e[0].values[1]};for(let r=0,p=e.length;r<p;r++){let p=e[r],{type:u,values:i}=p;if("A"===u){let u=e[r-1].values.slice(-2);n={x:u[0],y:u[1]};let[y,o,h,c,x,f,g]=i,v=100/y*Math.abs(y-o)<5;t={x:i[5],y:i[6]},p.p0=n,p.p=t,p.circular=v;let d=e[r+1];if(!l[a].length&&d&&"A"===d.type&&(l[a].push(p),s[a].push(r)),d&&"A"===d.type){let[e,p,u,i,h,c,x]=d.values,f=y!=e?100/y*Math.abs(y-e):0,g=o!=p?100/o*Math.abs(o-p):0;t={x:d.values[5],y:d.values[6]},d.p0=n,d.p=t,f<5&&g<5?(l[a].push(d),s[a].push(r+1)):(l.push([]),s.push([]),a++)}else l.push([]),s.push([]),a++}}if(!s.length)return e;l=l.filter(e=>e.length),s=s.filter(e=>e.length);for(let t=l.length-1;t>=0;t--){const a=l[t],n=s[t][0],r=a.length;let p=0,u=0;a.forEach(({values:e})=>{const[t,l]=e;p+=t,u+=l}),p/=r,u/=r;let i=100/p*Math.abs(p-u)<5;i&&(p=(p+u)/2,u=p);let y=e[n-1].values.slice(-2);if(y[0],y[1],4===r){let[t,l,s,y,o,h,c]=a[1].values,[,,,,,x,f]=a[3].values;i&&(p=1,u=1);let g={type:"A",values:[p,u,s,y,o,h,c]},v={type:"A",values:[p,u,s,y,o,x,f]};e.splice(n,r,g,v)}else if(3===r){let[t,l,s,i,y,o,h]=a[0].values,[c,x,,,,f,g]=a[2].values;i=1;let v={type:"A",values:[p,u,s,i,y,f,g]};e.splice(n,r,v)}else if(2===r){let[t,l,s,y,o,h,c]=a[0].values,[x,f,,,,g,v]=a[1].values;i&&(p=1,u=1,s=0);let{p0:d,p:m}=a[0],[M,b]=[a[1].p0,a[1].p];if(d.x!==b.x||d.y!==b.y){let t={type:"A",values:[p,u,s,y,o,g,v]};e.splice(n,r,t)}}}return e}function K(e=[],{toAbsolute:t=!0,toLonghands:l=!0,quadraticToCubic:a=!1,arcToCubic:s=!1,arcAccuracy:n=2}={},{hasRelatives:r=!0,hasShorthands:p=!0,hasQuadratics:u=!0,hasArcs:i=!0,testTypes:y=!1}={}){if(y){let t=Array.from(new Set(e.map(e=>e.type))).join("");r=/[lcqamts]/gi.test(t),u=/[qt]/gi.test(t),i=/[a]/gi.test(t),p=/[vhst]/gi.test(t),isPoly=/[mlz]/gi.test(t)}return(u&&a||i&&s)&&(l=!0,t=!0),r&&t&&(e=V(e,!1)),p&&l&&(e=function(e,t=-1,l=!0){let a=!1;if(l){let t=e.map(e=>e.type).join(""),l=/[hstv]/gi.test(t);if(a=/[astvqmhlc]/g.test(t),!l)return e}let s=[],n={type:"M",values:(e=l&&a?W(e,t):e)[0].values};s.push(n);for(let l=1,a=e.length;l<a;l++){let a,r,p,u,i,y,o,h,c=e[l],{type:x,values:f}=c,g=f.length,v=n.values,d=v.length,[m,M]=[f[g-2],f[g-1]],[b,C]=[v[d-2],v[d-1]];switch(x){case"H":n={type:"L",values:[f[0],C]};break;case"V":n={type:"L",values:[b,f[0]]};break;case"T":[a,r]=[v[0],v[1]],[b,C]=[v[d-2],v[d-1]],p=b+(b-a),u=C+(C-r),n={type:"Q",values:[p,u,m,M]};break;case"S":[a,r]=[v[0],v[1]],[b,C]=[v[d-2],v[d-1]],[o,h]=d>2&&"A"!==n.type?[v[2],v[3]]:[b,C],p=2*b-o,u=2*C-h,i=f[0],y=f[1],n={type:"C",values:[p,u,i,y,m,M]};break;default:n={type:x,values:f}}t>-1&&(n.values=n.values.map(e=>+e.toFixed(t))),s.push(n)}return s}(e,-1,!1)),i&&s&&(e=function(e,{arcAccuracy:t=1}={}){let l=[e[0]];for(let a=1,s=e.length;a<s;a++){let s=e[a],n=e[a-1].values,r=n.length,p={x:n[r-2],y:n[r-1]};"A"===s.type?X(p,s.values,t).forEach(e=>{l.push(e)}):l.push(s)}return l}(e,n)),u&&a&&(e=function(e){let t=[e[0]];for(let l=1,a=e.length;l<a;l++){let a=e[l],s=e[l-1].values,n=s.length,r={x:s[n-2],y:s[n-1]};"Q"===a.type?t.push(J(r,a.values)):t.push(a)}return t}(e)),e}function _(e,{toAbsolute:t=!0,toLonghands:l=!0,quadraticToCubic:a=!1,arcToCubic:s=!1,arcAccuracy:n=4}={}){let r=function(e,t=!0){if(e=e.trim(),""===e)return{pathData:[],hasRelatives:!1,hasShorthands:!1,hasQuadratics:!1,hasArcs:!1};const l=new Set([5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279]),a=e=>32===e||44===e||10===e||13===e||8232===e||8233===e||9===e||11===e||12===e||160===e||e>=5760&&l.has(e);let s,n=0,r=e.length,p="",u=[],i=-1,y="",o=!1,h=0,c=0,x=0,f=!1,g=new Set([]),v=[];const d=()=>{f&&("M"===p?p="L":"m"===p&&(p="l"),u.push({type:p,values:[]}),i++,c=0,f=!1)},m=(e=!1)=>{(e?h>0:""!==y)&&(t&&-1===i&&(s="Pathdata must start with M command",v.push(s),p="M",u.push({type:p,values:[]}),x=2,c=0,i++),"A"===p||"a"===p?(y=M(),u[i].values.push(...y)):(t&&y[1]&&"."!==y[1]&&"0"===y[0]&&(s=`${i}. command: Leading zeros not valid: ${y}`,v.push(s)),u[i].values.push(+y)),c++,y="",h=0,f=c>=x)},M=()=>{let e=y.length,t=!1;return 3===c&&2===e||4===c&&e>1?(y=[+y[0],+y[1]],t=!0,c++):3===c&&e>=3&&(y=[+y[0],+y[1],+y.substring(2)],t=!0,c+=2),t?y:[+y]},b=()=>{if(i>0){let e=u[i].values.length;if(e&&e<x||e&&e>x||("z"===p||"Z"===p)&&e>0){s=`${i}. command of type "${p}": ${x-e} values too few - ${x} expected`,v[v.length-1]!==s&&v.push(s)}}};let C=!1,A=!1,w=!1;for(;n<r;){let l=e.charCodeAt(n),r=l>47&&l<58;if(r||(C=101===l||69===l,A=45===l||43===l,w=46===l),r||A||w||C){if(o||45!==l&&46!==l)d();else{let e=46===l;m(e),d(),e&&h++}y+=e[n],o=C,n++}else if((l<48||l>5759)&&a(l))m(),n++;else{if(l>64){if(!ee.has(l)){s=`${i}. command "${e[n]}" is not a valid type`,v.push(s),n++;continue}""!==y&&(u[i].values.push(+y),c++,y=""),t&&b(),p=e[n],x=te[l];let a="M"===p||"m"===p,r=i>0&&("z"===u[i].type||"Z"===u[i].type);g.add(p),r&&!a&&(u.push({type:"m",values:[0,0]}),i++),u.push({type:p,values:[]}),i++,h=0,c=0,f=!1,n++;continue}r||(s=`${i}. ${e[n]} is not a valid separarator or token`,v.push(s),y=""),n++}}m(),t&&b();if(t&&v.length){if(s="Invalid path data:\n"+v.join("\n"),"log"!==t)throw new Error(s);console.log(s)}u[0].type="M";let L=Array.from(g).join(""),P=/[lcqamts]/g.test(L),S=/[vhst]/gi.test(L),I=/[a]/gi.test(L),k=/[qt]/gi.test(L);return{pathData:u,hasRelatives:P,hasShorthands:S,hasQuadratics:k,hasArcs:I}}(e),{hasRelatives:p,hasShorthands:u,hasQuadratics:i,hasArcs:y}=r,o=r.pathData;return o=K(o,{toAbsolute:t,toLonghands:l,quadraticToCubic:a,arcToCubic:s,arcAccuracy:n},{hasRelatives:p,hasShorthands:u,hasQuadratics:i,hasArcs:y}),o}const ee=new Set([77,109,65,97,67,99,76,108,81,113,83,115,84,116,72,104,86,118,90,122]),te=new Uint8Array(128);function le(e,t=1,l=!0){let a=[e[0]],s={x:e[0].values[0],y:e[0].values[1]},n=s,r=s;e[e.length-1].type.toLowerCase();for(let p=1,u=e.length;p<u;p++){let i=e[p-1],y=e[p],o=e[p+1]||e[u-1],h="z"===o.type.toLowerCase()?s:{x:o.values[o.values.length-2],y:o.values[o.values.length-1]},{type:c,values:x}=y,f=x.slice(-2);r="Z"!==c?{x:f[0],y:f[1]}:s;let g=N([n,r,h],!0);C(n,r),C(r,h);let v=g<C(n,h)/200*t,d=!1;if(l||"C"!==c||(v=!1),l&&("C"===c||"Q"===c)){d=k(n,"C"===c?[{x:x[0],y:x[1]},{x:x[2],y:x[3]}]:"Q"===c?[{x:x[0],y:x[1]}]:[],r),d&&p<u-1&&"C"!==i.type&&(c="L",y.type="L",y.values=f)}n=r,v&&p<u-1&&("L"===c||l&&d)||("M"===c?(s=r,n=s):"Z"===c&&(n=s),a.push(y))}return a}function ae(e){let t=[];return e.forEach((e,l)=>{let{type:a,values:s}=e;if("l"===a||"v"===a||"h"===a){("l"===a?"00"!==s.join(""):0!==s[0])&&t.push(e)}else t.push(e)}),t}function se(e){let t={x:e[0].values[0],y:e[0].values[1]},l=t,a=[e[0]];for(let s=1,n=e.length;s<n;s++){let n=e[s],{type:r,values:p}=n,u=p.slice(-2);l={x:u[0],y:u[1]},"L"===r&&l.x===t.x&&l.y===t.y||(a.push(n),t=l)}return a}function ne(e){let t=e.length;if(!("z"===e[t-1].type.toLowerCase()))return e;let l=0,a=[];for(let l=0;l<t;l++){let t=e[l],{type:s,values:n}=t,r=n.length;if(r){let e={type:s,x:n[r-2],y:n[r-1],index:0};e.index=l,a.push(e)}}return a=a.sort((e,t)=>+e.y.toFixed(3)-+t.y.toFixed(3)),l=a[0].index,l?pe(e,l):e}function re(e,t=!0,l=!0){let a=[],s=e.length,n={x:+e[0].values[0].toFixed(8),y:+e[0].values[1].toFixed(8)},r="z"===e[s-1].type.toLowerCase(),p=e.filter(e=>"L"===e.type),u=e[s-2],i=u.type,y=u.values.slice(-2).map(e=>+e.toFixed(8)),o=y[0]===n.x&&y[1]===n.y,h="L"!==e[1].type&&(!o||"L"===i);if(h=!1,!r)return e;let c=0;{let t=[];for(let l=0,a=e.length;l<a;l++){let a=e[l],{type:s,values:n}=a;if(n.length){let a=n.slice(-2),r=e[l-1]&&"L"===e[l-1].type,p=e[l+1]&&"L"===e[l+1].type,u=e[l-1]?e[l-1].type.toUpperCase():null,i=e[l+1]?e[l+1].type.toUpperCase():null,y={type:s,x:a[0],y:a[1],dist:0,index:0,prevL:r,nextL:p,prevCom:u,nextCom:i};y.index=l,t.push(y)}}if(p.length){let e=t.filter(e=>"L"!==e.type&&"M"!==e.type&&e.prevCom&&"L"===e.prevCom||"M"===e.prevCom&&"L"===i).sort((e,t)=>e.y-t.y||e.x-t.x)[0];c=e?e.index-1:0}else t=t.sort((e,t)=>+e.y.toFixed(1)-+t.y.toFixed(1)||e.x-t.x),c=t[0].index;e=c?pe(e,c):e}return n={x:+e[0].values[0].toFixed(8),y:+e[0].values[1].toFixed(7)},s=e.length,u=e[s-2],i=u.type,y=u.values.slice(-2).map(e=>+e.toFixed(8)),o="L"===i&&y[0]===n.x&&y[1]===n.y,t&&o&&e.splice(s-2,1),a.push(...e),a}function pe(e,t){let l=0,a="z"===e[e.length-1].type.toLowerCase();if(!a||t<1||e.length<3)return e;let s=a?1:0;!function(e){let t=e.length,l="z"===e[t-1].type.toLowerCase(),a=e[0],[s,n]=[a.values[0],a.values[1]].map(e=>+e.toFixed(8)),r=l?e[t-2]:e[t-1],p=r.values.length,[u,i]=[r.values[p-2],r.values[p-1]].map(e=>+e.toFixed(8));!l||s==u&&n==i||(e.pop(),e.push({type:"L",values:[s,n]},{type:"Z",values:[]}))}(e),l=t+1<e.length-1?t+1:e.length-1-s;let n,r,p=e.slice(l),u=e.slice(0,l);return u.shift(),n=u[u.length-1].values||[],r=[n[n.length-2],n[n.length-1]],s&&(p.pop(),u.push({type:"Z",values:[]})),e=[{type:"M",values:r},...p,...u]}function ue(e,{arcToCubic:t=!1,quadraticToCubic:l=!1,toClockwise:a=!1,returnD:s=!1}={}){const n=(e,t)=>{let l=[],a=[];if("A"!==e){for(let e=0;e<t.length;e+=2)l.push([t[e],t[e+1]]);a=l.pop(),l.reverse()}else{let e=0==t[4]?1:0;l=[t[0],t[1],t[2],t[3],e],a=[t[5],t[6]]}return{controlPoints:l,endPoints:a}};let r=[],p="z"===e[e.length-1].type.toLowerCase();p&&(e=(e=>{let t="z"===e[e.length-1].type.toLowerCase(),l=e[0],[a,s]=[l.values[0],l.values[1]],n=t?e[e.length-2]:e[e.length-1],[r,p]=[n.values[n.values.length-2],n.values[n.values.length-1]];return!t||a==r&&s==p||(e.pop(),e.push({type:"L",values:[a,s]},{type:"Z",values:[]})),e})(e),e.pop());let u=e[e.length-1].values,i=u.length,y=p?e[0]:{type:"M",values:[u[i-2],u[i-1]]};r.push(y),e.reverse();for(let t=1;t<e.length;t++){let l=e[t],a=l.type,s=l.values,p=e[t-1],u=p.type,i=[];i=[n(u,p.values).controlPoints,n(a,s).endPoints].flat(),r.push({type:u,values:i.flat()})}return p&&r.push({type:"z",values:[]}),r}function ie(e){let t=(new XMLSerializer).serializeToString(e);return t=t.replace(/\t/g,"").replace(/[\n\r|]/g,"\n").replace(/\n\s*\n/g,"\n").replace(/ +/g," "),t}function ye(e="",{getObject:t=!1,toAbsolute:l=!0,toRelative:a=!0,toShorthands:s=!0,quadraticToCubic:n=!0,arcToCubic:r=!1,cubicToArc:p=!1,simplifyBezier:u=!0,optimizeOrder:i=!0,removeColinear:y=!0,flatBezierToLinetos:o=!0,revertToQuadratics:h=!0,keepExtremes:c=!0,keepCorners:x=!0,extrapolateDominant:f=!0,keepInflections:g=!1,addExtremes:v=!1,decimals:d=3,autoAccuracy:m=!0,minifyD:M=0,tolerance:b=1,reverse:C=!1,mergePaths:A=!1,removeHidden:w=!0,removeUnused:L=!0}={}){b=Math.max(.1,b);let P=function(e){let t="string";if(Array.isArray(e))return"array";if("string"==typeof e){let l=(e=e.trim()).includes("<svg")&&e.includes("</svg"),a=e.startsWith("M")||e.startsWith("m"),s=!isNaN(e.substring(0,1))&&!isNaN(e.substring(e.length-1,e.length));if(l)t="svgMarkup";else if(a)t="pathDataString";else if(s)t="polyString";else{let l=/^(file:|https?:\/\/|\/|\.\/|\.\.\/)/.test(e),a=e.startsWith("data:image");t=l||a?"url":"string"}return t}return t=typeof e,(e.constructor.name||t).toLowerCase()}(e),S="",I=0,k=0,E=0,Q={},$="",q="svgMarkup"===P?1:0,D=[];if(I=new Blob([e]).size,q){S=function(e,{returnDom:t=!1,removeHidden:l=!0,removeUnused:a=!0}={}){e=(e=e.replace(/<\?xml[\s\S]*?\?>/gi,"").replace(/<!DOCTYPE[\s\S]*?>/gi,"").replace(/<!--[\s\S]*?-->/g,"").trim()).replaceAll("xlink:href=","href=");let s=(new DOMParser).parseFromString(e,"text/html").querySelector("svg");!function(e,t=["viewBox","xmlns","width","height","id","class"]){[...e.attributes].map(e=>e.name).forEach(l=>{t.includes(l)||e.removeAttribute(l)})}(s,["viewBox","xmlns","width","height","id","class"]);let n=["metadata","script"];if(s.querySelectorAll("*").forEach(e=>{let t=e.nodeName,a=e.getAttribute("style")||"",s=!!a&&a.trim().includes("display:none"),r=e.getAttribute("display")&&"none"===e.getAttribute("display")||s;t.includes(":")||n.includes(t)||l&&r?e.remove():function(e){[...e.attributes].map(e=>e.name).forEach(t=>{t.includes(":")&&e.removeAttribute(t)})}(e)}),t)return s;let r=ie(s);return console.log(r),r}(e,{returnDom:!0,removeHidden:w,removeUnused:L}),S.querySelectorAll("path").forEach(e=>{D.push({d:e.getAttribute("d"),el:e})})}else"pathDataString"===P?$=e:"polyString"===P&&($="M"+e),D.push({d:$,el:null});let O={toRelative:a,toShorthands:s,decimals:d},N=[];if(D.forEach(e=>{let{d:t,el:a}=e,s=_(t,{quadraticToCubic:n,toAbsolute:l,arcToCubic:r}),w=JSON.parse(JSON.stringify(s)),L=s.length,P=z(w),S=[];for(let e=0,t=P.length;e<t;e++){let t=P[e];C&&(t=ue(t)),y&&(t=se(t)),v&&(t=T(t,0,1)),i&&(t=ne(t)),y&&(t=le(t,b,o));let l=Z(t),{pathData:a,bb:s,dimA:n}=l;if(a=u?oe(a,{simplifyBezier:u,keepInflections:g,keepExtremes:c,keepCorners:x,extrapolateDominant:f,revertToQuadratics:h,tolerance:b,reverse:C}):a,p){let e=3;a.forEach((t,l)=>{let{type:s,values:n,p0:r,cp1:p=null,cp2:u=null,p:i=null}=t;if("C"===s){let t=Y(r,p,u,i,e);t.isArc&&(a[l]=t.com)}}),a=G(a)}h&&a.forEach((e,t)=>{let{type:l,values:s,p0:n,cp1:r=null,cp2:p=null,p:u=null}=e;if("C"===l){let l=H(n,r,p,u);"Q"===l.type&&(l.extreme=e.extreme,l.corner=e.corner,l.dimA=e.dimA,a[t]=l)}}),i&&(a=re(a)),S.push(a)}if(w=S.flat(),a&&A)N.push(...w);else{m&&(d=function(e){let t={x:e[0].values[0],y:e[0].values[1]},l=t,a=t;e[0].decimals=0;let s=new Set;for(let n=0,r=e.length;n<r;n++){let r=e[n],{type:p,values:u}=r,i=u.length?u.slice(-2):[t.x,t.y];a={x:i[0],y:i[1]};let y=r.dimA?+r.dimA.toFixed(8):"M"!==p?+F(l,a).toFixed(8):0;y&&s.add(y),"M"===p&&(t=a),l=a}let n=Array.from(s).sort(),r=Math.ceil(n.length/8);n=n.slice(0,r);let p=n.reduce((e,t)=>e+t,0)/r,u=p>50?0:Math.floor(50/p).toString().length;return Math.min(Math.max(0,u),8)}(w)),w=U(w,O),w=ae(w);let t=w.length,l=j(w,M);k=new Blob([l]).size,E=+(100/I*k).toFixed(2),e.d=l,e.report={original:L,new:t,saved:L-t,compression:E,decimals:d},a&&a.setAttribute("d",l)}}),q){if(N.length){let e=U(N,O);e=ae(e);let t=j(e,M);D[0].el.setAttribute("d",t);for(let e=1;e<D.length;e++){let t=D[e].el;t&&t.remove()}!function(e){e.querySelectorAll("g, defs").forEach(e=>{e.children.length||e.remove()})}(S)}S=ie(S),k=new Blob([S]).size,E=+(100/I*k).toFixed(2),I=+(I/1024).toFixed(3),k=+(k/1024).toFixed(3),Q={svgSize:I,svgSizeOpt:k,compression:E}}else({d:$,report:Q}=D[0]);return t?{svg:S,d:$,report:Q,inputType:P,mode:q}:$||S}function oe(e,{keepExtremes:t=!0,keepInflections:l=!0,keepCorners:a=!0,extrapolateDominant:s=!0,tolerance:n=1,reverse:r=!1}={}){let p=[e[0]];for(let r=2,u=e.length;u&&r<=u;r++){let i=e[r-1],y=r<u?e[r]:null,o=y?.type||null,h=i?.directionChange||null,c=y?.directionChange||null,{type:x,values:f,p0:g,p:v,cp1:d=null,cp2:m=null,extreme:M=!1,corner:b=!1,dimA:C=0}=i;if("C"===x&&"C"===o)if(l&&c||a&&b||!h&&t&&M)p.push(i);else{let o=B(i,y,s,n),h=0;if(1===o.length){i=o[0];let y=1;h+=i.error;for(let p=r+1;h<n&&p<u;p++){let r=e[p];if("C"!==r.type||l&&r.directionChange||a&&i.corner||t&&i.extreme)break;let u=B(i,r,s,n);1===u.length&&(h+=.5*u[0].error,y++),i=u[0]}p.push(i),r<u&&(r+=y)}else p.push(i)}else p.push(i)}return r&&(p=ue(p)),p}te[77]=2,te[109]=2,te[65]=7,te[97]=7,te[67]=6,te[99]=6,te[76]=2,te[108]=2,te[81]=4,te[113]=4,te[83]=4,te[115]=4,te[84]=2,te[116]=2,te[72]=1,te[104]=1,te[86]=1,te[118]=1,te[90]=0,te[122]=0;const{abs:he,acos:ce,asin:xe,atan:fe,atan2:ge,ceil:ve,cos:de,exp:me,floor:Me,log:be,hypot:Ce,max:Ae,min:we,pow:Le,random:Pe,round:Se,sin:Ie,sqrt:ke,tan:Fe,PI:ze}=Math;"undefined"!=typeof window&&(window.svgPathSimplify=ye),exports.PI=ze,exports.abs=he,exports.acos=ce,exports.asin=xe,exports.atan=fe,exports.atan2=ge,exports.ceil=ve,exports.cos=de,exports.exp=me,exports.floor=Me,exports.hypot=Ce,exports.log=be,exports.max=Ae,exports.min=we,exports.pow=Le,exports.random=Pe,exports.round=Se,exports.sin=Ie,exports.sqrt=ke,exports.svgPathSimplify=ye,exports.tan=Fe;
1
+ "use strict";const{abs:e,acos:t,asin:l,atan:a,atan2:s,ceil:n,cos:r,exp:p,floor:i,log:u,max:y,min:o,pow:h,random:c,round:x,sin:f,sqrt:g,tan:v,PI:d}=Math;function m(e,t,l=!1){let a=s(t.y-e.y,t.x-e.x);return l&&a<0&&(a+=2*Math.PI),a}function M(e=null,t=null,l=null,a=null,s=!0,n=!1){let r,p,i,u,y,o={};if(!(e&&t&&l&&a))return n&&console.warn("points missing"),!1;try{if(r=(a.y-l.y)*(t.x-e.x)-(a.x-l.x)*(t.y-e.y),0==r)return!1}catch{return n&&console.warn("!catch",e,t,"p3:",l,"p4:",a),!1}p=e.y-l.y,i=e.x-l.x,u=(a.x-l.x)*p-(a.y-l.y)*i,y=(t.x-e.x)*p-(t.y-e.y)*i,p=u/r,i=y/r,o={x:e.x+p*(t.x-e.x),y:e.y+p*(t.y-e.y)};let h=!1;return p>0&&p<1&&i>0&&i<1&&(h=!0),!(s&&!h)&&o}function b(e,t){return g((t.x-e.x)*(t.x-e.x)+(t.y-e.y)*(t.y-e.y))}function A(e,t){return(t.x-e.x)**2+(t.y-e.y)**2}function C(e,t,l,a=!1){let s={x:(t.x-e.x)*l+e.x,y:(t.y-e.y)*l+e.y};return a&&(s.angle=m(e,t),s.angle<0&&(s.angle+=2*d)),s}function w(e,t=.5,l=!1,a=!1){let s;return s=e.length>2?((e,t,l=!1)=>{let s=4===e.length,n=e[0],r=e[1],p=s?e[2]:e[1],i=e[e.length-1],u={x:0,y:0};if(l||a){let e,l,y,o,h,c=n.x===r.x&&n.y===r.y,x=i.x===p.x&&i.y===p.y;0!==t||c?1!==t||x?(c&&(t+=1e-7),x&&(t-=1e-7),e=C(n,r,t),s?(l=C(r,p,t),y=C(p,i,t),o=C(e,l,t),h=C(l,y,t),u=C(o,h,t),u.angle=m(o,h),a&&(u.cpts=[l,y,o,h])):(l=C(n,r,t),y=C(r,i,t),u=C(l,y,t),u.angle=m(l,y),a&&(u.cpts=[l,y]))):(u.x=i.x,u.y=i.y,u.angle=m(p,i)):(u.x=n.x,u.y=n.y,u.angle=m(n,r))}else{let e=1-t;u=s?{x:e**3*n.x+3*e**2*t*r.x+3*e*t**2*p.x+t**3*i.x,y:e**3*n.y+3*e**2*t*r.y+3*e*t**2*p.y+t**3*i.y}:{x:e*e*n.x+2*e*t*r.x+t**2*i.x,y:e*e*n.y+2*e*t*r.y+t**2*i.y}}return u})(e,t,l):C(e[0],e[1],t,l),l&&s.angle<0&&(s.angle+=2*d),s}function L(t,l,a,n,p,i,u,y,o){const h=(e,t,l,a)=>s(a-t,l-e);let c={cx:0,cy:0,rx:a=e(a),ry:n=e(n),startAngle:0,endAngle:0,deltaAngle:0,clockwise:u,xAxisRotation:p,largeArc:i,sweep:u};if(0==a||0==n)throw Error("rx and ry can not be 0");if(a===n){let e=Math.abs(y-t),a=Math.abs(o-l),s=e,n=Math.min(t,y),r=Math.min(l,o),p=.5*Math.PI;if(0===e&&a||0===a&&e)return s=0===e&&a?a/2:e/2,c.rx=s,c.ry=s,0===e&&a?(c.cx=t,c.cy=r+a/2,c.startAngle=l>o?p:-p,c.endAngle=l>o?-p:p,c.deltaAngle=u?Math.PI:-Math.PI):0===a&&e&&(c.cx=n+e/2,c.cy=l,c.startAngle=t>y?Math.PI:0,c.endAngle=t>y?-Math.PI:Math.PI,c.deltaAngle=u?Math.PI:-Math.PI),c}let x,v,m=a===n?0:p*d/180,M=m?f(m):0,b=m?r(m):1,A=(t-y)/2,C=(l-o)/2,w=(t+y)/2,L=(l+o)/2,P=m?b*A+M*C:A,k=m?b*C-M*A:C,S=P*P/(a*a)+k*k/(n*n);S>1&&(a*=g(S),n*=g(S),c.rx=a,c.ry=n);let $=a*n,F=a*k,I=n*P,E=F**2+I**2;if(!E)throw Error("start point can not be same as end point");let z=g(e(($*$-E)/E));i==u&&(z=-z);let Q=z*F/n,T=-z*I/a;x=m?b*Q-M*T+w:w+Q,v=m?M*Q+b*T+L:L+T,c.cy=v,c.cx=x;let q=h(x,v,t,l),D=h(x,v,y,o);!u&&D>q&&(D-=2*Math.PI),u&&q>D&&(D=D<=0?D+2*Math.PI:D);let B=D-q;return c.startAngle=q,c.endAngle=D,c.deltaAngle=B,c}function P(e,t,l,s,n,p=0,i=!0,u=!1){if(n=u?n*d/180:n,p=u?p*d/180:p,p=l!==s&&p!==2*d?p:0,i&&l!==s){let e=a(v(n=p?n-p:n)*(l/s));n=r(n)<0?e+d:e}let y=e+l*r(n),o=t+s*f(n),h={x:y,y:o};return p&&(h.x=e+(y-e)*r(p)-(o-t)*f(p),h.y=t+(y-e)*f(p)+(o-t)*r(p)),h}function k(e,t=[],l=.05){let a=3===t.length,s=t[0]||null,n=a?t[1]:null,r=a?t[2]:t[1],p=.5*Math.PI,i=!1,u=!1,y=s?m(r,s,!0):null;if(i=Math.abs(y%p)<l||Math.abs(y%p-p)<l,a){let e=n?m(n,r,!0):0;u=Math.abs(e%p)<=l||Math.abs(e%p-p)<=l}return i||u}function S(e){return 4===e.length?function(e,t,l,a){let[s,n,r,p,i,u,y,o]=[e.x,e.y,t.x,t.y,l.x,l.y,a.x,a.y],h=Math.min(e.y,a.y),c=Math.min(e.x,a.x),x=Math.max(e.x,a.x),f=Math.max(e.y,a.y);if(t.y>=h&&t.y<=f&&l.y>=h&&l.y<=f&&t.x>=c&&t.x<=x&&l.x>=c&&l.x<=x)return[];let g,v,d,m,M,b,A,C,w=[];for(let e=0;e<2;++e)if(0==e?(v=6*s-12*r+6*i,g=-3*s+9*r-9*i+3*y,d=3*r-3*s):(v=6*n-12*p+6*u,g=-3*n+9*p-9*u+3*o,d=3*p-3*n),Math.abs(g)<1e-12){if(Math.abs(v)<1e-12)continue;m=-d/v,0<m&&m<1&&w.push(m)}else A=v*v-4*d*g,A<0?Math.abs(A)<1e-12&&(m=-v/(2*g),0<m&&m<1&&w.push(m)):(C=Math.sqrt(A),M=(-v+C)/(2*g),0<M&&M<1&&w.push(M),b=(-v-C)/(2*g),0<b&&b<1&&w.push(b));let L=w.length;for(;L--;)m=w[L];return w}(e[0],e[1],e[2],e[3]):function(e,t,l){let a,s,n,r=Math.min(e.y,l.y),p=Math.min(e.x,l.x),i=Math.max(e.x,l.x),u=Math.max(e.y,l.y);if(t.y>=r&&t.y<=u&&t.x>=p&&t.x<=i)return[];let[y,o,h,c,x,f]=[e.x,e.y,t.x,t.y,l.x,l.y],g=[];for(let e=0;e<2;++e)a=0==e?y-2*h+x:o-2*c+f,s=0==e?-2*y+2*h:-2*o+2*c,Math.abs(a)>1e-12&&(n=-s/(2*a),n>0&&n<1&&g.push(n));return g}(e[0],e[1],e[2])}function $(e,t){const l=(e,t,l,a,s,n)=>{var r=Math.cos(n),p=Math.sin(n),i=a*Math.cos(e),u=s*Math.sin(e);return{x:t+r*i-p*u,y:l+p*i+r*u}};let a,s,n,r,p,i=L(e.x,e.y,t[0],t[1],t[2],t[3],t[4],t[5],t[6]),{rx:u,ry:y,cx:o,cy:h,endAngle:c,deltaAngle:x}=i,f=t[2],g={x:t[5],y:t[6]},v=[g],d=f*Math.PI/180,m=Math.tan(d);p=Math.atan2(-y*m,u);let M=p,b=p+Math.PI,A=Math.atan2(y,u*m),C=A+Math.PI,w=[e.x,g.x],P=[e.y,g.y],k=Math.min(...w),S=Math.max(...w),$=Math.min(...P),F=Math.max(...P),I=l(c-.001*x,o,h,u,y,d),E=l(c-.999*x,o,h,u,y,d);return(I.x>S||E.x>S)&&(a=l(M,o,h,u,y,d),v.push(a)),(I.x<k||E.x<k)&&(s=l(b,o,h,u,y,d),v.push(s)),(I.y<$||E.y<$)&&(r=l(C,o,h,u,y,d),v.push(r)),(I.y>F||E.y>F)&&(n=l(A,o,h,u,y,d),v.push(n)),v}function F(e,t){return(Math.abs(t.x-e.x)+Math.abs(t.y-e.y))/2}function I(e){let t=[];try{e.map((e,t)=>"m"===e.type.toLowerCase()?t:-1).filter(e=>-1!==e)}catch{console.log("catch",e)}let l=e.map((e,t)=>"m"===e.type.toLowerCase()?t:-1).filter(e=>-1!==e);return 1===l.length?[e]:(l.forEach((a,s)=>{t.push(e.slice(a,l[s+1]))}),t)}function E(e,t){let l,a,s,n,r,p,i=[],u=[],y=e[0],o=e[1],h=e[e.length-2],c=e[e.length-1];return 4===e.length?(l=w([y,o],t),a=w([o,h],t),s=w([h,c],t),n=w([l,a],t),r=w([a,s],t),p=w([n,r],t),i.push({x:y.x,y:y.y},{x:l.x,y:l.y},{x:n.x,y:n.y},{x:p.x,y:p.y}),u.push({x:p.x,y:p.y},{x:r.x,y:r.y},{x:s.x,y:s.y},{x:c.x,y:c.y})):3===e.length?(a=w([y,o],t),s=w([o,c],t),p=w([a,s],t),i.push({x:y.x,y:y.y},{x:a.x,y:a.y},{x:p.x,y:p.y}),u.push({x:p.x,y:p.y},{x:s.x,y:s.y},{x:c.x,y:c.y})):2===e.length&&(a=w([y,c],t),i.push({x:y.x,y:y.y},{x:a.x,y:a.y}),u.push({x:a.x,y:a.y},{x:c.x,y:c.y})),[i,u]}function z(e,t,l=0,a=1){let s=[],n=6===t.length?"C":"Q",r={x:t[0],y:t[1]},p="C"===n?{x:t[2],y:t[3]}:r,i={x:t[4],y:t[5]},u=Math.max(i.x,e.x),y=Math.min(i.x,e.x),o=Math.max(i.y,e.y),h=Math.min(i.y,e.y),c=0;if(r.x<y||r.x>u||r.y<h||r.y>o||p.x<y||p.x>u||p.y<h||p.y>o){let u=S("C"===n?[e,r,p,i]:[e,r,i]).sort();if(u=u.filter(e=>e>l&&e<a),u.length){let l=function(e,t,l,a=!0){let s=[];if(!l.length)return!1;let n,r,p,i=t.length,u={x:t[i-2],y:t[i-1]};2===t.length?p=[e,u]:4===t.length?(n={x:t[0],y:t[1]},p=[e,n,u]):6===t.length&&(n={x:t[0],y:t[1]},r={x:t[2],y:t[3]},p=[e,n,r,u]);if(l.length)if(1===l.length){let e=E(p,l[0]),t=e[0],a=e[1];s.push(t,a)}else{let e=l[0],t=E(p,e),a=t[0];s.push(a),p=t[1];for(let t=1;t<l.length;t++){e=l[t-1];let a=E(p,(l[t]-e)/(1-e));s.push(a[0]),t===l.length-1&&s.push(a[a.length-1]),p=a[1]}}if(a){let e,t,l=[];return s.forEach(a=>{e={type:"",values:[]},a.shift(),t=a.map(e=>Object.values(e)).flat(),e.values=t,3===a.length?e.type="C":2===a.length?e.type="Q":1===a.length&&(e.type="L"),l.push(e)}),l}return s}(e,t,u);s.push(...l),c+=l.length}else s.push({type:n,values:t})}else s.push({type:n,values:t});return{pathData:s,count:c}}function Q(e,t=0,l=1){let a=[e[0]],s={x:e[0].values[0],y:e[0].values[1]},n={x:e[0].values[0],y:e[0].values[1]},r=e.length;for(let p=1;r&&p<r;p++){let r=e[p],{type:i,values:u}=r,y=u.slice(-2);if(y[0],y[1],"C"!==i&&"Q"!==i)a.push(r);else if("C"===i||"Q"===i){let e=z(s,u,t,l).pathData;a.push(...e)}s={x:y[0],y:y[1]},"z"===i.toLowerCase()?s=n:"M"===i&&(n={x:y[0],y:y[1]})}return a}function T(e,t=-1){let l=e.map(e=>e.x),a=e.map(e=>e.y),s=Math.min(...l),n=Math.max(...l),r=Math.min(...a),p=Math.max(...a),i={x:s,left:s,right:n,y:r,top:r,bottom:p,width:n-s,height:p-r};if(t>-1)for(let e in i)i[e]=+i[e].toFixed(t);return i}function q(e){let t=[];return e.forEach(e=>{let l=function(e){let t=function(e){let t=[];for(let l=0;l<e.length;l++){let a=e[l],s=l>0?e[l-1]:e[l],{type:n,values:r}=a,p={x:s.values[s.values.length-2],y:s.values[s.values.length-1]},i=r.length?{x:r[r.length-2],y:r[r.length-1]}:"",u=r.length?{x:r[0],y:r[1]}:"";switch(n){case"A":if("function"!=typeof arcToBezier){let e=b(p,i)/2,l=C(p,i,.5),a=P(l.x,l.y,e,e,0),s=P(l.x,l.y,e,e,Math.PI);t.push(a,s,i);break}arcToBezier(p,r).forEach(e=>{let l=e.values,a={x:l[0],y:l[1]},s={x:l[2],y:l[3]},n={x:l[4],y:l[5]};t.push(a,s,n)});break;case"C":let e={x:r[2],y:r[3]};t.push(u,e);break;case"Q":t.push(u)}"z"!==n.toLowerCase()&&t.push(i)}return t}(e),l=T(t);return l}(e);t.push(l)}),t}function D(e,t){let[l,a,s,n,r,p]=[e.x,e.y,e.width,e.height,e.x+e.width,e.y+e.height],[i,u,y,o,h,c]=[t.x,t.y,t.width,t.height,t.x+t.width,t.y+t.height],x=!1;return s*n!=y*o&&s*n>y*o&&l<i&&r>h&&a<u&&p>c&&(x=!0),x}function B(e,t=9){let l=0,a=[],s=I(e),n=s.length>1,r=[];if(n){let e=q(s);e.forEach(function(t,l){for(let l=0;l<e.length;l++){let a=e[l];if(t!=a){D(t,a)&&r.push(l)}}})}return s.forEach((e,t)=>{a=[];let s=0,n=0,p=1,i=[];e.forEach(function(t,l){let[n,r]=[t.type,t.values],p=r.length;if(r.length){let u=(l>0?e[l-1]:e[0]).values,y=u.length,o={x:u[y-2],y:u[y-1]},h={x:r[p-2],y:r[p-1]};if("C"===n||"Q"===n){let e={x:r[0],y:r[1]};i="C"===n?[o,e,{x:r[2],y:r[3]},h]:[o,e,h];let t=Math.abs(function(e,t=!1){let l,[a,s,n,r]=[e[0],e[1],e[2],e[e.length-1]];if(e.length<3)return 0;3===e.length&&(s={x:1*e[0].x/3+2*e[1].x/3,y:1*e[0].y/3+2*e[1].y/3},n={x:1*e[2].x/3+2*e[1].x/3,y:1*e[2].y/3+2*e[1].y/3});return l=3*(a.x*(-2*s.y-n.y+3*r.y)+s.x*(2*a.y-n.y-r.y)+n.x*(a.y+s.y-2*r.y)+r.x*(-3*a.y+s.y+2*n.y))/20,t?Math.abs(l):l}(i));s+=t,a.push(o,h)}else if("A"===n){let e=L(o.x,o.y,t.values[0],t.values[1],t.values[2],t.values[3],t.values[4],h.x,h.y),{cx:l,cy:n,rx:r,ry:p,startAngle:i,endAngle:u,deltaAngle:y}=e,c=Math.abs(function(e,t,l,a){const s=Math.PI*e*t;let n=(a-l+2*Math.PI)%(2*Math.PI);if(e===t)return s*(n/(2*Math.PI));const r=l=>Math.atan2(e*Math.sin(l),t*Math.cos(l));return l=r(l),a=r(a),n=(a-l+2*Math.PI)%(2*Math.PI),s*(n/(2*Math.PI))}(r,p,i,u));c-=Math.abs(j([o,{x:l,y:n},h])),a.push(o,h),s+=c}else a.push(o,h)}});let u=j(a);-1!==r.indexOf(t)&&(p=-1),n=u<0&&s<0?(Math.abs(s)-Math.abs(u))*p:(Math.abs(s)+Math.abs(u))*p,l+=n}),l}function j(e,t=!1){let l=0;for(let t=0,a=e.length;a&&t<a;t++){l+=e[t].x*e[t===e.length-1?0:t+1].y*.5-e[t===e.length-1?0:t+1].x*e[t].y*.5}return t&&(l=Math.abs(l)),l}function N(e,t=0){t=parseFloat(t);let l=e.length,a=t>1,s=!a&&!t,n="",r=a?"\n":s?"":" ",p=s?"":" ";n=`${e[0].type}${p}${e[0].values.join(" ")}${r}`;for(let t=1;t<l;t++){let l=e[t-1],a=e[t],{type:i,values:u}=a;if(!s||"A"!==i&&"a"!==i||(u=[u[0],u[1],u[2],`${u[3]}${u[4]}${u[5]}`,u[6]]),i=l.type===a.type&&"m"!==a.type.toLowerCase()&&s||"M"===l.type&&"L"===a.type&&s?" ":a.type,s){let e="",t=!1;for(let l=0,a=u.length;l<a;l++){let a=u[l],s=a.toString(),n=s.includes(".")&&Math.abs(a)<1;n&&t&&(s=s.replace(/^0\./,".")),!(l>0)||t&&n||(e+=" "),e+=s,t=n}n+=`${i}${p}${e}${r}`}else n+=`${i}${p}${u.join(" ")}${r}`}return s&&(n=n.replace(/ 0\./g," .").replace(/ -/g,"-").replace(/-0\./g,"-.").replace(/Z/g,"z")),n}function Z(e,t,l=0,a=1,s=!1){const n=(e,t,l,a,s)=>{let n=1-s;return{x:3*n*n*(t.x-e.x)+6*n*s*(l.x-t.x)+3*s*s*(a.x-l.x),y:3*n*n*(t.y-e.y)+6*n*s*(l.y-t.y)+3*s*s*(a.y-l.y)}};let r=[e,t],p=F(e.p0,e.p)>F(t.p0,t.p),i=JSON.parse(JSON.stringify(e)),u=JSON.parse(JSON.stringify(t)),y=M(i.p0,i.cp1,u.p,u.cp2,!1);if(!y)return r;if(p){let l={p0:{x:e.p.x,y:e.p.y},cp1:{x:e.cp2.x,y:e.cp2.y},cp2:{x:e.cp1.x,y:e.cp1.y},p:{x:e.p0.x,y:e.p0.y}};e={p0:{x:t.p.x,y:t.p.y},cp1:{x:t.cp2.x,y:t.cp2.y},cp2:{x:t.cp1.x,y:t.cp1.y},p:{x:t.p0.x,y:t.p0.y}},t=l}let o=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),h=(e,t)=>({x:e.x*t,y:e.y*t}),c=(e,t)=>e.x*t.x+e.y*t.y,x=t.p0,f=n(t.p0,t.cp1,t.cp2,t.p,0),g=c(o(e.p0,x),f)/c(f,f),v=w([t.p0,t.cp1,t.cp2,t.p],g),d=n(t.p0,t.cp1,t.cp2,t.p,g);g-=c(o(v,e.p0),d)/c(d,d);let m=w([t.p0,t.cp1,t.cp2,t.p],g),b=t.p,A=n(t.p0,t.cp1,t.cp2,t.p,g),L=n(t.p0,t.cp1,t.cp2,t.p,1),P=1-g,k=(S=m,$=h(A,P/3),{x:S.x+$.x,y:S.y+$.y});var S,$;let I=o(b,h(L,P/3)),E={p0:m,cp1:k,cp2:I,p:b};p&&(E={p0:b,cp1:I,cp2:k,p:m});let z=.5*(1-g),Q=w([E.p0,E.cp1,E.cp2,E.p],z,!1,!0),T=Q.cpts[2],q=M(Q,T,E.p0,y,!1),D=M(Q,T,E.p,y,!1),j=C(E.p0,q,1.333),Z=C(E.p,D,1.333);if(M(i.p0,j,u.p,Z,!0))return r;s&&function(e,t,l="red",a="1%",s="1",n="",r=!0,p="",i=""){Array.isArray(t)&&(t={x:t[0],y:t[1]});let u=`<circle class="${i}" opacity="${s}" id="${p}" cx="${t.x}" cy="${t.y}" r="${a}" fill="${l}">\n <title>${n}</title></circle>`;if(!r)return u;e.insertAdjacentHTML("beforeend",u)}(markers,Q,"purple"),E.cp1=j,E.cp2=Z;let O=F(i.p0,E.p0)+F(u.p,E.p);if(E.p0=i.p0,E.p=u.p,E.extreme=u.extreme,E.corner=u.corner,E.dimA=u.dimA,E.directionChange=u.directionChange,E.type="C",E.values=[E.cp1.x,E.cp1.y,E.cp2.x,E.cp2.y,E.p.x,E.p.y],O<l){let t=p?1+g:Math.abs(g);if(F(w([E.p0,E.cp1,E.cp2,E.p],t),e.p)>l*a)return r;let n=B([{type:"M",values:[i.p0.x,i.p0.y]},{type:"C",values:[i.cp1.x,i.cp1.y,i.cp2.x,i.cp2.y,i.p.x,i.p.y]},{type:"C",values:[u.cp1.x,u.cp1.y,u.cp2.x,u.cp2.y,u.p.x,u.p.y]}]),y=[{type:"M",values:[E.p0.x,E.p0.y]},{type:"C",values:[E.cp1.x,E.cp1.y,E.cp2.x,E.cp2.y,E.p.x,E.p.y]}],o=B(y),h=Math.abs(o/n-1);if(E.error=5*h*a,s){let e=N(y);!function(e,t="",l="green",a="1%",s=!0){let n=`<path d="${t}" fill="none" stroke="${l}" stroke-width="${a}" /> `;if(!s)return n;e.insertAdjacentHTML("beforeend",n)}(markers,e,"orange")}h<.05*a&&(r=[E])}return r}function O(e,t,l=!1,a=1){let s=[e,t],n=function(e,t){let l=b(e.cp2,e.p),a=b(e.cp2,t.cp1),s=Math.min(l)/a;return s}(e,t),r=F(e.p0,e.p),p=F(t.p0,t.p),i=.05*Math.min(r,p)*a,u=function(e,t,l=0,a=0){let{p0:s,cp1:n}=e,{p:r,cp2:p}=t,i={x:(n.x-(1-l)*s.x)/l,y:(n.y-(1-l)*s.y)/l},u={x:(p.x-a*r.x)/(1-a),y:(p.y-a*r.y)/(1-a)},y={p0:s,cp1:i,cp2:u,p:r};return y}(e,t,n,n),y=w([u.p0,u.cp1,u.cp2,u.p],n),o=F(e.p,y),h=0,c=0,x=!1,f=o;if(o<i){let l=.5*(1+n);if(h=F(w([t.p0,t.cp1,t.cp2,t.p],.5),w([u.p0,u.cp1,u.cp2,u.p],l)),f+=h,h<i){let t=.5*n;c=F(w([e.p0,e.cp1,e.cp2,e.p],.5),w([u.p0,u.cp1,u.cp2,u.p],t)),h+c<i&&(x=!0),f+=c}}if(l&&!x){let l=Z(e,t,i,a);1===l.length&&(x=!0,u=l[0],f=u.error)}return x&&(u.p0=e.p0,u.p=t.p,u.dimA=F(u.p0,u.p),u.type="C",u.extreme=t.extreme,u.directionChange=t.directionChange,u.corner=t.corner,u.values=[u.cp1.x,u.cp1.y,u.cp2.x,u.cp2.y,u.p.x,u.p.y],u.error=f/i,s=[u]),s}function H(e,t,l){let a=!1,s=2===t.length,n=t[0],r=s?t[1]:n;if(e.x===n.x&&e.y===n.y&&l.x===r.x&&l.y===r.y)return!0;let p=n.x-e.x,i=n.y-e.y,u=l.x-r.x,y=l.y-r.y;if(!Math.abs(p*y-i*u))return!0;let o=l.x-e.x,h=l.y-e.y;return!Math.abs(o*i-h*p)||(a=j([e,...t,l],!0)<A(e,l)/200,a)}function R(e=[]){let t,l=[],a=function(e){let t=[],l={x:e[0].values[0],y:e[0].values[1]};return e.forEach(e=>{let{type:a,values:s}=e;if(s.length){let e=s.length>1?{x:s[s.length-2],y:s[s.length-1]}:"V"===a?{x:l.x,y:s[0]}:{x:s[0],y:l.y};t.push(e),l=e}}),t}(e),s=T(a),{left:n,right:r,top:p,bottom:i,width:u,height:y}=s,o=e[0].values[0],h=e[0].values[1],c={x:e[0].values[0],y:e[0].values[1]},x={x:e[0].values[0],y:e[0].values[1]};e[0].idx=0,e[0].p0=c,e[0].p=c,e[0].lineto=!1,e[0].corner=!1,e[0].extreme=!1,e[0].directionChange=!1,e[0].closePath=!1,e[0].dimA=0;let f=[e[0]],g=0,v=e.length;for(let l=2;v&&l<=v;l++){let a=e[l-1],{type:s,values:u}=a,y=u.slice(-2),v=[x];a.idx=l-1,a.lineto=!1,a.corner=!1,a.extreme=!1,a.directionChange=!1,a.closePath=!1,a.dimA=0;let d,M,b,C,w,L,P=.05;t=y.length?{x:y[0],y:y[1]}:c,"M"===s?(c=t,x=t):"z"===s.toLowerCase()&&(t=c),a.p0=x,a.p=t;let S=F(x,t);a.dimA=S,"L"===s&&(a.lineto=!0),"Z"===s&&(a.closePath=!0,c.x!==o&&c.y!==h&&(a.lineto=!0)),"Q"!==s&&"C"!==s||(d={x:u[0],y:u[1]},M="C"===s?{x:u[2],y:u[3]}:null,a.cp1=d,M&&(a.cp2=M)),u.length>2&&("Q"!==s&&"C"!==s||v.push(d),"C"===s&&v.push(M),v.push(t)),"L"===s||t.x!==n&&t.y!==p&&t.x!==r&&t.y!==i||(a.extreme=!0);let $=e[l]?e[l]:null,I=$?$.values.slice(-2):null;w=$?$.type:null,!$||"Q"!==$.type&&"C"!==$.type||(C=$?{x:I[0],y:I[1]}:null,b={x:$.values[0],y:$.values[1]},"C"===$.type&&($.values[2],$.values[3])),L=j(v);let E=g<0&&L>0||g>0&&L<0;if(g=L,E&&(a.directionChange=!0),("Q"===s||"C"===s)&&("Q"===s&&"Q"===w||"C"===s&&"C"===w)){let e=v.slice(1);if(C&&Math.abs(C.x-x.x),C&&Math.abs(C.y-x.y),!!a.extreme||k(0,e,P))a.extreme=!0;else{let e=M?[M,t]:[d,t],l=[t,b],s=m(...e,!0),n=m(...l,!0),r=180*Math.abs(s-n)/Math.PI,p=A(...e),i=A(...l);r>10&&p&&i&&(a.corner=!0)}}f.push(a),x=t}return l={pathData:f,bb:s,dimA:(u+y)/2},l}function U(e,t=-1){let l=!("auto"!=t||!e[0].hasOwnProperty("decimals"));for(let a=0,s=e.length;a<s;a++){let s=e[a];(t>-1||l)&&(t=l?s.decimals:t,e[a].values=s.values.map(e=>e?+e.toFixed(t):e))}return e}function V(e={},t={},l={},a={}){let s=C(e,t,1.5),n=C(a,l,1.5),r=.01*F(e,a),p=F(s,n),i=null,u={type:"C",values:[t.x,t.y,l.x,l.y,a.x,a.y]};return p<r&&(i=M(e,t,a,l,!1),i&&(u.type="Q",u.values=[i.x,i.y,a.x,a.y],u.p0=e,u.cp1=i,u.p=a)),u}function J(e,{toShorthands:t=!0,toRelative:l=!0,decimals:a=3}={}){return t&&(e=function(e,t=-1,l=!0){let a;if(l){let t=e.map(e=>e.type).join("");a=/[astvqmhlc]/g.test(t)}e=l&&a?Y(e,t):e;let s={type:"M",values:e[0].values};e[0].decimals&&(s.decimals=e[0].decimals);let n,r=[s],p={x:e[0].values[0],y:e[0].values[1]},i=.01;for(let l=1,a=e.length;l<a;l++){let a=e[l],{type:u,values:y}=a,o=y.slice(-2),h=e[l-1],c=h.type;n={x:o[0],y:o[1]};let x,f,g,v,d={x:y[0],y:y[1]},m=Math.abs(n.x-p.x),M=Math.abs(n.y-p.y),b=(m+M)/2*i;switch(u){case"L":s=0===M||M<b&&m>b?{type:"H",values:[y[0]]}:0===m||M>b&&m<b?{type:"V",values:[y[1]]}:a;break;case"Q":if("Q"!==c){p={x:o[0],y:o[1]},r.push(a);continue}let e={x:h.values[0],y:h.values[1]};v={x:2*p.x-e.x,y:2*p.y-e.y},x=Math.abs(d.x-v.x),f=Math.abs(d.y-v.y),g=(x+f)/2,s=g<b?{type:"T",values:[n.x,n.y]}:a;break;case"C":let t={x:y[2],y:y[3]};if("C"!==c){r.push(a),p={x:o[0],y:o[1]};continue}let l={x:h.values[2],y:h.values[3]};v={x:2*p.x-l.x,y:2*p.y-l.y},x=Math.abs(d.x-v.x),f=Math.abs(d.y-v.y),g=(x+f)/2,s=g<b?{type:"S",values:[t.x,t.y,n.x,n.y]}:a;break;default:s={type:u,values:y}}(a.decimals||0===a.decimals)&&(s.decimals=a.decimals),t>-1&&(s.values=s.values.map(e=>+e.toFixed(t))),p={x:o[0],y:o[1]},r.push(s)}return r}(e)),e=U(e,a),l&&(e=function(e,t=-1){return X(e,!0,t)}(e)),a>-1&&(e=U(e,a)),e}function W(e,t){Array.isArray(e)&&(e={x:e[0],y:e[1]});let l={x:e.x+2/3*(t[0]-e.x),y:e.y+2/3*(t[1]-e.y)},a={x:t[2]+2/3*(t[0]-t[2]),y:t[3]+2/3*(t[1]-t[3])};return{type:"C",values:[l.x,l.y,a.x,a.y,t[2],t[3]]}}function X(e,t=!1,l=-1){l>=0&&(e[0].values=e[0].values.map(e=>+e.toFixed(l)));let a=e[0].values,s=a[0],n=a[1],r=s,p=n;for(let a=1,i=e.length;a<i;a++){let i=e[a],{type:u,values:y}=i,o=t?u.toLowerCase():u.toUpperCase();if(u!==o)switch(u=o,i.type=u,u){case"a":case"A":y[5]=t?y[5]-s:y[5]+s,y[6]=t?y[6]-n:y[6]+n;break;case"v":case"V":y[0]=t?y[0]-n:y[0]+n;break;case"h":case"H":y[0]=t?y[0]-s:y[0]+s;break;case"m":case"M":t?(y[0]-=s,y[1]-=n):(y[0]+=s,y[1]+=n),r=t?y[0]+s:y[0],p=t?y[1]+n:y[1];break;default:if(y.length)for(let e=0;e<y.length;e++)y[e]=t?y[e]-(e%2?n:s):y[e]+(e%2?n:s)}let h=y.length;switch(u){case"z":case"Z":s=r,n=p;break;case"h":case"H":s=t?s+y[0]:y[0];break;case"v":case"V":n=t?n+y[0]:y[0];break;case"m":case"M":r=y[h-2]+(t?s:0),p=y[h-1]+(t?n:0);default:s=y[h-2]+(t?s:0),n=y[h-1]+(t?n:0)}l>=0&&(i.values=i.values.map(e=>+e.toFixed(l)))}return e}function Y(e,t=-1){return X(e,!1,t)}function G(e,t,l=1){const a=2*Math.PI;let[s,n,r,p,i,u,y]=t;if(0===s||0===n)return[];let o=r?r*a/360:0,h=o?Math.sin(o):0,c=o?Math.cos(o):1,x=c*(e.x-u)/2+h*(e.y-y)/2,f=-h*(e.x-u)/2+c*(e.y-y)/2;if(0===x&&0===f)return[];s=Math.abs(s),n=Math.abs(n);let g=x*x/(s*s)+f*f/(n*n);if(g>1){let e=Math.sqrt(g);s*=e,n*=e}let v=s*s,d=s===n?v:n*n,m=x*x,M=f*f,b=v*d-v*M-d*m;b<=0?b=0:(b/=v*M+d*m,b=Math.sqrt(b)*(p===i?-1:1));let A=b?b*s/n*f:0,C=b?b*-n/s*x:0,w=c*A-h*C+(e.x+u)/2,L=h*A+c*C+(e.y+y)/2,P=(x-A)/s,k=(f-C)/n,S=(-x-A)/s,$=(-f-C)/n;const F=(e,t,l,a)=>{let s=+(e*l+t*a).toFixed(9);return 1===s||-1===s?1===s?0:Math.PI:(s=s>1?1:s<-1?-1:s,(e*a-t*l<0?-1:1)*Math.acos(s))};let I=F(1,0,P,k),E=F(P,k,S,$);0===i&&E>0?E-=2*Math.PI:1===i&&E<0&&(E+=2*Math.PI);let z=(+(Math.abs(E)/(a/4)).toFixed(0)||1)*l;E/=z;let Q=[];const T=1.5707963267948966,q=.551785;let D=E===T?q:E===-T?-q:4/3*Math.tan(E/4),B=E?Math.cos(E):1,j=E?Math.sin(E):0;const N=(e,t,l,a,s)=>{let n=e!=t?Math.cos(e):a,r=e!=t?Math.sin(e):s,p=Math.cos(e+t),i=Math.sin(e+t);return[{x:n-r*l,y:r+n*l},{x:p+i*l,y:i-p*l},{x:p,y:i}]};for(let e=0;e<z;e++){let e={type:"C",values:[]};N(I,E,D,B,j).forEach(t=>{let l=t.x*s,a=t.y*n;e.values.push(c*l-h*a+w,h*l+c*a+L)}),Q.push(e),I+=E}return Q}function K(e,t,l,a,s=7.5){let n={type:"C",values:[t.x,t.y,l.x,l.y,a.x,a.y]},r=0,p=!1,i=m(e,t,!0),u=m(a,l,!0),y=180*Math.abs(i-u)/Math.PI;if(Math.abs(y%180-90)<3){let i=M(e,t,a,l,!1);if(i){let u=b(e,i),y=b(a,i),o=+Math.max(u,y).toFixed(8),h=+Math.min(u,y).toFixed(8),c=h,x=o,f=j([e,t,l,a])<0?0:1,g=Math.abs(a.x-e.x)>Math.abs(a.y-e.y);100/c*Math.abs(c-x)<5&&(c=o,x=c),g&&(c=o,x=h);let v=B([{type:"M",values:[e.x,e.y]},{type:"C",values:[t.x,t.y,l.x,l.y,a.x,a.y]}]),d={type:"A",values:[c,x,0,0,f,a.x,a.y]};r=Math.PI*(c*x)/4,r-=Math.abs(j([e,a,i])),function(e,t){let l=Math.abs(e-t);return Math.abs(100-100/e*(e+l))}(v,r)<s&&(p=!0,n=d)}}return{com:n,isArc:p,area:r}}function _(e){let t,l=[[]],a=0,s=[[]],n={x:e[0].values[0],y:e[0].values[1]};for(let r=0,p=e.length;r<p;r++){let p=e[r],{type:i,values:u}=p;if("A"===i){let i=e[r-1].values.slice(-2);n={x:i[0],y:i[1]};let[y,o,h,c,x,f,g]=u,v=100/y*Math.abs(y-o)<5;t={x:u[5],y:u[6]},p.p0=n,p.p=t,p.circular=v;let d=e[r+1];if(!l[a].length&&d&&"A"===d.type&&(l[a].push(p),s[a].push(r)),d&&"A"===d.type){let[e,p,i,u,h,c,x]=d.values,f=y!=e?100/y*Math.abs(y-e):0,g=o!=p?100/o*Math.abs(o-p):0;t={x:d.values[5],y:d.values[6]},d.p0=n,d.p=t,f<5&&g<5?(l[a].push(d),s[a].push(r+1)):(l.push([]),s.push([]),a++)}else l.push([]),s.push([]),a++}}if(!s.length)return e;l=l.filter(e=>e.length),s=s.filter(e=>e.length);for(let t=l.length-1;t>=0;t--){const a=l[t],n=s[t][0],r=a.length;let p=0,i=0;a.forEach(({values:e})=>{const[t,l]=e;p+=t,i+=l}),p/=r,i/=r;let u=100/p*Math.abs(p-i)<5;u&&(p=(p+i)/2,i=p);let y=e[n-1].values.slice(-2);if(y[0],y[1],4===r){let[t,l,s,y,o,h,c]=a[1].values,[,,,,,x,f]=a[3].values;u&&(p=1,i=1);let g={type:"A",values:[p,i,s,y,o,h,c]},v={type:"A",values:[p,i,s,y,o,x,f]};e.splice(n,r,g,v)}else if(3===r){let[t,l,s,u,y,o,h]=a[0].values,[c,x,,,,f,g]=a[2].values;u=1;let v={type:"A",values:[p,i,s,u,y,f,g]};e.splice(n,r,v)}else if(2===r){let[t,l,s,y,o,h,c]=a[0].values,[x,f,,,,g,v]=a[1].values;u&&(p=1,i=1,s=0);let{p0:d,p:m}=a[0],[M,b]=[a[1].p0,a[1].p];if(d.x!==b.x||d.y!==b.y){let t={type:"A",values:[p,i,s,y,o,g,v]};e.splice(n,r,t)}}}return e}function ee(e=[],{toAbsolute:t=!0,toLonghands:l=!0,quadraticToCubic:a=!1,arcToCubic:s=!1,arcAccuracy:n=2}={},{hasRelatives:r=!0,hasShorthands:p=!0,hasQuadratics:i=!0,hasArcs:u=!0,testTypes:y=!1}={}){if(y){let t=Array.from(new Set(e.map(e=>e.type))).join("");r=/[lcqamts]/gi.test(t),i=/[qt]/gi.test(t),u=/[a]/gi.test(t),p=/[vhst]/gi.test(t),isPoly=/[mlz]/gi.test(t)}return(i&&a||u&&s)&&(l=!0,t=!0),r&&t&&(e=X(e,!1)),p&&l&&(e=function(e,t=-1,l=!0){let a=!1;if(l){let t=e.map(e=>e.type).join(""),l=/[hstv]/gi.test(t);if(a=/[astvqmhlc]/g.test(t),!l)return e}let s=[],n={type:"M",values:(e=l&&a?Y(e,t):e)[0].values};s.push(n);for(let l=1,a=e.length;l<a;l++){let a,r,p,i,u,y,o,h,c=e[l],{type:x,values:f}=c,g=f.length,v=n.values,d=v.length,[m,M]=[f[g-2],f[g-1]],[b,A]=[v[d-2],v[d-1]];switch(x){case"H":n={type:"L",values:[f[0],A]};break;case"V":n={type:"L",values:[b,f[0]]};break;case"T":[a,r]=[v[0],v[1]],[b,A]=[v[d-2],v[d-1]],p=b+(b-a),i=A+(A-r),n={type:"Q",values:[p,i,m,M]};break;case"S":[a,r]=[v[0],v[1]],[b,A]=[v[d-2],v[d-1]],[o,h]=d>2&&"A"!==n.type?[v[2],v[3]]:[b,A],p=2*b-o,i=2*A-h,u=f[0],y=f[1],n={type:"C",values:[p,i,u,y,m,M]};break;default:n={type:x,values:f}}t>-1&&(n.values=n.values.map(e=>+e.toFixed(t))),s.push(n)}return s}(e,-1,!1)),u&&s&&(e=function(e,{arcAccuracy:t=1}={}){let l=[e[0]];for(let a=1,s=e.length;a<s;a++){let s=e[a],n=e[a-1].values,r=n.length,p={x:n[r-2],y:n[r-1]};"A"===s.type?G(p,s.values,t).forEach(e=>{l.push(e)}):l.push(s)}return l}(e,n)),i&&a&&(e=function(e){let t=[e[0]];for(let l=1,a=e.length;l<a;l++){let a=e[l],s=e[l-1].values,n=s.length,r={x:s[n-2],y:s[n-1]};"Q"===a.type?t.push(W(r,a.values)):t.push(a)}return t}(e)),e}function te(e,{toAbsolute:t=!0,toLonghands:l=!0,quadraticToCubic:a=!1,arcToCubic:s=!1,arcAccuracy:n=4}={}){let r=function(e,t=!0){if(e=e.trim(),""===e)return{pathData:[],hasRelatives:!1,hasShorthands:!1,hasQuadratics:!1,hasArcs:!1};const l=new Set([5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279]),a=e=>32===e||44===e||10===e||13===e||8232===e||8233===e||9===e||11===e||12===e||160===e||e>=5760&&l.has(e);let s,n=0,r=e.length,p="",i=[],u=-1,y="",o=!1,h=0,c=0,x=0,f=!1,g=new Set([]),v=[];const d=()=>{f&&("M"===p?p="L":"m"===p&&(p="l"),i.push({type:p,values:[]}),u++,c=0,f=!1)},m=(e=!1)=>{(e?h>0:""!==y)&&(t&&-1===u&&(s="Pathdata must start with M command",v.push(s),p="M",i.push({type:p,values:[]}),x=2,c=0,u++),"A"===p||"a"===p?(y=M(),i[u].values.push(...y)):(t&&y[1]&&"."!==y[1]&&"0"===y[0]&&(s=`${u}. command: Leading zeros not valid: ${y}`,v.push(s)),i[u].values.push(+y)),c++,y="",h=0,f=c>=x)},M=()=>{let e=y.length,t=!1;return 3===c&&2===e||4===c&&e>1?(y=[+y[0],+y[1]],t=!0,c++):3===c&&e>=3&&(y=[+y[0],+y[1],+y.substring(2)],t=!0,c+=2),t?y:[+y]},b=()=>{if(u>0){let e=i[u].values.length;if(e&&e<x||e&&e>x||("z"===p||"Z"===p)&&e>0){s=`${u}. command of type "${p}": ${x-e} values too few - ${x} expected`,v[v.length-1]!==s&&v.push(s)}}};let A=!1,C=!1,w=!1;for(;n<r;){let l=e.charCodeAt(n),r=l>47&&l<58;if(r||(A=101===l||69===l,C=45===l||43===l,w=46===l),r||C||w||A){if(o||45!==l&&46!==l)d();else{let e=46===l;m(e),d(),e&&h++}y+=e[n],o=A,n++}else if((l<48||l>5759)&&a(l))m(),n++;else{if(l>64){if(!le.has(l)){s=`${u}. command "${e[n]}" is not a valid type`,v.push(s),n++;continue}""!==y&&(i[u].values.push(+y),c++,y=""),t&&b(),p=e[n],x=ae[l];let a="M"===p||"m"===p,r=u>0&&("z"===i[u].type||"Z"===i[u].type);g.add(p),r&&!a&&(i.push({type:"m",values:[0,0]}),u++),i.push({type:p,values:[]}),u++,h=0,c=0,f=!1,n++;continue}r||(s=`${u}. ${e[n]} is not a valid separarator or token`,v.push(s),y=""),n++}}m(),t&&b();if(t&&v.length){if(s="Invalid path data:\n"+v.join("\n"),"log"!==t)throw new Error(s);console.log(s)}i[0].type="M";let L=Array.from(g).join(""),P=/[lcqamts]/g.test(L),k=/[vhst]/gi.test(L),S=/[a]/gi.test(L),$=/[qt]/gi.test(L);return{pathData:i,hasRelatives:P,hasShorthands:k,hasQuadratics:$,hasArcs:S}}(e),{hasRelatives:p,hasShorthands:i,hasQuadratics:u,hasArcs:y}=r,o=r.pathData;return o=ee(o,{toAbsolute:t,toLonghands:l,quadraticToCubic:a,arcToCubic:s,arcAccuracy:n},{hasRelatives:p,hasShorthands:i,hasQuadratics:u,hasArcs:y}),o}const le=new Set([77,109,65,97,67,99,76,108,81,113,83,115,84,116,72,104,86,118,90,122]),ae=new Uint8Array(128);function se(e){if("path"===e.nodeName.toLowerCase())return e;let t=function(e,t=!1){let l,a,s,n,r,p,i,u,y,o,h,c,x,f,g,v,d=[],m=e.nodeName;const M=(e,t=9)=>{const l="svg"!==e.nodeName?e.closest("svg"):e,a=e=>{if(null===e)return 0;let l=96,a=e.match(/([a-z]+)/gi);a=a?a[0]:"";let s,n=parseFloat(e);if(!a)return n;switch(a){case"in":s=l;break;case"pt":s=1/72*96;break;case"cm":s=1/2.54*96;break;case"mm":s=1/2.54*96/10;break;case"em":case"rem":s=16;break;default:s=1}return+(n*s).toFixed(t)};let s=l.getAttribute("width");s=s?a(s):300;let n=l.getAttribute("height");n=s?a(n):150;let r=l.getAttribute("viewBox");r=r?r.replace(/,/g," ").split(" ").filter(Boolean).map(e=>+e):[];let p=r.length?r[2]:s,i=r.length?r[3]:n,u=p/100,y=i/100,o=Math.sqrt((Math.pow(u,2)+Math.pow(y,2))/2),h=["x","width","x1","x2","rx","cx","r"],c=["y","height","y1","y2","ry","cy"];e.getAttributeNames().forEach(t=>{let l=e.getAttribute(t),s=l;if(h.includes(t)||c.includes(t)){let n=h.includes(t)?u:y;n="r"===t&&p!=i?o:n;let r=l.match(/([a-z|%]+)/gi);r=r?r[0]:"",s=l.includes("%")?parseFloat(l)*n:a(l),e.setAttribute(t,+s)}})};M(e);const b=t=>(l={},t.forEach(t=>{l[t]=+e.getAttribute(t)}),l);switch(m){case"path":s=e.getAttribute("d"),d=te(s);break;case"rect":a=["x","y","width","height","rx","ry"],({x:n,y:r,width:p,height:i,rx:y,ry:o}=b(a)),y||o?(y>p/2&&(y=p/2),o>i/2&&(o=i/2),d=[{type:"M",values:[n+y,r]},{type:"L",values:[n+p-y,r]},{type:"A",values:[y,o,0,0,1,n+p,r+o]},{type:"L",values:[n+p,r+i-o]},{type:"A",values:[y,o,0,0,1,n+p-y,r+i]},{type:"L",values:[n+y,r+i]},{type:"A",values:[y,o,0,0,1,n,r+i-o]},{type:"L",values:[n,r+o]},{type:"A",values:[y,o,0,0,1,n+y,r]},{type:"Z",values:[]}]):d=[{type:"M",values:[n,r]},{type:"L",values:[n+p,r]},{type:"L",values:[n+p,r+i]},{type:"L",values:[n,r+i]},{type:"Z",values:[]}];break;case"circle":case"ellipse":a=["cx","cy","rx","ry","r"],({cx:h,cy:c,r:u,rx:y,ry:o}=b(a)),"circle"===m?(y=u,o=u):(y=y||u,o=o||u),d=[{type:"M",values:[h+y,c]},{type:"A",values:[y,o,0,1,1,h-y,c]},{type:"A",values:[y,o,0,1,1,h+y,c]}];break;case"line":a=["x1","y1","x2","y2"],({x1:x,y1:g,x2:f,y2:v}=b(a)),d=[{type:"M",values:[x,g]},{type:"L",values:[f,v]}];break;case"polygon":case"polyline":let t=e.getAttribute("points").replaceAll(","," ").split(" ").filter(Boolean);for(let e=0;e<t.length;e+=2)d.push({type:0===e?"M":"L",values:[+t[e],+t[e+1]]});"polygon"===m&&d.push({type:"Z",values:[]})}return t?function(e){return e.map(e=>`${e.type} ${e.values.join(" ")}`).join(" ")}(d):d}(e),l=t.map(e=>`${e.type} ${e.values} `).join(" "),a=[...e.attributes].map(e=>e.name),s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d",l);let n=["x","y","cx","cy","dx","dy","r","rx","ry","width","height","points"];return a.forEach(t=>{if(!n.includes(t)){let l=e.getAttribute(t);s.setAttribute(t,l)}}),s}function ne(e,t=1,l=!0){let a=[e[0]],s={x:e[0].values[0],y:e[0].values[1]},n=s,r=s;e[e.length-1].type.toLowerCase();for(let p=1,i=e.length;p<i;p++){let u=e[p-1],y=e[p],o=e[p+1]||e[i-1],h="z"===o.type.toLowerCase()?s:{x:o.values[o.values.length-2],y:o.values[o.values.length-1]},{type:c,values:x}=y,f=x.slice(-2);r="Z"!==c?{x:f[0],y:f[1]}:s;let g=j([n,r,h],!0);A(n,r),A(r,h);let v=g<A(n,h)/200*t,d=!1;if(l||"C"!==c||(v=!1),l&&("C"===c||"Q"===c)){d=H(n,"C"===c?[{x:x[0],y:x[1]},{x:x[2],y:x[3]}]:"Q"===c?[{x:x[0],y:x[1]}]:[],r),d&&p<i-1&&"C"!==u.type&&(c="L",y.type="L",y.values=f)}n=r,v&&p<i-1&&("L"===c||l&&d)||("M"===c?(s=r,n=s):"Z"===c&&(n=s),a.push(y))}return a}function re(e){let t={x:e[0].values[0],y:e[0].values[1]},l=t,a=[e[0]];for(let s=1,n=e.length;s<n;s++){let n=e[s],{type:r,values:p}=n,i=p.length;if(l={x:p[i-2],y:p[i-1]},"L"!==r||l.x!==t.x||l.y!==t.y){if("l"===r||"v"===r||"h"===r){if("l"===r?"00"===p.join(""):0===p[0])continue}a.push(n),t=l}}return a}function pe(e){let t=e.length;if(!("z"===e[t-1].type.toLowerCase()))return e;let l=0,a=[];for(let l=0;l<t;l++){let t=e[l],{type:s,values:n}=t,r=n.length;if(r){let e={type:s,x:n[r-2],y:n[r-1],index:0};e.index=l,a.push(e)}}return a=a.sort((e,t)=>+e.y.toFixed(3)-+t.y.toFixed(3)),l=a[0].index,l?ue(e,l):e}function ie(e,t=!0,l=!0){let a=[],s=e.length,n={x:+e[0].values[0].toFixed(8),y:+e[0].values[1].toFixed(8)},r="z"===e[s-1].type.toLowerCase(),p=e.filter(e=>"L"===e.type),i=e[s-2],u=i.type,y=i.values.slice(-2).map(e=>+e.toFixed(8)),o=y[0]===n.x&&y[1]===n.y,h="L"!==e[1].type&&(!o||"L"===u);if(h=!1,!r)return e;let c=0;{let t=[];for(let l=0,a=e.length;l<a;l++){let a=e[l],{type:s,values:n}=a;if(n.length){let a=n.slice(-2),r=e[l-1]&&"L"===e[l-1].type,p=e[l+1]&&"L"===e[l+1].type,i=e[l-1]?e[l-1].type.toUpperCase():null,u=e[l+1]?e[l+1].type.toUpperCase():null,y={type:s,x:a[0],y:a[1],dist:0,index:0,prevL:r,nextL:p,prevCom:i,nextCom:u};y.index=l,t.push(y)}}if(p.length){let e=t.filter(e=>"L"!==e.type&&"M"!==e.type&&e.prevCom&&"L"===e.prevCom||"M"===e.prevCom&&"L"===u).sort((e,t)=>e.y-t.y||e.x-t.x)[0];c=e?e.index-1:0}else t=t.sort((e,t)=>+e.y.toFixed(1)-+t.y.toFixed(1)||e.x-t.x),c=t[0].index;e=c?ue(e,c):e}return n={x:+e[0].values[0].toFixed(8),y:+e[0].values[1].toFixed(7)},s=e.length,i=e[s-2],u=i.type,y=i.values.slice(-2).map(e=>+e.toFixed(8)),o="L"===u&&y[0]===n.x&&y[1]===n.y,t&&o&&e.splice(s-2,1),a.push(...e),a}function ue(e,t){let l=0,a="z"===e[e.length-1].type.toLowerCase();if(!a||t<1||e.length<3)return e;let s=a?1:0;!function(e){let t=e.length,l="z"===e[t-1].type.toLowerCase(),a=e[0],[s,n]=[a.values[0],a.values[1]].map(e=>+e.toFixed(8)),r=l?e[t-2]:e[t-1],p=r.values.length,[i,u]=[r.values[p-2],r.values[p-1]].map(e=>+e.toFixed(8));!l||s==i&&n==u||(e.pop(),e.push({type:"L",values:[s,n]},{type:"Z",values:[]}))}(e),l=t+1<e.length-1?t+1:e.length-1-s;let n,r,p=e.slice(l),i=e.slice(0,l);return i.shift(),n=i[i.length-1].values||[],r=[n[n.length-2],n[n.length-1]],s&&(p.pop(),i.push({type:"Z",values:[]})),e=[{type:"M",values:r},...p,...i]}function ye(e,{arcToCubic:t=!1,quadraticToCubic:l=!1,toClockwise:a=!1,returnD:s=!1}={}){const n=(e,t)=>{let l=[],a=[];if("A"!==e){for(let e=0;e<t.length;e+=2)l.push([t[e],t[e+1]]);a=l.pop(),l.reverse()}else{let e=0==t[4]?1:0;l=[t[0],t[1],t[2],t[3],e],a=[t[5],t[6]]}return{controlPoints:l,endPoints:a}};let r=[],p="z"===e[e.length-1].type.toLowerCase();p&&(e=(e=>{let t="z"===e[e.length-1].type.toLowerCase(),l=e[0],[a,s]=[l.values[0],l.values[1]],n=t?e[e.length-2]:e[e.length-1],[r,p]=[n.values[n.values.length-2],n.values[n.values.length-1]];return!t||a==r&&s==p||(e.pop(),e.push({type:"L",values:[a,s]},{type:"Z",values:[]})),e})(e),e.pop());let i=e[e.length-1].values,u=i.length,y=p?e[0]:{type:"M",values:[i[u-2],i[u-1]]};r.push(y),e.reverse();for(let t=1;t<e.length;t++){let l=e[t],a=l.type,s=l.values,p=e[t-1],i=p.type,u=[];u=[n(i,p.values).controlPoints,n(a,s).endPoints].flat(),r.push({type:i,values:u.flat()})}return p&&r.push({type:"z",values:[]}),r}function oe(e,{threshold:t=null,tolerance:l=1}={}){if(!t){let l=function(e){let t=1/0,l=-1/0,a=1/0,s=-1/0;const n=e=>{e.x<t&&(t=e.x),e.x>l&&(l=e.x),e.y<a&&(a=e.y),e.y>s&&(s=e.y)};for(let t=0;t<e.length;t++){let l=e[t],{type:a,values:s}=l,r=s.length,p=(e[t-1]?e[t-1]:e[t]).values,i=p.length;if(r){let e={x:p[i-2],y:p[i-1]},t={x:s[r-2],y:s[r-1]};if(n(t),"C"===a||"Q"===a){let l={x:s[0],y:s[1]},r="C"===a?{x:s[2],y:s[3]}:l,p="C"===a?[e,l,r,t]:[e,l,t];S(p).forEach(e=>{let t=w(p,e);n(t)})}else"A"===a&&$(e,s).forEach(e=>{n(e)})}}return{x:t,y:a,width:l-t,height:s-a}}(e);t=(l.width+l.height)/2*.05}let a=e.length;for(let s=0;s<a;s++){let a=e[s],{type:n,values:r,extreme:p,corner:i=!1,dimA:u,p0:y,p:o}=a,h=e[s+1]?e[s+1]:null;if(h&&"C"===n&&"C"===h.type&&p&&!i){if(F(o,h.p)<t){let n,r=a.cp1.x-h.p0.x,p=a.cp1.y-h.p0.y,i=Math.abs(p)<Math.abs(r),u=h.p,y=1;if(h.extreme){i?(y=Math.abs(Math.abs(h.cp2.x-h.p.x)/Math.abs(a.cp2.x-a.p.x)),n=C(h.p,a.cp2,1+y),a.cp2.x=n.x):(y=Math.abs(Math.abs(h.cp2.y-h.p.y)/Math.abs(a.cp2.y-a.p.y)),n=C(h.p,a.cp2,1+y),a.cp2.y=n.y),e[s+1].values=[a.cp1.x,a.cp1.y,a.cp2.x,a.cp2.y,u.x,u.y],e[s+1].cp1=a.cp1,e[s+1].cp2=a.cp2,e[s+1].p0=a.p0,e[s+1].p=u,e[s+1].extreme=!0,e[s]=null;continue}{let a=e[s+2]?e[s+2]:null;if(!a&&"C"!==a.type)continue;let n=Z(h,a,t,l,!1);if(1===n.length){e[s+1]=null,n=n[0],e[s+2].values=[n.cp1.x,n.cp1.y,n.cp2.x,n.cp2.y,n.p.x,n.p.y],e[s+2].cp1=n.cp1,e[s+2].cp2=n.cp2,e[s+2].p0=n.p0,e[s+2].p=n.p,e[s+2].extreme=n.extreme,s++;continue}}}}}a=(e=e.filter(Boolean)).length;let s="z"===e[a-1].type.toLowerCase()?a-2:a-1,n=e[s],r=e[s-1]||null,p={x:e[0].values[0],y:e[0].values[1]},i=n.values.slice(-2),u=+i[0].toFixed(8)===+p.x.toFixed(8)&&+i[1].toFixed(8)===+p.y.toFixed(8),y="C"===e[1].type&&e[1].extreme?e[1]:null,o=F(n.p0,n.p)<t;if(r&&"C"===r.type&&o&&u&&y){Math.abs(y.cp1.x-p.x),Math.abs(y.cp1.y-p.y);let a=Z(r,n,t,l,!1);console.log("comEx",a),1===a.length&&(e[s-1]=a[0],e[s]=null,e=e.filter(Boolean))}return e}function he(e){let t=(new XMLSerializer).serializeToString(e);return t=t.replace(/\t/g,"").replace(/[\n\r|]/g,"\n").replace(/\n\s*\n/g,"\n").replace(/ +/g," "),t}function ce(e="",{getObject:t=!1,toAbsolute:l=!0,toRelative:a=!0,toShorthands:s=!0,quadraticToCubic:n=!0,arcToCubic:r=!1,cubicToArc:p=!1,simplifyBezier:i=!0,optimizeOrder:u=!0,removeColinear:y=!0,flatBezierToLinetos:o=!0,revertToQuadratics:h=!0,refineExtremes:c=!0,keepExtremes:x=!0,keepCorners:f=!0,extrapolateDominant:g=!0,keepInflections:v=!1,addExtremes:d=!1,removeOrphanSubpaths:m=!1,decimals:M=3,autoAccuracy:b=!0,minifyD:A=0,tolerance:C=1,reverse:w=!1,mergePaths:L=!1,removeHidden:P=!0,removeUnused:k=!0,shapesToPaths:S=!0}={}){C=Math.max(.1,C);let $=function(e){let t="string";if(Array.isArray(e))return"array";if("string"==typeof e){let l=(e=e.trim()).includes("<svg")&&e.includes("</svg"),a=e.startsWith("M")||e.startsWith("m"),s=!isNaN(e.substring(0,1))&&!isNaN(e.substring(e.length-1,e.length));if(l)t="svgMarkup";else if(a)t="pathDataString";else if(s)t="polyString";else{let l=/^(file:|https?:\/\/|\/|\.\/|\.\.\/)/.test(e),a=e.startsWith("data:image");t=l||a?"url":"string"}return t}return t=typeof e,(e.constructor.name||t).toLowerCase()}(e),E="",z=0,T=0,q=0,D={},B="",j="svgMarkup"===$?1:0,Z=[];if(z=new Blob([e]).size,j){if(E=function(e,{returnDom:t=!1,removeHidden:l=!0,removeUnused:a=!0}={}){e=(e=e.replace(/<\?xml[\s\S]*?\?>/gi,"").replace(/<!DOCTYPE[\s\S]*?>/gi,"").replace(/<!--[\s\S]*?-->/g,"").trim()).replaceAll("xlink:href=","href=");let s=(new DOMParser).parseFromString(e,"text/html").querySelector("svg");!function(e,t=["viewBox","xmlns","width","height","id","class"]){[...e.attributes].map(e=>e.name).forEach(l=>{t.includes(l)||e.removeAttribute(l)})}(s,["viewBox","xmlns","width","height","id","class","fill","stroke","stroke-width"]);let n=["metadata","script"];if(s.querySelectorAll("*").forEach(e=>{let t=e.nodeName,a=e.getAttribute("style")||"",s=!!a&&a.trim().includes("display:none"),r=e.getAttribute("display")&&"none"===e.getAttribute("display")||s;t.includes(":")||n.includes(t)||l&&r?e.remove():function(e){[...e.attributes].map(e=>e.name).forEach(t=>{t.includes(":")&&e.removeAttribute(t)})}(e)}),t)return s;let r=he(s);return console.log(r),r}(e,{returnDom:!0,removeHidden:P,removeUnused:k}),S){E.querySelectorAll("polygon, polyline, line, rect, circle, ellipse").forEach(e=>{let t=se(e);e.replaceWith(t)})}E.querySelectorAll("path").forEach(e=>{Z.push({d:e.getAttribute("d"),el:e})})}else"pathDataString"===$?B=e:"polyString"===$&&(B="M"+e),Z.push({d:B,el:null});let O={toRelative:a,toShorthands:s,decimals:M},H=[];if(Z.forEach(e=>{let{d:t,el:a}=e,s=te(t,{quadraticToCubic:n,toAbsolute:l,arcToCubic:r}),P=s.length,k=s;m&&(k=function(e){for(let t=0,l=e.length;t<l;t++){let l=e[t];if(!l)continue;let{type:a=null,values:s=[]}=l,n=e[t+1]?e[t+1]:null;"M"!==a&&"m"!==a||n&&(!n||"Z"!==n.type&&"z"!==n.type)||(e[t]=null,e[t+1]=null)}return e.filter(Boolean)}(k));let S=I(k),$=[];for(let e=0,t=S.length;e<t;e++){let t=S[e];w&&(t=ye(t)),y&&(t=re(t)),d&&(t=Q(t,0,1)),u&&(t=pe(t)),y&&(t=ne(t,C,o));let l=R(t),{pathData:a,bb:s,dimA:n}=l;if(a=i?xe(a,{simplifyBezier:i,keepInflections:v,keepExtremes:x,keepCorners:f,extrapolateDominant:g,revertToQuadratics:h,tolerance:C,reverse:w}):a,c){let e=(s.width+s.height)/2*.05;a=oe(a,{threshold:e,tolerance:C})}if(p){let e=3;a.forEach((t,l)=>{let{type:s,values:n,p0:r,cp1:p=null,cp2:i=null,p:u=null}=t;if("C"===s){let t=K(r,p,i,u,e);t.isArc&&(a[l]=t.com)}}),a=_(a)}h&&a.forEach((e,t)=>{let{type:l,values:s,p0:n,cp1:r=null,cp2:p=null,p:i=null}=e;if("C"===l){let l=V(n,r,p,i);"Q"===l.type&&(l.extreme=e.extreme,l.corner=e.corner,l.dimA=e.dimA,a[t]=l)}}),u&&(a=ie(a)),$.push(a)}if(k=$.flat(),a&&L)H.push(...k);else{b&&(M=function(e){let t={x:e[0].values[0],y:e[0].values[1]},l=t,a=t;e[0].decimals=0;let s=new Set;for(let n=0,r=e.length;n<r;n++){let r=e[n],{type:p,values:i}=r,u=i.length?i.slice(-2):[t.x,t.y];a={x:u[0],y:u[1]};let y=r.dimA?+r.dimA.toFixed(8):"M"!==p?+F(l,a).toFixed(8):0;y&&s.add(y),"M"===p&&(t=a),l=a}let n=Array.from(s).sort(),r=Math.ceil(n.length/10);n=n.slice(0,r);let p=n.reduce((e,t)=>e+t,0)/r,i=p>60?0:Math.floor(40/p).toString().length;return Math.min(Math.max(0,i),8)}(k),O.decimals=M),k=J(k,O),k=re(k);let t=k.length,l=N(k,A);T=new Blob([l]).size,q=+(100/z*T).toFixed(2),e.d=l,e.report={original:P,new:t,saved:P-t,compression:q,decimals:M},a&&a.setAttribute("d",l)}}),j){if(H.length){let e=J(H,O);e=re(e);let t=N(e,A);Z[0].el.setAttribute("d",t);for(let e=1;e<Z.length;e++){let t=Z[e].el;t&&t.remove()}!function(e){e.querySelectorAll("g, defs").forEach(e=>{e.children.length||e.remove()})}(E)}E=he(E),T=new Blob([E]).size,q=+(100/z*T).toFixed(2),z=+(z/1024).toFixed(3),T=+(T/1024).toFixed(3),D={svgSize:z,svgSizeOpt:T,compression:q}}else({d:B,report:D}=Z[0]);return t?{svg:E,d:B,report:D,inputType:$,mode:j}:B||E}function xe(e,{keepExtremes:t=!0,keepInflections:l=!0,keepCorners:a=!0,extrapolateDominant:s=!0,tolerance:n=1,reverse:r=!1}={}){let p=[e[0]];for(let r=2,i=e.length;i&&r<=i;r++){let u=e[r-1],y=r<i?e[r]:null,o=y?.type||null,h=u?.directionChange||null,c=y?.directionChange||null,{type:x,values:f,p0:g,p:v,cp1:d=null,cp2:m=null,extreme:M=!1,corner:b=!1,dimA:A=0}=u;if("C"===x&&"C"===o)if(l&&c||a&&b||!h&&t&&M)p.push(u);else{let o=O(u,y,s,n),h=0;if(1===o.length){u=o[0];let y=1;h+=u.error;for(let p=r+1;h<n&&p<i;p++){let r=e[p];if("C"!==r.type||l&&r.directionChange||a&&u.corner||t&&u.extreme)break;let i=O(u,r,s,n);1===i.length&&(h+=.5*i[0].error,y++),u=i[0]}p.push(u),r<i&&(r+=y)}else p.push(u)}else p.push(u)}return r&&(p=ye(p)),p}ae[77]=2,ae[109]=2,ae[65]=7,ae[97]=7,ae[67]=6,ae[99]=6,ae[76]=2,ae[108]=2,ae[81]=4,ae[113]=4,ae[83]=4,ae[115]=4,ae[84]=2,ae[116]=2,ae[72]=1,ae[104]=1,ae[86]=1,ae[118]=1,ae[90]=0,ae[122]=0;const{abs:fe,acos:ge,asin:ve,atan:de,atan2:me,ceil:Me,cos:be,exp:Ae,floor:Ce,log:we,hypot:Le,max:Pe,min:ke,pow:Se,random:$e,round:Fe,sin:Ie,sqrt:Ee,tan:ze,PI:Qe}=Math;"undefined"!=typeof window&&(window.svgPathSimplify=ce),exports.PI=Qe,exports.abs=fe,exports.acos=ge,exports.asin=ve,exports.atan=de,exports.atan2=me,exports.ceil=Me,exports.cos=be,exports.exp=Ae,exports.floor=Ce,exports.hypot=Le,exports.log=we,exports.max=Pe,exports.min=ke,exports.pow=Se,exports.random=$e,exports.round=Fe,exports.sin=Ie,exports.sqrt=Ee,exports.svgPathSimplify=ce,exports.tan=ze;
package/index.html CHANGED
@@ -44,7 +44,7 @@
44
44
  <body class="enhance-inputs-init --scrollbar --scroll-content pdd-0 mrg-0"
45
45
  data-enhance-inputs='{"storageName":"svgPathSimplify", "getQuery":true, "cacheToStorage":true,"icons":"all"}'>
46
46
 
47
- <div class="grd-main hgh-100vh grd grd-md-3 grd-ld-5 gap-1em">
47
+ <div class="grd-main hgh-100vh grd grd-md-3 grd-ld-5 gap-0">
48
48
  <div class="sidebar-wrap scrollbar scroll-content scroll-track">
49
49
 
50
50
  <!--toolbars-->
@@ -67,7 +67,8 @@
67
67
 
68
68
 
69
69
  <label>Input SVG
70
- <textarea name="dInput" id="inputSvg" data-tools="size upload copy"></textarea>
70
+ <textarea name="dInput" id="inputSvg" data-tools="size upload copy">m71.72 20.83 0 0c-1.76 .59-3.69 .97-5.79 1.15s-4.68 .26-7.73 .26c5.45 2.46 8.16 6.35 8.16 11.67 0 4.62-1.58 8.39-4.73 11.32s-7.46 4.39-12.9 4.39c-2.11 0-4.07-.3-5.88-.88-.71 .47-1.26 1.1-1.67 1.89s-.61 1.59-.61 2.41c0 2.52 2.02 3.77 6.05 3.77h7.37c3.1 0 5.85 .56 8.25 1.67s4.26 2.64 5.57 4.56 1.98 4.13 1.98 6.59c0 4.5-1.84 7.97-5.53 10.39s-9.07 3.65-16.14 3.65c-4.98 0-8.91-.52-11.81-1.54s-4.95-2.56-6.18-4.61-1.85-4.68-1.85-7.89h5.54 1.75c0 1.87 .35 3.34 1.05 4.43 .7 1.08 1.96 1.9 3.77 2.46s4.39 .83 7.73 .83c4.85 0 8.32-.6 10.39-1.8s3.12-3 3.12-5.4c0-2.16-.82-3.8-2.46-4.91s-3.92-1.67-6.85-1.67h-7.28c-3.92 0-6.89-.83-8.91-2.5s-3.02-3.76-3.02-6.27c0-1.53 .44-2.99 1.31-4.39s2.14-2.66 3.78-3.77c-2.69-1.41-4.67-3.15-5.92-5.23s-1.89-4.6-1.89-7.58c0-3.11 .77-5.89 2.32-8.34s3.69-4.38 6.41-5.75 5.75-2.06 9.08-2.06c3.63 .06 6.67-.08 9.13-.4s4.48-.76 6.1-1.31 3.58-1.36 5.92-2.42l0.88 2.71 .88 2.7 .61 1.87zm-30.58 5.49c-1.67 1.9-2.51 4.4-2.51 7.5 0 3.16 .85 5.69 2.55 7.59s4.1 2.85 7.2 2.85 5.57-.92 7.24-2.76 2.5-4.43 2.5-7.76c0-6.85-3.31-10.27-9.92-10.27-3.04 0-5.4 .95-7.06 2.85z
71
+ </textarea>
71
72
  </label>
72
73
 
73
74
  <h3>SVG normalization</h3>
@@ -76,7 +77,7 @@
76
77
  <label><input type="checkbox" name="quadraticToCubic" checked>quadraticToCubic</label>
77
78
  <label><input type="checkbox" name="removeHidden" checked>removeHidden</label>
78
79
  <label><input type="checkbox" name="mergePaths" >mergePaths</label>
79
-
80
+ <label><input type="checkbox" name="shapesToPaths" data-info="convert shapes like circles, rects to path elements">shapesToPaths</label>
80
81
 
81
82
 
82
83
  </p>
@@ -112,7 +113,6 @@
112
113
  <label><input type="checkbox" name="cubicToArc"
113
114
  data-info="Reverts cubic to arcs if applicable">cubicToArc</label>
114
115
 
115
-
116
116
  <!--
117
117
  <label><input type="checkbox" name="reverse">try with reversed drawing direction</label>
118
118
 
@@ -121,7 +121,10 @@
121
121
  -->
122
122
 
123
123
 
124
- <label><input type="checkbox" name="addExtremes">addExtremes</label>
124
+
125
+ <label><input type="checkbox" name="removeOrphanSubpaths" data-info="remove orphaned M commands not connecting to lines or curve segments" checked>removeOrphanSubpaths</label>
126
+ <label><input type="checkbox" name="refineExtremes">refineExtremes</label>
127
+ <label><input type="checkbox" name="addExtremes">addExtremes</label>
125
128
 
126
129
 
127
130
 
@@ -160,7 +163,7 @@
160
163
  <p>
161
164
  <label>Output SVG
162
165
  <textarea name="dOutput" id="outputSvg"
163
- data-tools="size upload copy">m71.72 20.83 0 0c-1.76 .59-3.69 .97-5.79 1.15s-4.68 .26-7.73 .26c5.45 2.46 8.16 6.35 8.16 11.67 0 4.62-1.58 8.39-4.73 11.32s-7.46 4.39-12.9 4.39c-2.11 0-4.07-.3-5.88-.88-.71 .47-1.26 1.1-1.67 1.89s-.61 1.59-.61 2.41c0 2.52 2.02 3.77 6.05 3.77h7.37c3.1 0 5.85 .56 8.25 1.67s4.26 2.64 5.57 4.56 1.98 4.13 1.98 6.59c0 4.5-1.84 7.97-5.53 10.39s-9.07 3.65-16.14 3.65c-4.98 0-8.91-.52-11.81-1.54s-4.95-2.56-6.18-4.61-1.85-4.68-1.85-7.89h5.54 1.75c0 1.87 .35 3.34 1.05 4.43 .7 1.08 1.96 1.9 3.77 2.46s4.39 .83 7.73 .83c4.85 0 8.32-.6 10.39-1.8s3.12-3 3.12-5.4c0-2.16-.82-3.8-2.46-4.91s-3.92-1.67-6.85-1.67h-7.28c-3.92 0-6.89-.83-8.91-2.5s-3.02-3.76-3.02-6.27c0-1.53 .44-2.99 1.31-4.39s2.14-2.66 3.78-3.77c-2.69-1.41-4.67-3.15-5.92-5.23s-1.89-4.6-1.89-7.58c0-3.11 .77-5.89 2.32-8.34s3.69-4.38 6.41-5.75 5.75-2.06 9.08-2.06c3.63 .06 6.67-.08 9.13-.4s4.48-.76 6.1-1.31 3.58-1.36 5.92-2.42l0.88 2.71 .88 2.7 .61 1.87zm-30.58 5.49c-1.67 1.9-2.51 4.4-2.51 7.5 0 3.16 .85 5.69 2.55 7.59s4.1 2.85 7.2 2.85 5.57-.92 7.24-2.76 2.5-4.43 2.5-7.76c0-6.85-3.31-10.27-9.92-10.27-3.04 0-5.4 .95-7.06 2.85z</textarea>
166
+ data-tools="size upload copy"></textarea>
164
167
  </label>
165
168
  </p>
166
169
 
@@ -172,9 +175,9 @@
172
175
  <!--main-->
173
176
  <main class="main --spn-ld-2 --spn-ld-3 scrollbar scroll-content pst-rlt">
174
177
 
175
- <header class="pst-sticky --pdd-1em z-ind-1000">
178
+ <header class="pst-sticky --pdd-1em z-ind-1000 pdd-1em">
176
179
  <label class="navToggle"><input type="checkbox" name="showNav" class="showNav"
177
- data-icon="adjustments-vertical" data-tooltip2="show settings" title="show settings"></label>
180
+ data-icon="adjustments-vertical" checked title="show settings"></label>
178
181
 
179
182
  <a class="lnk-github" href="https://github.com/herrstrietzel/svg-path-simplify"
180
183
  title="See github repository">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svg-path-simplify",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "main": "./dist/svg-path-simplify.node.js",
5
5
  "module": "./dist/svg-path-simplify.esm.js",
6
6
  "browser": "./dist/svg-path-simplify.js",
@@ -21,7 +21,7 @@
21
21
  "scripts": {
22
22
  "build": "rollup -c",
23
23
  "watch": "rollup -c --watch",
24
- "test": "node test.js"
24
+ "test": "node testSVG.js"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@rollup/plugin-terser": "^0.4.4",
@@ -31,12 +31,14 @@
31
31
  "keywords": [
32
32
  "bezier-simplification",
33
33
  "svg-minification",
34
- "simplification"
34
+ "simplification",
35
+ "svg"
35
36
  ],
36
37
  "author": "herrstrietzel",
37
38
  "license": "GPL-2.0",
38
39
  "description": "Simplify Bézier paths while maintaining their shape",
39
40
  "dependencies": {
41
+ "linkedom": "^0.18.12",
40
42
  "svg-path-simplify": "^0.0.5",
41
43
  "terser": "^5.43.1"
42
44
  },
@@ -0,0 +1,29 @@
1
+ // dom-polyfill.js
2
+ import { DOMParser } from 'linkedom';
3
+
4
+ // XMLSerializer polyfill
5
+ class XMLSerializerPoly {
6
+ serializeToString(document) {
7
+ // LinkedOM's toString() should work for XML documents
8
+ return document.toString();
9
+ }
10
+ }
11
+
12
+ // Function to install polyfills globally
13
+ export function installDOMPolyfills() {
14
+ if (typeof globalThis.DOMParser === 'undefined') {
15
+ globalThis.DOMParser = DOMParser;
16
+ }
17
+
18
+ if (typeof globalThis.XMLSerializer === 'undefined') {
19
+ globalThis.XMLSerializer = XMLSerializerPoly;
20
+ }
21
+ }
22
+
23
+ // Export individual polyfills for manual use
24
+ export { DOMParser, XMLSerializerPoly as XMLSerializer };
25
+
26
+ // Auto-install if in Node.js environment and not in browser
27
+ if (typeof window === 'undefined' && typeof globalThis.DOMParser === 'undefined') {
28
+ installDOMPolyfills();
29
+ }
@@ -0,0 +1,22 @@
1
+ // polyfill browsers XMLSerializer
2
+ export class XMLSerializerPoly {
3
+ serializeToString(document) {
4
+ return document.toString();
5
+ }
6
+ }
7
+
8
+ export class DOMParserPoly {
9
+ parseFromString(string) {
10
+ return parseHTML(string);
11
+ }
12
+ }
13
+
14
+ if (typeof globalThis.XMLSerializer === 'undefined') {
15
+ globalThis.XMLSerializer = XMLSerializerPoly;
16
+ //console.log('!!!no XMLSerializer')
17
+ }
18
+
19
+ if (typeof globalThis.DOMParser === 'undefined') {
20
+ globalThis.DOMParser = DOMParserPoly;
21
+ //console.log('!!!no DOMParser')
22
+ }
package/src/index.js CHANGED
@@ -1,10 +1,15 @@
1
+ /*
2
+ import {XMLSerializerPoly, DOMParserPoly} from './dom_polyfills';
3
+ export {XMLSerializerPoly as XMLSerializerPoly};
4
+ export {DOMParserPoly as DOMParserPoly};
5
+ */
6
+
1
7
  // just for visual debugging
2
8
  import { renderPoint } from './svgii/visualize';
3
9
 
4
10
  import {svgPathSimplify} from './pathSimplify-main';
5
11
  //import {getViewBox} from './svg_getViewbox';
6
12
 
7
-
8
13
  export {svgPathSimplify as svgPathSimplify};
9
14
  //export {getViewBox as getViewBox};
10
15
 
@@ -14,6 +19,7 @@ export {
14
19
  } from './constants';
15
20
 
16
21
 
22
+
17
23
  // IIFE
18
24
  if (typeof window !== 'undefined') {
19
25
  window.svgPathSimplify = svgPathSimplify;
@@ -160,16 +160,6 @@ export function combineCubicPairs(com1, com2, extrapolateDominant = false, toler
160
160
 
161
161
 
162
162
 
163
- /*
164
- if (extrapolateDominant && com2.extreme) {
165
- renderPoint(markers, com2.p)
166
- //renderPoint(markers, com1.p, 'cyan')
167
- //extrapolateDominant = false;
168
- }
169
- */
170
-
171
-
172
-
173
163
 
174
164
  // try extrapolated dominant curve
175
165
  //&& !com2.extreme
@@ -283,38 +273,12 @@ export function getBezierCommandArea(commands = [com1, com2], absolute = true) {
283
273
 
284
274
  function findSplitT(com1, com2) {
285
275
 
286
- //let selfIntersecting = false
287
-
288
- // control tangent intersection
289
- let pt1 = checkLineIntersection(com1.p0, com1.cp1, com2.cp2, com2.p, false)
290
-
291
- // intersection 2nd cp1 tangent and global tangent intersection
292
- let ptI = checkLineIntersection(pt1, com2.p, com2.p0, com2.cp1, false)
293
-
294
-
295
- let len1 = getDistance(pt1, com2.p)
296
- let len2 = getDistance(ptI, com2.p)
297
-
298
- //let t = !t3 ? 1-len2/len1 : (t3+len2/len1)*0.5
299
- let t = 1 - len2 / len1
300
-
301
-
302
- // check self intersections
303
- //let ptI2 = checkLineIntersection(com1.cp1, com2.cp2, com1.p0, com2.p, true)
304
- //let hasInfliction = ptI2!==null
305
-
306
-
307
276
  let len3 = getDistance(com1.cp2, com1.p)
308
277
  let len4 = getDistance(com1.cp2, com2.cp1)
309
278
 
310
- //let t5 = 1-Math.min(len7, len8)/len9
311
- t = Math.min(len3) / len4
312
-
313
- //console.log('???selfIntersecting:', t, hasInfliction, ptI2)
279
+ let t = Math.min(len3) / len4
314
280
 
315
281
  return t
316
-
317
-
318
282
  }
319
283
 
320
284
 
@@ -3,7 +3,7 @@ import { getPathArea } from "./svgii/geometry_area";
3
3
  import { pathDataToD } from "./svgii/pathData_stringify";
4
4
  import { renderPath, renderPoint } from "./svgii/visualize";
5
5
 
6
- export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
6
+ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1, debug = false) {
7
7
 
8
8
  // cubic Bézier derivative
9
9
  const cubicDerivative = (p0, p1, p2, p3, t) => {
@@ -27,8 +27,10 @@ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
27
27
  let commands = [com1, com2]
28
28
 
29
29
  // detect dominant
30
- let dist1 = getSquareDistance(com1.p0, com1.p)
31
- let dist2 = getSquareDistance(com2.p0, com2.p)
30
+ let dist1 = getDistAv(com1.p0, com1.p)
31
+ let dist2 = getDistAv(com2.p0, com2.p)
32
+
33
+
32
34
  let reverse = dist1 > dist2;
33
35
 
34
36
  //let ang1 = getAngle(com1.p0, com1.cp1)
@@ -42,6 +44,7 @@ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
42
44
 
43
45
  if (!ptI) {
44
46
  //renderPoint(markers, com1.p, 'purple')
47
+ //console.log('nope');
45
48
  return commands
46
49
  }
47
50
 
@@ -95,12 +98,10 @@ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
95
98
  let r = sub(P, com1.p0);
96
99
 
97
100
  //let t0_2 = t0 - dot(r, dP) / dot(dP, dP);
98
-
99
- t0 -= dot(r, dP) / dot(dP, dP);
100
101
 
102
+ t0 -= dot(r, dP) / dot(dP, dP);
101
103
 
102
104
  // construct merged cubic over [t0, 1]
103
-
104
105
  let Q0 = pointAtT([com2.p0, com2.cp1, com2.cp2, com2.p], t0);
105
106
  let Q3 = com2.p;
106
107
 
@@ -130,35 +131,38 @@ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
130
131
  }
131
132
 
132
133
 
133
- let tMid = (1 - t0)*0.5 ;
134
+ let tMid = (1 - t0) * 0.5;
135
+ let tSplit = t0 - 1;
134
136
  //tMid = 0.5;
135
- //console.log('t0', t0, tMid);
137
+
136
138
 
137
139
  let ptM = pointAtT([result.p0, result.cp1, result.cp2, result.p], tMid, false, true)
138
140
  let seg1_cp2 = ptM.cpts[2]
139
141
  //let seg2_cp1 = ptM.cpts[3]
140
142
 
141
-
142
143
  let ptI_1 = checkLineIntersection(ptM, seg1_cp2, result.p0, ptI, false)
143
144
  let ptI_2 = checkLineIntersection(ptM, seg1_cp2, result.p, ptI, false)
144
145
 
145
146
 
147
+
148
+
146
149
  let cp1_2 = interpolate(result.p0, ptI_1, 1.333)
147
150
  let cp2_2 = interpolate(result.p, ptI_2, 1.333)
148
151
 
149
152
  // test self intersections and exit
150
- let cp_intersection = checkLineIntersection(com1_o.p0, cp1_2, com2_o.p, cp2_2, true )
151
- if(cp_intersection){
153
+ let cp_intersection = checkLineIntersection(com1_o.p0, cp1_2, com2_o.p, cp2_2, true)
154
+ if (cp_intersection) {
152
155
  //renderPoint(markers, cp_intersection )
153
156
  return commands;
154
157
  }
155
158
 
159
+ if (debug) renderPoint(markers, ptM, 'purple')
156
160
 
157
161
  result.cp1 = cp1_2
158
162
  result.cp2 = cp2_2
159
163
 
160
- // check distances
161
164
 
165
+ // check distances between original starting point and extrapolated
162
166
  let dist3 = getDistAv(com1_o.p0, result.p0)
163
167
  let dist4 = getDistAv(com2_o.p, result.p)
164
168
  let dist5 = (dist3 + dist4)
@@ -170,13 +174,29 @@ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
170
174
  result.corner = com2_o.corner
171
175
  result.dimA = com2_o.dimA
172
176
  result.directionChange = com2_o.directionChange
177
+ result.type = 'C'
173
178
  result.values = [result.cp1.x, result.cp1.y, result.cp2.x, result.cp2.y, result.p.x, result.p.y]
174
179
 
175
180
 
176
-
177
- // check if completely off
181
+ // extrapolated starting point is not completely off
178
182
  if (dist5 < maxDist) {
179
183
 
184
+ // split t to meet original mid segment start point
185
+ let tSplit = reverse ? 1 + t0 : Math.abs(t0);
186
+ //console.log('t0', t0, tMid, 'tSplit', tSplit);
187
+
188
+ let ptSplit = pointAtT([result.p0, result.cp1, result.cp2, result.p], tSplit);
189
+ let distSplit = getDistAv(ptSplit, com1.p)
190
+ //console.log('distS', distS, maxDist );
191
+
192
+ // not close enough - exit
193
+ if (distSplit > maxDist * tolerance) {
194
+ //renderPoint(markers, ptSplit, 'cyan', '1%')
195
+ //renderPoint(markers, com1.p, 'red', '0.5%')
196
+ return commands;
197
+ }
198
+
199
+
180
200
  // compare combined with original area
181
201
  let pathData0 = [
182
202
  { type: 'M', values: [com1_o.p0.x, com1_o.p0.y] },
@@ -193,28 +213,23 @@ export function getCombinedByDominant(com1, com2, maxDist = 0, tolerance = 1) {
193
213
  let areaN = getPathArea(pathDataN)
194
214
  let areaDiff = Math.abs(areaN / area0 - 1)
195
215
 
196
- result.error = areaDiff * 10 * tolerance;
216
+ result.error = areaDiff * 5 * tolerance;
197
217
  //result.error = areaDiff + dist5;
198
218
 
199
- let d = pathDataToD(pathDataN)
200
219
 
201
- // success
202
- if (areaDiff < 0.01) {
203
- commands = [result];
204
- //renderPath(markers, d, 'orange')
205
- //console.log('areaDiff', areaDiff);
206
-
207
- } else {
208
- // renderPath(markers, d, 'red')
209
- // console.log('areaDiff', areaDiff);
220
+ if (debug) {
221
+ let d = pathDataToD(pathDataN)
222
+ renderPath(markers, d, 'orange')
210
223
  }
211
224
 
212
-
213
- //renderPath(markers, d, 'orange')
225
+ // success!!!
226
+ if (areaDiff < 0.05 * tolerance) {
227
+ commands = [result];
228
+ //console.log('areaDiff', areaDiff);
229
+ }
214
230
  }
215
231
 
216
232
 
217
-
218
233
  //console.log(commands);
219
234
 
220
235
  return commands