dielines 0.7.0 → 0.8.1

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,18 +1,18 @@
1
- (function(rt,wt){typeof exports=="object"&&typeof module<"u"?wt(exports):typeof define=="function"&&define.amd?define(["exports"],wt):(rt=typeof globalThis<"u"?globalThis:rt||self,wt(rt.Dielines={}))})(this,function(rt){"use strict";function wt(s,t,e,n){return s<=n&&t>=e}let qt=class Dt{constructor(t=1/0,e=1/0,n=-1/0,r=-1/0){this.xMin=t,this.yMin=e,this.xMax=n,this.yMax=r}get width(){return this.xMax-this.xMin}get height(){return this.yMax-this.yMin}get center(){return[(this.xMin+this.xMax)/2,(this.yMin+this.yMax)/2]}grow(t){return new Dt(this.xMin-t,this.yMin-t,this.xMax+t,this.yMax+t)}contains(t){const[e,n]=t;return wt(this.xMin,this.xMax,e,e)&&wt(this.yMin,this.yMax,n,n)}overlaps(t){return wt(this.xMin,this.xMax,t.xMin,t.xMax)&&wt(this.yMin,this.yMax,t.yMin,t.yMax)}addPoint(t){const[e,n]=t;return new Dt(Math.min(this.xMin,e),Math.min(this.yMin,n),Math.max(this.xMax,e),Math.max(this.yMax,n))}merge(t){return new Dt(Math.min(this.xMin,t.xMin),Math.min(this.yMin,t.yMin),Math.max(this.xMax,t.xMax),Math.max(this.yMax,t.yMax))}intersection(t){return new Dt(Math.max(this.xMin,t.xMin),Math.max(this.yMin,t.yMin),Math.min(this.xMax,t.xMax),Math.min(this.yMax,t.yMax))}};function me(s){return s.reduce((t,e)=>t.addPoint(e),new qt)}const Ve=(s,t=1e-9)=>{let e=s;return Math.abs(s)<t&&(e=0),e.toFixed(-Math.log10(t))};function mt(s,t=1e-9){return Array.from(new Map(s.map(([e,n])=>[`[${Ve(e,t)},${Ve(n,t)}]`,[e,n]])).values())}const xt=Math.PI/180,ge=180/Math.PI,H=s=>`[${s[0]}, ${s[1]}]`,y=([s,t],[e,n],r=1e-9)=>Math.abs(s-e)<=r&&Math.abs(t-n)<=r,V=([s,t],[e,n])=>[s+e,t+n],q=([s,t],[e,n])=>[s-e,t-n],ct=([s,t])=>s*s+t*t,ss=([s,t])=>Math.sqrt(ct([s,t])),W=([s,t],e)=>[s*e,t*e],vt=([s,t],[e,n]=[0,0])=>(s-e)**2+(t-n)**2,z=(s,t=[0,0])=>Math.sqrt(vt(s,t));function dt([s,t],[e,n]){return s*n-t*e}function pe([s,t],[e,n]){return s*e+t*n}function J([s,t]){const e=z([s,t]);return[s/e,t/e]}function gt(s,t){const e=Math.cos(t)*s,n=Math.sin(t)*s;return[e,n]}function rs([s,t]){return Math.atan2(t,s)}function ze(s){const t=z(s),e=rs(s);return[t,e]}function we(s,t,e=1e-9){const n=dt(s,t),r=ct(s),o=ct(t);return n*n<r*o*e*e}function G(s){return[-s[1],s[0]]}function Ot(s){return[s[1],-s[0]]}function os(s,t,e){return y(e,s)||we(q(e,s),t)}const Ct=(s,t)=>{const[e,n,r,o,i,h,l,a,c]=s,[u,f,p,g,w,P,m,d,M]=t;return[e*u+n*g+r*m,e*f+n*w+r*d,e*p+n*P+r*M,o*u+i*g+h*m,o*f+i*w+h*d,o*p+i*P+h*M,l*u+a*g+c*m,l*f+a*w+c*d,l*p+a*P+c*M]},is=s=>{const[t,e,n,r,o,i,h,l,a]=s,c=t*(o*a-i*l)-e*(r*a-i*h)+n*(r*l-o*h);return[(o*a-i*l)/c,(n*l-e*a)/c,(e*i-n*o)/c,(i*h-r*a)/c,(t*a-n*h)/c,(n*r-t*i)/c,(r*l-o*h)/c,(e*h-t*l)/c,(t*o-e*r)/c]},hs=s=>{const[t,e,n,r,o,i,h,l,a]=s;return[t,r,h,e,o,l,n,i,a]};class tt{constructor(t){this._matrix=[1,0,0,0,1,0,0,0,1],t&&(this._matrix=[...t])}clone(){return new tt(this._matrix)}transpose(){return this._matrix=hs(this._matrix),this}inverse(){return this._matrix=is(this._matrix),this}translate(t,e){return this._matrix=Ct(this._matrix,[1,0,t,0,1,e,0,0,1]),this}rotate(t,e){const n=Math.cos(t),r=Math.sin(t),o=[n,-r,0,r,n,0,0,0,1];return e&&this.translate(e[0],e[1]),this._matrix=Ct(this._matrix,o),e&&this.translate(-e[0],-e[1]),this}mirrorX(){return this._matrix=Ct(this._matrix,[1,0,0,0,-1,0,0,0,1]),this}mirrorY(){return this._matrix=Ct(this._matrix,[-1,0,0,0,1,0,0,0,1]),this}mirrorLine(t,e){const[n,r]=t,o=Math.atan2(r,n);return e&&this.translate(e[0],e[1]),this.rotate(o),this.mirrorX(),this.rotate(-o),e&&this.translate(-e[0],-e[1]),this}mirrorCenter(t){return t&&this.translate(t[0],t[1]),this._matrix=Ct(this._matrix,[-1,0,0,0,-1,0,0,0,1]),t&&this.translate(-t[0],-t[1]),this}scale(t,e){return e&&this.translate(e[0],e[1]),this._matrix=Ct(this._matrix,[t,0,0,0,t,0,0,0,1]),e&&this.translate(-e[0],-e[1]),this}transform(t){const[e,n]=t,[r,o,i,h,l,a]=this._matrix;return[r*e+o*n+i,h*e+l*n+a]}transformAngle(t){const[e,n]=this.transform([Math.cos(t),Math.sin(t)]),[r,o]=this.transform([0,0]);return Math.atan2(n-o,e-r)}keepsOrientation(){const[t,,,,e]=this._matrix;return t*e>0}scaleFactor(){const[t,,,e]=this._matrix;return Math.sqrt(t*t+e*e)}}let At=class{translateX(t){const e=new tt().translate(t,0);return this.transform(e)}translateY(t){const e=new tt().translate(0,t);return this.transform(e)}translate(t,e){const n=new tt().translate(t,e);return this.transform(n)}translateTo([t,e]){const n=new tt().translate(t,e);return this.transform(n)}rotate(t,e){const n=new tt().rotate(t*xt,e);return this.transform(n)}scale(t,e){const n=new tt().scale(t,e);return this.transform(n)}mirrorCenter(t){const e=new tt().mirrorCenter(t);return this.transform(e)}mirror(t="x",e){const n=new tt;return t==="x"?n.mirrorX():t==="y"?n.mirrorY():n.mirrorLine(t,e),this.transform(n)}};class Nt extends At{constructor(t,e){super(),this.firstPoint=t,this.lastPoint=e,this.precision=1e-9,this.firstPoint=t,this.lastPoint=e}get repr(){return`${this.segmentType} ${H(this.firstPoint)} - ${H(this.lastPoint)}`}get info(){return this.repr}[Symbol.for("nodejs.util.inspect.custom")](){return this.repr}}let B=class Lt extends Nt{constructor(){super(...arguments),this.segmentType="LINE",this._V=null,this._slope=null,this._yIntercept=null,this._boundingBox=null}isValidParameter(t){const e=this.length*this.precision;return t>=-e&&1-t>=-e}paramPoint(t){return V(this.firstPoint,W(this.V,t))}get length(){return z(this.firstPoint,this.lastPoint)}get squareLength(){return vt(this.firstPoint,this.lastPoint)}get V(){return this._V===null&&(this._V=q(this.lastPoint,this.firstPoint)),this._V}get slope(){if(this._slope===null){const[t,e]=this.V;this._slope=e/t}return this._slope}get yIntercept(){return this._yIntercept===null&&(this._yIntercept=this.firstPoint[1]-this.slope*this.firstPoint[0]),this._yIntercept}get midPoint(){return V(this.firstPoint,W(this.V,.5))}isSame(t){return t instanceof Lt?y(this.firstPoint,t.firstPoint)&&y(this.lastPoint,t.lastPoint)||y(this.lastPoint,t.firstPoint)&&y(this.firstPoint,t.lastPoint):!1}clone(){return new Lt(this.firstPoint,this.lastPoint)}reverse(){return new Lt(this.lastPoint,this.firstPoint)}get boundingBox(){return this._boundingBox===null&&(this._boundingBox=new qt(Math.min(this.firstPoint[0],this.lastPoint[0])-this.precision,Math.min(this.firstPoint[1],this.lastPoint[1])-this.precision,Math.max(this.firstPoint[0],this.lastPoint[0])+this.precision,Math.max(this.firstPoint[1],this.lastPoint[1])+this.precision)),this._boundingBox}distanceFrom(t){const e=q(t,this.firstPoint),n=pe(e,this.V)/this.squareLength;if(n<0)return z(t,this.firstPoint);if(n>1)return z(t,this.lastPoint);const r=this.paramPoint(n);return z(t,r)}isOnSegment(t){if(y(t,this.firstPoint,this.precision))return!0;const e=q(t,this.firstPoint);if(!we(this.V,e))return!1;const n=pe(e,this.V)/this.squareLength;return this.isValidParameter(n)}gradientAt(t){return this.V}tangentAt(t){if(!this.isOnSegment(t))throw new Error("Point is not on segment");return J(this.V)}get normalVector(){return G(J(this.V))}get tangentAtFirstPoint(){return J(this.V)}get tangentAtLastPoint(){return J(this.V)}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t],e.forEach(l=>{if(!this.isOnSegment(l))throw new Error(`Point ${H(l)} is not on segment ${this.repr}`)});const n=[this.firstPoint,...e,this.lastPoint],r=mt(n),o=this.lastPoint[0]-this.firstPoint[0];let i=Math.sign(o),h=0;return Math.abs(o)<this.precision&&(i=Math.sign(this.lastPoint[1]-this.firstPoint[1]),h=1),r.sort((l,a)=>i*(l[h]-a[h])),r.flatMap((l,a)=>a===r.length-1?[]:new Lt(l,r[a+1]))}transform(t){return new Lt(t.transform(this.firstPoint),t.transform(this.lastPoint))}};function as(s){return Array.from(Array(s).keys())}function at(s){const t=Math.min(...s.map(e=>e.length));return as(t).map(e=>s.map(n=>n[e]))}function Et(s,t=1e-9){return s<0?s+2*Math.PI:s>=2*Math.PI?s%(2*Math.PI):s>2*Math.PI-t?0:s}function Ht(s,t,e,n=1e-9){let r=t-s;return e&&(r=-r),r<0&&(r+=2*Math.PI),r>2*Math.PI-n?0:r}const Wt=(s,t,e)=>{const n=dt(s.V,t.V),r=ct(s.V),o=ct(t.V),i=e?e*e:s.precision*t.precision;if(n*n<r*o*i)return"parallel";const h=q(t.firstPoint,s.firstPoint),l=dt(h,t.V)/n,a=dt(h,s.V)/n;return{intersectionParam1:l,intersectionParam2:a}};function Ue(s,t,e=!1,n){const r=Wt(s,t,n);if(r==="parallel"){if(!e)return null;if(s.isSame(t))return s;const h=mt([t.isOnSegment(s.firstPoint)?s.firstPoint:null,t.isOnSegment(s.lastPoint)?s.lastPoint:null,s.isOnSegment(t.firstPoint)?t.firstPoint:null,s.isOnSegment(t.lastPoint)?t.lastPoint:null].filter(l=>l!==null)).sort((l,a)=>l[0]-a[0]);if(h.length===0||h.length===1)return null;if(h.length===2)return new B(h[0],h[1]);throw console.error(h),new Error("Unexpected number of points while intersecting parallel lines")}const{intersectionParam1:o,intersectionParam2:i}=r;return!s.isValidParameter(o)||!t.isValidParameter(i)?null:s.paramPoint(o)}const Jt=(s,t)=>{const e=q(s,t);return ze(e)};class T extends Nt{constructor(t,e,n,r=!1,{ignoreChecks:o=!1}={}){if(super(t,e),this.segmentType="ARC",this._coefficients=null,this._angularLength=null,this._radius=null,this._firstAngle=null,this._lastAngle=null,this._boundingBox=null,this.center=n,this.clockwise=r,!o){if(y(t,e))throw new Error("Invalid arc, cannot be a full circle");if(Math.abs(this.radius-z(this.lastPoint,this.center))>this.precision)throw new Error(`Invalid arc, radius does not match between ${H(t)} and ${H(e)}} (center ${H(n)})`)}}get info(){return`ARC(${H(this.firstPoint)}, ${H(this.lastPoint)}, ${H(this.center)}, ${this.clockwise?"CW":"CCW"})`}get coefficients(){if(this._coefficients===null){const[t,e]=this.center,n=this.radius*this.radius;this._coefficients={x2:1/n,xy:0,y2:1/n,x:-(2*t)/n,y:-(2*e)/n,c:(t*t+e*e-n)/n}}return this._coefficients}isValidParameter(t){return 1-t>=-this.precision&&t>=-this.precision}angleToParam(t){return Ht(this.firstAngle,Et(t),this.clockwise)/this.angularLength}get angularLength(){return this._angularLength||(this._angularLength=Ht(this.firstAngle,this.lastAngle,this.clockwise)),this._angularLength}paramPoint(t){return V(this.center,gt(this.radius,this.firstAngle+t*this.angularLength*(this.clockwise?-1:1)))}pointToParam(t){const[e,n]=Jt(t,this.center);if(Math.abs(e-this.radius)>this.precision)throw new Error(`Point ${H(t)} is not on segment ${this.repr}`);const r=this.angleToParam(n);if(!this.isValidParameter(r))throw new Error(`Point ${H(t)} is not on segment ${this.repr}`);return r}get radius(){return this._radius===null&&(this._radius=z(this.firstPoint,this.center)),this._radius}get firstAngle(){if(this._firstAngle===null){const[t,e]=q(this.firstPoint,this.center);this._firstAngle=Et(Math.atan2(e,t))}return this._firstAngle}get lastAngle(){if(this._lastAngle===null){const[t,e]=q(this.lastPoint,this.center);this._lastAngle=Et(Math.atan2(e,t))}return this._lastAngle}get length(){return this.radius*this.angularLength}get squareLength(){return this.length*this.length}get midPoint(){return this.paramPoint(.5)}isSame(t){return!(t instanceof T)||!y(this.center,t.center)?!1:y(this.firstPoint,t.firstPoint)&&y(this.lastPoint,t.lastPoint)&&this.clockwise===t.clockwise||y(this.lastPoint,t.firstPoint)&&y(this.firstPoint,t.lastPoint)&&this.clockwise===!t.clockwise}clone(){return new T(this.firstPoint,this.lastPoint,this.center,this.clockwise)}reverse(){return new T(this.lastPoint,this.firstPoint,this.center,!this.clockwise)}get boundingBox(){if(this._boundingBox===null){const t=this.radius+this.precision,e=n=>this.isValidParameter(this.angleToParam(n));this._boundingBox=new qt(e(Math.PI)?this.center[0]-t:Math.min(this.firstPoint[0],this.lastPoint[0])-this.precision,e(Math.PI*1.5)?this.center[1]-t:Math.min(this.firstPoint[1],this.lastPoint[1])-this.precision,e(0)?this.center[0]+t:Math.max(this.firstPoint[0],this.lastPoint[0])+this.precision,e(Math.PI/2)?this.center[1]+t:Math.max(this.firstPoint[1],this.lastPoint[1])+this.precision)}return this._boundingBox}distanceFrom(t){const[e,n]=Jt(t,this.center);return this.isValidParameter(this.angleToParam(n))?Math.abs(e-this.radius):Math.sqrt(Math.min(vt(t,this.firstPoint),vt(t,this.lastPoint)))}isOnSegment(t){if(y(t,this.firstPoint)||y(t,this.lastPoint))return!0;const[e,n]=Jt(t,this.center);if(Math.abs(e-this.radius)>this.precision)return!1;const r=this.angleToParam(n);return this.isValidParameter(r)}gradientAt(t){const e=this.firstAngle+t*this.angularLength*(this.clockwise?-1:1),n=this.radius*this.angularLength,r=-n*Math.sin(e),o=n*Math.cos(e);return this.clockwise?[-r,-o]:[r,o]}tangentAt(t){const[e,n]=Jt(t,this.center);if(Math.abs(e-this.radius)>this.precision)throw new Error("Point is not on the arc");const r=this.angleToParam(n);if(!this.isValidParameter(r))throw new Error("Point is not on the arc");const o=gt(1,n);return(this.clockwise?Ot:G)(J(o))}get tangentAtFirstPoint(){const t=gt(1,this.firstAngle);return(this.clockwise?Ot:G)(J(t))}get tangentAtLastPoint(){const t=gt(1,this.lastAngle);return(this.clockwise?Ot:G)(J(t))}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=[0,1,...e.map(i=>this.pointToParam(i))],r=new Map(at([n,[this.firstPoint,this.lastPoint,...e]]));n.sort((i,h)=>i-h);let o=null;return n.flatMap((i,h)=>{if(h===n.length-1)return[];const l=n[h+1];if(l-i<this.precision)return o===null&&(o=i),[];const a=o===null?i:o,c=new T(r.get(a)||this.paramPoint(a),r.get(l)||this.paramPoint(l),this.center,this.clockwise);return o=null,c})}transform(t){return new T(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.center),t.keepsOrientation()?this.clockwise:!this.clockwise)}}function ls(s,t,e){const n=new B(t,s),r=new B(t,e),o=G(n.tangentAtFirstPoint),i=G(r.tangentAtLastPoint),h=Wt({firstPoint:n.midPoint,V:o,precision:1e-9},{firstPoint:r.midPoint,V:i,precision:1e-9});if(h==="parallel")throw new Error("Cannot create an arc from three colinear points");const l=dt(q(s,t),q(e,t))>0;return new T(s,e,V(n.midPoint,W(o,h.intersectionParam1)),l,{ignoreChecks:!0})}function Ye(s,t,e){const n=new B(t,s),r=G(n.tangentAtFirstPoint),o=Wt({firstPoint:n.midPoint,V:r,precision:1e-9},{firstPoint:s,V:G(e),precision:1e-9});if(o==="parallel")throw new Error("Cannot create an arc from three colinear points");const i=V(n.midPoint,W(r,o.intersectionParam1)),h=dt(q(i,s),q(i,V(s,e)))<0;return new T(s,t,i,h,{ignoreChecks:!0})}const De=1e-21,Zt=1.618034;function Xe(s,t=0,e=1,n=110,r=1e3){let o,i,h,l,a,c,u,f,p,g,w,P,m;for(i=s(t),h=s(e),i<h&&([t,e]=[e,t],[i,h]=[h,i]),m=e+Zt*(e-t),l=s(m),a=3,u=0;l<h;){if(f=(e-t)*(h-l),p=(e-m)*(h-i),g=p-f,Math.abs(g)<De?o=2*De:o=2*g,w=e-((e-m)*p-(e-t)*f)/o,P=e+n*(m-e),u>r)throw new Error("Too many iterations.");if(u+=1,(w-m)*(e-w)>0){if(c=s(w),a+=1,c<l)return t=e,e=w,i=h,h=c,[t,e,m,i,h,l,a];if(c>h)return m=w,l=c,[t,e,m,i,h,l,a];w=m+Zt*(m-e),c=s(w),a+=1}else(w-P)*(P-m)>=0?(w=P,c=s(w),a+=1):(w-P)*(m-w)>0?(c=s(w),a+=1,c<l&&(e=m,m=w,w=m+Zt*(m-e),h=l,l=c,c=s(w),a+=1)):(w=m+Zt*(m-e),c=s(w),a+=1);t=e,e=m,m=w,i=h,h=l,l=c}return[t,e,m,i,h,l,a]}const He=.381966,us=1e-11;class cs{constructor(t,e=148e-10,n=500){this.func=t,this.tol=e,this.maxiter=n,this.func=t,this.tol=e,this.maxiter=n,this.xmin=1/0,this.fval=1/0,this.iter=0,this.funcalls=0,this.brack=null}setBracket(t=null){this.brack=t}getBracketInfo(){let t,e,n,r,o,i,h;const l=this.func,a=this.brack;if(a===null)[o,i,h,t,e,n,r]=Xe(l);else if(a.length===2)[o,i,h,t,e,n,r]=Xe(l,a[0],a[1]);else if(a.length===3){if([o,i,h]=a,o>h&&([h,o]=[o,h]),!(o<i&&i<h))throw new Error("Not a bracketing interval.");if(t=l(o),e=l(i),n=l(h),!(e<t&&e<n))throw new Error("Not a bracketing interval.");r=3}else throw new Error("Bracketing interval must be length 2 or 3 sequence.");return[o,i,h,t,e,n,r]}optimize(){const t=this.func;let[e,n,r,,,,o]=this.getBracketInfo(),i=n,h=n,l=n,a=t(i),c=a,u=a,f,p;e<r?(f=e,p=r):(f=r,p=e);let g=0;o=1;let w=0,P=0,m;for(;w<this.maxiter;){const d=this.tol*Math.abs(i)+us,M=2*d,x=.5*(f+p);if(Math.abs(i-x)<M-.5*(p-f))break;if(Math.abs(g)<=d)i>=x?g=f-i:g=p-i,P=He*g;else{const k=(i-h)*(u-c);let A=(i-l)*(u-a),b=(i-l)*A-(i-h)*k;A=2*(A-k),A>0&&(b=-b),A=Math.abs(A);const I=g;g=P,b>A*(f-i)&&b<A*(p-i)&&Math.abs(b)<Math.abs(.5*A*I)?(P=b*1/A,m=i+P,(m-f<M||p-m<M)&&(x-i>=0?P=d:P=-d)):(i>=x?g=f-i:g=p-i,P=He*g)}Math.abs(P)<d?P>=0?m=i+d:m=i-d:m=i+P;const v=t(m);o+=1,v>u?(m<i?f=m:p=m,v<=a||h===i?(l=h,h=m,c=a,a=v):(v<=c||l===i||l===h)&&(l=m,c=v)):(m>=i?f=i:p=i,l=h,h=i,i=m,c=a,a=u,u=v),w+=1}this.xmin=i,this.fval=u,this.iter=w,this.funcalls=o}results(){return{argMin:this.xmin,fMin:this.fval,iterations:this.iter,funcCalls:this.funcalls}}run(){return this.optimize(),this.results()}}function We(s,t=1e-8,e=1e3){const n=new cs(s,t,e);return n.setBracket([0,1]),n.run()}const fs=Object.prototype.toString;function ot(s){const t=fs.call(s);return t.endsWith("Array]")&&!t.includes("Big")}function ms(s){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!ot(s))throw new TypeError("input must be an array");if(s.length===0)throw new TypeError("input must not be empty");var e=t.fromIndex,n=e===void 0?0:e,r=t.toIndex,o=r===void 0?s.length:r;if(n<0||n>=s.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=n||o>s.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var i=s[n],h=n+1;h<o;h++)s[h]>i&&(i=s[h]);return i}function gs(s){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!ot(s))throw new TypeError("input must be an array");if(s.length===0)throw new TypeError("input must not be empty");var e=t.fromIndex,n=e===void 0?0:e,r=t.toIndex,o=r===void 0?s.length:r;if(n<0||n>=s.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=n||o>s.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var i=s[n],h=n+1;h<o;h++)s[h]<i&&(i=s[h]);return i}function Je(s){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(ot(s)){if(s.length===0)throw new TypeError("input must not be empty")}else throw new TypeError("input must be an array");var e;if(t.output!==void 0){if(!ot(t.output))throw new TypeError("output option must be an array if specified");e=t.output}else e=new Array(s.length);var n=gs(s),r=ms(s);if(n===r)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var o=t.min,i=o===void 0?t.autoMinMax?n:0:o,h=t.max,l=h===void 0?t.autoMinMax?r:1:h;if(i>=l)throw new RangeError("min option must be smaller than max option");for(var a=(l-i)/(r-n),c=0;c<s.length;c++)e[c]=(s[c]-n)*a+i;return e}const Gt=" ".repeat(2),Ze=" ".repeat(4);function ps(){return Ge(this)}function Ge(s,t={}){const{maxRows:e=15,maxColumns:n=10,maxNumSize:r=8,padMinus:o="auto"}=t;return`${s.constructor.name} {
2
- ${Gt}[
3
- ${Ze}${ws(s,e,n,r,o)}
4
- ${Gt}]
5
- ${Gt}rows: ${s.rows}
6
- ${Gt}columns: ${s.columns}
7
- }`}function ws(s,t,e,n,r){const{rows:o,columns:i}=s,h=Math.min(o,t),l=Math.min(i,e),a=[];if(r==="auto"){r=!1;t:for(let c=0;c<h;c++)for(let u=0;u<l;u++)if(s.get(c,u)<0){r=!0;break t}}for(let c=0;c<h;c++){let u=[];for(let f=0;f<l;f++)u.push(ds(s.get(c,f),n,r));a.push(`${u.join(" ")}`)}return l!==i&&(a[a.length-1]+=` ... ${i-e} more columns`),h!==o&&a.push(`... ${o-t} more rows`),a.join(`
8
- ${Ze}`)}function ds(s,t,e){return(s>=0&&e?` ${Ke(s,t-1)}`:Ke(s,t)).padEnd(t)}function Ke(s,t){let e=s.toString();if(e.length<=t)return e;let n=s.toFixed(t);if(n.length>t&&(n=s.toFixed(Math.max(0,t-(n.length-t)))),n.length<=t&&!n.startsWith("0.000")&&!n.startsWith("-0.000"))return n;let r=s.toExponential(t);return r.length>t&&(r=s.toExponential(Math.max(0,t-(r.length-t)))),r.slice(0)}function Ps(s,t){s.prototype.add=function(e){return typeof e=="number"?this.addS(e):this.addM(e)},s.prototype.addS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)+e);return this},s.prototype.addM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)+e.get(n,r));return this},s.add=function(e,n){return new t(e).add(n)},s.prototype.sub=function(e){return typeof e=="number"?this.subS(e):this.subM(e)},s.prototype.subS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)-e);return this},s.prototype.subM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)-e.get(n,r));return this},s.sub=function(e,n){return new t(e).sub(n)},s.prototype.subtract=s.prototype.sub,s.prototype.subtractS=s.prototype.subS,s.prototype.subtractM=s.prototype.subM,s.subtract=s.sub,s.prototype.mul=function(e){return typeof e=="number"?this.mulS(e):this.mulM(e)},s.prototype.mulS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)*e);return this},s.prototype.mulM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)*e.get(n,r));return this},s.mul=function(e,n){return new t(e).mul(n)},s.prototype.multiply=s.prototype.mul,s.prototype.multiplyS=s.prototype.mulS,s.prototype.multiplyM=s.prototype.mulM,s.multiply=s.mul,s.prototype.div=function(e){return typeof e=="number"?this.divS(e):this.divM(e)},s.prototype.divS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)/e);return this},s.prototype.divM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)/e.get(n,r));return this},s.div=function(e,n){return new t(e).div(n)},s.prototype.divide=s.prototype.div,s.prototype.divideS=s.prototype.divS,s.prototype.divideM=s.prototype.divM,s.divide=s.div,s.prototype.mod=function(e){return typeof e=="number"?this.modS(e):this.modM(e)},s.prototype.modS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)%e);return this},s.prototype.modM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)%e.get(n,r));return this},s.mod=function(e,n){return new t(e).mod(n)},s.prototype.modulus=s.prototype.mod,s.prototype.modulusS=s.prototype.modS,s.prototype.modulusM=s.prototype.modM,s.modulus=s.mod,s.prototype.and=function(e){return typeof e=="number"?this.andS(e):this.andM(e)},s.prototype.andS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)&e);return this},s.prototype.andM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)&e.get(n,r));return this},s.and=function(e,n){return new t(e).and(n)},s.prototype.or=function(e){return typeof e=="number"?this.orS(e):this.orM(e)},s.prototype.orS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)|e);return this},s.prototype.orM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)|e.get(n,r));return this},s.or=function(e,n){return new t(e).or(n)},s.prototype.xor=function(e){return typeof e=="number"?this.xorS(e):this.xorM(e)},s.prototype.xorS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)^e);return this},s.prototype.xorM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)^e.get(n,r));return this},s.xor=function(e,n){return new t(e).xor(n)},s.prototype.leftShift=function(e){return typeof e=="number"?this.leftShiftS(e):this.leftShiftM(e)},s.prototype.leftShiftS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)<<e);return this},s.prototype.leftShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)<<e.get(n,r));return this},s.leftShift=function(e,n){return new t(e).leftShift(n)},s.prototype.signPropagatingRightShift=function(e){return typeof e=="number"?this.signPropagatingRightShiftS(e):this.signPropagatingRightShiftM(e)},s.prototype.signPropagatingRightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)>>e);return this},s.prototype.signPropagatingRightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)>>e.get(n,r));return this},s.signPropagatingRightShift=function(e,n){return new t(e).signPropagatingRightShift(n)},s.prototype.rightShift=function(e){return typeof e=="number"?this.rightShiftS(e):this.rightShiftM(e)},s.prototype.rightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)>>>e);return this},s.prototype.rightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,this.get(n,r)>>>e.get(n,r));return this},s.rightShift=function(e,n){return new t(e).rightShift(n)},s.prototype.zeroFillRightShift=s.prototype.rightShift,s.prototype.zeroFillRightShiftS=s.prototype.rightShiftS,s.prototype.zeroFillRightShiftM=s.prototype.rightShiftM,s.zeroFillRightShift=s.rightShift,s.prototype.not=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,~this.get(e,n));return this},s.not=function(e){return new t(e).not()},s.prototype.abs=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.abs(this.get(e,n)));return this},s.abs=function(e){return new t(e).abs()},s.prototype.acos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acos(this.get(e,n)));return this},s.acos=function(e){return new t(e).acos()},s.prototype.acosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acosh(this.get(e,n)));return this},s.acosh=function(e){return new t(e).acosh()},s.prototype.asin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asin(this.get(e,n)));return this},s.asin=function(e){return new t(e).asin()},s.prototype.asinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asinh(this.get(e,n)));return this},s.asinh=function(e){return new t(e).asinh()},s.prototype.atan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atan(this.get(e,n)));return this},s.atan=function(e){return new t(e).atan()},s.prototype.atanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atanh(this.get(e,n)));return this},s.atanh=function(e){return new t(e).atanh()},s.prototype.cbrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cbrt(this.get(e,n)));return this},s.cbrt=function(e){return new t(e).cbrt()},s.prototype.ceil=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.ceil(this.get(e,n)));return this},s.ceil=function(e){return new t(e).ceil()},s.prototype.clz32=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.clz32(this.get(e,n)));return this},s.clz32=function(e){return new t(e).clz32()},s.prototype.cos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cos(this.get(e,n)));return this},s.cos=function(e){return new t(e).cos()},s.prototype.cosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cosh(this.get(e,n)));return this},s.cosh=function(e){return new t(e).cosh()},s.prototype.exp=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.exp(this.get(e,n)));return this},s.exp=function(e){return new t(e).exp()},s.prototype.expm1=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.expm1(this.get(e,n)));return this},s.expm1=function(e){return new t(e).expm1()},s.prototype.floor=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.floor(this.get(e,n)));return this},s.floor=function(e){return new t(e).floor()},s.prototype.fround=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.fround(this.get(e,n)));return this},s.fround=function(e){return new t(e).fround()},s.prototype.log=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log(this.get(e,n)));return this},s.log=function(e){return new t(e).log()},s.prototype.log1p=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log1p(this.get(e,n)));return this},s.log1p=function(e){return new t(e).log1p()},s.prototype.log10=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log10(this.get(e,n)));return this},s.log10=function(e){return new t(e).log10()},s.prototype.log2=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log2(this.get(e,n)));return this},s.log2=function(e){return new t(e).log2()},s.prototype.round=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.round(this.get(e,n)));return this},s.round=function(e){return new t(e).round()},s.prototype.sign=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sign(this.get(e,n)));return this},s.sign=function(e){return new t(e).sign()},s.prototype.sin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sin(this.get(e,n)));return this},s.sin=function(e){return new t(e).sin()},s.prototype.sinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sinh(this.get(e,n)));return this},s.sinh=function(e){return new t(e).sinh()},s.prototype.sqrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sqrt(this.get(e,n)));return this},s.sqrt=function(e){return new t(e).sqrt()},s.prototype.tan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tan(this.get(e,n)));return this},s.tan=function(e){return new t(e).tan()},s.prototype.tanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tanh(this.get(e,n)));return this},s.tanh=function(e){return new t(e).tanh()},s.prototype.trunc=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.trunc(this.get(e,n)));return this},s.trunc=function(e){return new t(e).trunc()},s.pow=function(e,n){return new t(e).pow(n)},s.prototype.pow=function(e){return typeof e=="number"?this.powS(e):this.powM(e)},s.prototype.powS=function(e){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,Math.pow(this.get(n,r),e));return this},s.prototype.powM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.set(n,r,Math.pow(this.get(n,r),e.get(n,r)));return this}}function lt(s,t,e){let n=e?s.rows:s.rows-1;if(t<0||t>n)throw new RangeError("Row index out of range")}function ut(s,t,e){let n=e?s.columns:s.columns-1;if(t<0||t>n)throw new RangeError("Column index out of range")}function Tt(s,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==s.columns)throw new RangeError("vector size must be the same as the number of columns");return t}function Rt(s,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==s.rows)throw new RangeError("vector size must be the same as the number of rows");return t}function Ms(s,t){if(!ot(t))throw new TypeError("row indices must be an array");for(let e=0;e<t.length;e++)if(t[e]<0||t[e]>=s.rows)throw new RangeError("row indices are out of range")}function ys(s,t){if(!ot(t))throw new TypeError("column indices must be an array");for(let e=0;e<t.length;e++)if(t[e]<0||t[e]>=s.columns)throw new RangeError("column indices are out of range")}function Qe(s,t,e,n,r){if(arguments.length!==5)throw new RangeError("expected 4 arguments");if(Qt("startRow",t),Qt("endRow",e),Qt("startColumn",n),Qt("endColumn",r),t>e||n>r||t<0||t>=s.rows||e<0||e>=s.rows||n<0||n>=s.columns||r<0||r>=s.columns)throw new RangeError("Submatrix indices are out of range")}function Kt(s,t=0){let e=[];for(let n=0;n<s;n++)e.push(t);return e}function Qt(s,t){if(typeof t!="number")throw new TypeError(`${s} must be a number`)}function Ft(s){if(s.isEmpty())throw new Error("Empty matrix has no elements to index")}function bs(s){let t=Kt(s.rows);for(let e=0;e<s.rows;++e)for(let n=0;n<s.columns;++n)t[e]+=s.get(e,n);return t}function xs(s){let t=Kt(s.columns);for(let e=0;e<s.rows;++e)for(let n=0;n<s.columns;++n)t[n]+=s.get(e,n);return t}function vs(s){let t=0;for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)t+=s.get(e,n);return t}function As(s){let t=Kt(s.rows,1);for(let e=0;e<s.rows;++e)for(let n=0;n<s.columns;++n)t[e]*=s.get(e,n);return t}function Es(s){let t=Kt(s.columns,1);for(let e=0;e<s.rows;++e)for(let n=0;n<s.columns;++n)t[n]*=s.get(e,n);return t}function Ss(s){let t=1;for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)t*=s.get(e,n);return t}function ks(s,t,e){const n=s.rows,r=s.columns,o=[];for(let i=0;i<n;i++){let h=0,l=0,a=0;for(let c=0;c<r;c++)a=s.get(i,c)-e[i],h+=a,l+=a*a;t?o.push((l-h*h/r)/(r-1)):o.push((l-h*h/r)/r)}return o}function Cs(s,t,e){const n=s.rows,r=s.columns,o=[];for(let i=0;i<r;i++){let h=0,l=0,a=0;for(let c=0;c<n;c++)a=s.get(c,i)-e[i],h+=a,l+=a*a;t?o.push((l-h*h/n)/(n-1)):o.push((l-h*h/n)/n)}return o}function Ts(s,t,e){const n=s.rows,r=s.columns,o=n*r;let i=0,h=0,l=0;for(let a=0;a<n;a++)for(let c=0;c<r;c++)l=s.get(a,c)-e,i+=l,h+=l*l;return t?(h-i*i/o)/(o-1):(h-i*i/o)/o}function Rs(s,t){for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)s.set(e,n,s.get(e,n)-t[e])}function Fs(s,t){for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)s.set(e,n,s.get(e,n)-t[n])}function Is(s,t){for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)s.set(e,n,s.get(e,n)-t)}function $s(s){const t=[];for(let e=0;e<s.rows;e++){let n=0;for(let r=0;r<s.columns;r++)n+=Math.pow(s.get(e,r),2)/(s.columns-1);t.push(Math.sqrt(n))}return t}function _s(s,t){for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)s.set(e,n,s.get(e,n)/t[e])}function Ls(s){const t=[];for(let e=0;e<s.columns;e++){let n=0;for(let r=0;r<s.rows;r++)n+=Math.pow(s.get(r,e),2)/(s.rows-1);t.push(Math.sqrt(n))}return t}function Bs(s,t){for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)s.set(e,n,s.get(e,n)/t[n])}function js(s){const t=s.size-1;let e=0;for(let n=0;n<s.columns;n++)for(let r=0;r<s.rows;r++)e+=Math.pow(s.get(r,n),2)/t;return Math.sqrt(e)}function qs(s,t){for(let e=0;e<s.rows;e++)for(let n=0;n<s.columns;n++)s.set(e,n,s.get(e,n)/t)}class R{static from1DArray(t,e,n){if(t*e!==n.length)throw new RangeError("data length does not match given dimensions");let r=new F(t,e);for(let o=0;o<t;o++)for(let i=0;i<e;i++)r.set(o,i,n[o*e+i]);return r}static rowVector(t){let e=new F(1,t.length);for(let n=0;n<t.length;n++)e.set(0,n,t[n]);return e}static columnVector(t){let e=new F(t.length,1);for(let n=0;n<t.length;n++)e.set(n,0,t[n]);return e}static zeros(t,e){return new F(t,e)}static ones(t,e){return new F(t,e).fill(1)}static rand(t,e,n={}){if(typeof n!="object")throw new TypeError("options must be an object");const{random:r=Math.random}=n;let o=new F(t,e);for(let i=0;i<t;i++)for(let h=0;h<e;h++)o.set(i,h,r());return o}static randInt(t,e,n={}){if(typeof n!="object")throw new TypeError("options must be an object");const{min:r=0,max:o=1e3,random:i=Math.random}=n;if(!Number.isInteger(r))throw new TypeError("min must be an integer");if(!Number.isInteger(o))throw new TypeError("max must be an integer");if(r>=o)throw new RangeError("min must be smaller than max");let h=o-r,l=new F(t,e);for(let a=0;a<t;a++)for(let c=0;c<e;c++){let u=r+Math.round(i()*h);l.set(a,c,u)}return l}static eye(t,e,n){e===void 0&&(e=t),n===void 0&&(n=1);let r=Math.min(t,e),o=this.zeros(t,e);for(let i=0;i<r;i++)o.set(i,i,n);return o}static diag(t,e,n){let r=t.length;e===void 0&&(e=r),n===void 0&&(n=e);let o=Math.min(r,e,n),i=this.zeros(e,n);for(let h=0;h<o;h++)i.set(h,h,t[h]);return i}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,r=t.columns,o=new F(n,r);for(let i=0;i<n;i++)for(let h=0;h<r;h++)o.set(i,h,Math.min(t.get(i,h),e.get(i,h)));return o}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,r=t.columns,o=new this(n,r);for(let i=0;i<n;i++)for(let h=0;h<r;h++)o.set(i,h,Math.max(t.get(i,h),e.get(i,h)));return o}static checkMatrix(t){return R.isMatrix(t)?t:new F(t)}static isMatrix(t){return t!=null&&t.klass==="Matrix"}get size(){return this.rows*this.columns}apply(t){if(typeof t!="function")throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.call(this,e,n);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.push(this.get(e,n));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let n=0;n<this.columns;n++)t[e].push(this.get(e,n))}return t}toJSON(){return this.to2DArray()}isRowVector(){return this.rows===1}isColumnVector(){return this.columns===1}isVector(){return this.rows===1||this.columns===1}isSquare(){return this.rows===this.columns}isEmpty(){return this.rows===0||this.columns===0}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,n=-1,r=!0,o=!1;for(;t<this.rows&&r;){for(e=0,o=!1;e<this.columns&&o===!1;)this.get(t,e)===0?e++:this.get(t,e)===1&&e>n?(o=!0,n=e):(r=!1,o=!0);t++}return r}isReducedEchelonForm(){let t=0,e=0,n=-1,r=!0,o=!1;for(;t<this.rows&&r;){for(e=0,o=!1;e<this.columns&&o===!1;)this.get(t,e)===0?e++:this.get(t,e)===1&&e>n?(o=!0,n=e):(r=!1,o=!0);for(let i=e+1;i<this.rows;i++)this.get(t,i)!==0&&(r=!1);t++}return r}echelonForm(){let t=this.clone(),e=0,n=0;for(;e<t.rows&&n<t.columns;){let r=e;for(let o=e;o<t.rows;o++)t.get(o,n)>t.get(r,n)&&(r=o);if(t.get(r,n)===0)n++;else{t.swapRows(e,r);let o=t.get(e,n);for(let i=n;i<t.columns;i++)t.set(e,i,t.get(e,i)/o);for(let i=e+1;i<t.rows;i++){let h=t.get(i,n)/t.get(e,n);t.set(i,n,0);for(let l=n+1;l<t.columns;l++)t.set(i,l,t.get(i,l)-t.get(e,l)*h)}e++,n++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,n=t.rows,r=n-1;for(;r>=0;)if(t.maxRow(r)===0)r--;else{let o=0,i=!1;for(;o<n&&i===!1;)t.get(r,o)===1?i=!0:o++;for(let h=0;h<r;h++){let l=t.get(h,o);for(let a=o;a<e;a++){let c=t.get(h,a)-l*t.get(r,a);t.set(h,a,c)}}r--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if(typeof t!="object")throw new TypeError("options must be an object");const{rows:e=1,columns:n=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(n)||n<=0)throw new TypeError("columns must be a positive integer");let r=new F(this.rows*e,this.columns*n);for(let o=0;o<e;o++)for(let i=0;i<n;i++)r.setSubMatrix(this,this.rows*o,this.columns*i);return r}fill(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,t);return this}neg(){return this.mulS(-1)}getRow(t){lt(this,t);let e=[];for(let n=0;n<this.columns;n++)e.push(this.get(t,n));return e}getRowVector(t){return F.rowVector(this.getRow(t))}setRow(t,e){lt(this,t),e=Tt(this,e);for(let n=0;n<this.columns;n++)this.set(t,n,e[n]);return this}swapRows(t,e){lt(this,t),lt(this,e);for(let n=0;n<this.columns;n++){let r=this.get(t,n);this.set(t,n,this.get(e,n)),this.set(e,n,r)}return this}getColumn(t){ut(this,t);let e=[];for(let n=0;n<this.rows;n++)e.push(this.get(n,t));return e}getColumnVector(t){return F.columnVector(this.getColumn(t))}setColumn(t,e){ut(this,t),e=Rt(this,e);for(let n=0;n<this.rows;n++)this.set(n,t,e[n]);return this}swapColumns(t,e){ut(this,t),ut(this,e);for(let n=0;n<this.rows;n++){let r=this.get(n,t);this.set(n,t,this.get(n,e)),this.set(n,e,r)}return this}addRowVector(t){t=Tt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[n]);return this}subRowVector(t){t=Tt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[n]);return this}mulRowVector(t){t=Tt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[n]);return this}divRowVector(t){t=Tt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[n]);return this}addColumnVector(t){t=Rt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[e]);return this}subColumnVector(t){t=Rt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[e]);return this}mulColumnVector(t){t=Rt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[e]);return this}divColumnVector(t){t=Rt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[e]);return this}mulRow(t,e){lt(this,t);for(let n=0;n<this.columns;n++)this.set(t,n,this.get(t,n)*e);return this}mulColumn(t,e){ut(this,t);for(let n=0;n<this.rows;n++)this.set(n,t,this.get(n,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const e=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)>e[n]&&(e[n]=this.get(n,r));return e}case"column":{const e=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)>e[r]&&(e[r]=this.get(n,r));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)>e&&(e=this.get(n,r));return e}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){Ft(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)>t&&(t=this.get(n,r),e[0]=n,e[1]=r);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const e=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)<e[n]&&(e[n]=this.get(n,r));return e}case"column":{const e=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)<e[r]&&(e[r]=this.get(n,r));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)<e&&(e=this.get(n,r));return e}default:throw new Error(`invalid option: ${t}`)}}minIndex(){Ft(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)<t&&(t=this.get(n,r),e[0]=n,e[1]=r);return e}maxRow(t){if(lt(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n));return e}maxRowIndex(t){lt(this,t),Ft(this);let e=this.get(t,0),n=[t,0];for(let r=1;r<this.columns;r++)this.get(t,r)>e&&(e=this.get(t,r),n[1]=r);return n}minRow(t){if(lt(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n));return e}minRowIndex(t){lt(this,t),Ft(this);let e=this.get(t,0),n=[t,0];for(let r=1;r<this.columns;r++)this.get(t,r)<e&&(e=this.get(t,r),n[1]=r);return n}maxColumn(t){if(ut(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t));return e}maxColumnIndex(t){ut(this,t),Ft(this);let e=this.get(0,t),n=[0,t];for(let r=1;r<this.rows;r++)this.get(r,t)>e&&(e=this.get(r,t),n[0]=r);return n}minColumn(t){if(ut(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t));return e}minColumnIndex(t){ut(this,t),Ft(this);let e=this.get(0,t),n=[0,t];for(let r=1;r<this.rows;r++)this.get(r,t)<e&&(e=this.get(r,t),n[0]=r);return n}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let n=0;n<t;n++)e.push(this.get(n,n));return e}norm(t="frobenius"){let e=0;if(t==="max")return this.max();if(t==="frobenius"){for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)e=e+this.get(n,r)*this.get(n,r);return Math.sqrt(e)}else throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t+=this.get(e,n),this.set(e,n,t);return this}dot(t){R.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}mmul(t){t=F.checkMatrix(t);let e=this.rows,n=this.columns,r=t.columns,o=new F(e,r),i=new Float64Array(n);for(let h=0;h<r;h++){for(let l=0;l<n;l++)i[l]=t.get(l,h);for(let l=0;l<e;l++){let a=0;for(let c=0;c<n;c++)a+=this.get(l,c)*i[c];o.set(l,h,a)}}return o}strassen2x2(t){t=F.checkMatrix(t);let e=new F(2,2);const n=this.get(0,0),r=t.get(0,0),o=this.get(0,1),i=t.get(0,1),h=this.get(1,0),l=t.get(1,0),a=this.get(1,1),c=t.get(1,1),u=(n+a)*(r+c),f=(h+a)*r,p=n*(i-c),g=a*(l-r),w=(n+o)*c,P=(h-n)*(r+i),m=(o-a)*(l+c),d=u+g-w+m,M=p+w,x=f+g,v=u-f+p+P;return e.set(0,0,d),e.set(0,1,M),e.set(1,0,x),e.set(1,1,v),e}strassen3x3(t){t=F.checkMatrix(t);let e=new F(3,3);const n=this.get(0,0),r=this.get(0,1),o=this.get(0,2),i=this.get(1,0),h=this.get(1,1),l=this.get(1,2),a=this.get(2,0),c=this.get(2,1),u=this.get(2,2),f=t.get(0,0),p=t.get(0,1),g=t.get(0,2),w=t.get(1,0),P=t.get(1,1),m=t.get(1,2),d=t.get(2,0),M=t.get(2,1),x=t.get(2,2),v=(n+r+o-i-h-c-u)*P,k=(n-i)*(-p+P),A=h*(-f+p+w-P-m-d+x),b=(-n+i+h)*(f-p+P),I=(i+h)*(-f+p),O=n*f,D=(-n+a+c)*(f-g+m),nt=(-n+a)*(g-m),L=(a+c)*(-f+g),C=(n+r+o-h-l-a-c)*m,S=c*(-f+g+w-P-m-d+M),E=(-o+c+u)*(P+d-M),yt=(o-u)*(P-M),_=o*d,j=(c+u)*(-d+M),$=(-o+h+l)*(m+d-x),U=(o-l)*(m-x),X=(h+l)*(-d+x),Y=r*w,st=l*M,pt=i*g,ft=a*p,bt=u*x,je=O+_+Y,qe=v+b+I+O+E+_+j,Oe=O+D+L+C+_+$+X,Ne=k+A+b+O+_+$+U,ae=k+b+I+O+st,le=_+$+U+X+pt,ue=O+D+nt+S+E+yt+_,ce=E+yt+_+j+ft,fe=O+D+nt+L+bt;return e.set(0,0,je),e.set(0,1,qe),e.set(0,2,Oe),e.set(1,0,Ne),e.set(1,1,ae),e.set(1,2,le),e.set(2,0,ue),e.set(2,1,ce),e.set(2,2,fe),e}mmulStrassen(t){t=F.checkMatrix(t);let e=this.clone(),n=e.rows,r=e.columns,o=t.rows,i=t.columns;r!==o&&console.warn(`Multiplying ${n} x ${r} and ${o} x ${i} matrix: dimensions do not match.`);function h(u,f,p){let g=u.rows,w=u.columns;if(g===f&&w===p)return u;{let P=R.zeros(f,p);return P=P.setSubMatrix(u,0,0),P}}let l=Math.max(n,o),a=Math.max(r,i);e=h(e,l,a),t=h(t,l,a);function c(u,f,p,g){if(p<=512||g<=512)return u.mmul(f);p%2===1&&g%2===1?(u=h(u,p+1,g+1),f=h(f,p+1,g+1)):p%2===1?(u=h(u,p+1,g),f=h(f,p+1,g)):g%2===1&&(u=h(u,p,g+1),f=h(f,p,g+1));let w=parseInt(u.rows/2,10),P=parseInt(u.columns/2,10),m=u.subMatrix(0,w-1,0,P-1),d=f.subMatrix(0,w-1,0,P-1),M=u.subMatrix(0,w-1,P,u.columns-1),x=f.subMatrix(0,w-1,P,f.columns-1),v=u.subMatrix(w,u.rows-1,0,P-1),k=f.subMatrix(w,f.rows-1,0,P-1),A=u.subMatrix(w,u.rows-1,P,u.columns-1),b=f.subMatrix(w,f.rows-1,P,f.columns-1),I=c(R.add(m,A),R.add(d,b),w,P),O=c(R.add(v,A),d,w,P),D=c(m,R.sub(x,b),w,P),nt=c(A,R.sub(k,d),w,P),L=c(R.add(m,M),b,w,P),C=c(R.sub(v,m),R.add(d,x),w,P),S=c(R.sub(M,A),R.add(k,b),w,P),E=R.add(I,nt);E.sub(L),E.add(S);let yt=R.add(D,L),_=R.add(O,nt),j=R.sub(I,O);j.add(D),j.add(C);let $=R.zeros(2*E.rows,2*E.columns);return $=$.setSubMatrix(E,0,0),$=$.setSubMatrix(yt,E.rows,0),$=$.setSubMatrix(_,0,E.columns),$=$.setSubMatrix(j,E.rows,E.columns),$.subMatrix(0,p-1,0,g-1)}return c(e,t,l,a)}scaleRows(t={}){if(typeof t!="object")throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let r=new F(this.rows,this.columns);for(let o=0;o<this.rows;o++){const i=this.getRow(o);i.length>0&&Je(i,{min:e,max:n,output:i}),r.setRow(o,i)}return r}scaleColumns(t={}){if(typeof t!="object")throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let r=new F(this.rows,this.columns);for(let o=0;o<this.columns;o++){const i=this.getColumn(o);i.length&&Je(i,{min:e,max:n,output:i}),r.setColumn(o,i)}return r}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let n=0;n<t;n++){let r=this.get(e,n),o=this.get(e,this.columns-1-n);this.set(e,n,o),this.set(e,this.columns-1-n,r)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let n=0;n<t;n++){let r=this.get(n,e),o=this.get(this.rows-1-n,e);this.set(n,e,o),this.set(this.rows-1-n,e,r)}return this}kroneckerProduct(t){t=F.checkMatrix(t);let e=this.rows,n=this.columns,r=t.rows,o=t.columns,i=new F(e*r,n*o);for(let h=0;h<e;h++)for(let l=0;l<n;l++)for(let a=0;a<r;a++)for(let c=0;c<o;c++)i.set(r*h+a,o*l+c,this.get(h,l)*t.get(a,c));return i}kroneckerSum(t){if(t=F.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,n=t.rows,r=this.kroneckerProduct(F.eye(n,n)),o=F.eye(e,e).kroneckerProduct(t);return r.add(o)}transpose(){let t=new F(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(n,e,this.get(e,n));return t}sortRows(t=tn){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=tn){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,n,r){Qe(this,t,e,n,r);let o=new F(e-t+1,r-n+1);for(let i=t;i<=e;i++)for(let h=n;h<=r;h++)o.set(i-t,h-n,this.get(i,h));return o}subMatrixRow(t,e,n){if(e===void 0&&(e=0),n===void 0&&(n=this.columns-1),e>n||e<0||e>=this.columns||n<0||n>=this.columns)throw new RangeError("Argument out of range");let r=new F(t.length,n-e+1);for(let o=0;o<t.length;o++)for(let i=e;i<=n;i++){if(t[o]<0||t[o]>=this.rows)throw new RangeError(`Row index out of range: ${t[o]}`);r.set(o,i-e,this.get(t[o],i))}return r}subMatrixColumn(t,e,n){if(e===void 0&&(e=0),n===void 0&&(n=this.rows-1),e>n||e<0||e>=this.rows||n<0||n>=this.rows)throw new RangeError("Argument out of range");let r=new F(n-e+1,t.length);for(let o=0;o<t.length;o++)for(let i=e;i<=n;i++){if(t[o]<0||t[o]>=this.columns)throw new RangeError(`Column index out of range: ${t[o]}`);r.set(i-e,o,this.get(i,t[o]))}return r}setSubMatrix(t,e,n){if(t=F.checkMatrix(t),t.isEmpty())return this;let r=e+t.rows-1,o=n+t.columns-1;Qe(this,e,r,n,o);for(let i=0;i<t.rows;i++)for(let h=0;h<t.columns;h++)this.set(e+i,n+h,t.get(i,h));return this}selection(t,e){Ms(this,t),ys(this,e);let n=new F(t.length,e.length);for(let r=0;r<t.length;r++){let o=t[r];for(let i=0;i<e.length;i++){let h=e[i];n.set(r,i,this.get(o,h))}}return n}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let n=0;n<t;n++)e+=this.get(n,n);return e}clone(){let t=new F(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(e,n,this.get(e,n));return t}sum(t){switch(t){case"row":return bs(this);case"column":return xs(this);case void 0:return vs(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return As(this);case"column":return Es(this);case void 0:return Ss(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":{for(let n=0;n<this.rows;n++)e[n]/=this.columns;return e}case"column":{for(let n=0;n<this.columns;n++)e[n]/=this.rows;return e}case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if(typeof t=="object"&&(e=t,t=void 0),typeof e!="object")throw new TypeError("options must be an object");const{unbiased:n=!0,mean:r=this.mean(t)}=e;if(typeof n!="boolean")throw new TypeError("unbiased must be a boolean");switch(t){case"row":{if(!ot(r))throw new TypeError("mean must be an array");return ks(this,n,r)}case"column":{if(!ot(r))throw new TypeError("mean must be an array");return Cs(this,n,r)}case void 0:{if(typeof r!="number")throw new TypeError("mean must be a number");return Ts(this,n,r)}default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){typeof t=="object"&&(e=t,t=void 0);const n=this.variance(t,e);if(t===void 0)return Math.sqrt(n);for(let r=0;r<n.length;r++)n[r]=Math.sqrt(n[r]);return n}center(t,e={}){if(typeof t=="object"&&(e=t,t=void 0),typeof e!="object")throw new TypeError("options must be an object");const{center:n=this.mean(t)}=e;switch(t){case"row":{if(!ot(n))throw new TypeError("center must be an array");return Rs(this,n),this}case"column":{if(!ot(n))throw new TypeError("center must be an array");return Fs(this,n),this}case void 0:{if(typeof n!="number")throw new TypeError("center must be a number");return Is(this,n),this}default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if(typeof t=="object"&&(e=t,t=void 0),typeof e!="object")throw new TypeError("options must be an object");let n=e.scale;switch(t){case"row":{if(n===void 0)n=$s(this);else if(!ot(n))throw new TypeError("scale must be an array");return _s(this,n),this}case"column":{if(n===void 0)n=Ls(this);else if(!ot(n))throw new TypeError("scale must be an array");return Bs(this,n),this}case void 0:{if(n===void 0)n=js(this);else if(typeof n!="number")throw new TypeError("scale must be a number");return qs(this,n),this}default:throw new Error(`invalid option: ${t}`)}}toString(t){return Ge(this,t)}}R.prototype.klass="Matrix",typeof Symbol<"u"&&(R.prototype[Symbol.for("nodejs.util.inspect.custom")]=ps);function tn(s,t){return s-t}function Os(s){return s.every(t=>typeof t=="number")}R.random=R.rand,R.randomInt=R.randInt,R.diagonal=R.diag,R.prototype.diagonal=R.prototype.diag,R.identity=R.eye,R.prototype.negate=R.prototype.neg,R.prototype.tensorProduct=R.prototype.kroneckerProduct;let F=class ns extends R{constructor(t,e){if(super(),ns.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0)if(this.data=[],Number.isInteger(e)&&e>=0)for(let n=0;n<t;n++)this.data.push(new Float64Array(e));else throw new TypeError("nColumns must be a positive integer");else if(ot(t)){const n=t;if(t=n.length,e=t?n[0].length:0,typeof e!="number")throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let r=0;r<t;r++){if(n[r].length!==e)throw new RangeError("Inconsistent array dimensions");if(!Os(n[r]))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(n[r]))}}else throw new TypeError("First argument must be a positive number or an array");this.rows=t,this.columns=e}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}removeRow(t){return lt(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return e===void 0&&(e=t,t=this.rows),lt(this,t,!0),e=Float64Array.from(Tt(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){ut(this,t);for(let e=0;e<this.rows;e++){const n=new Float64Array(this.columns-1);for(let r=0;r<t;r++)n[r]=this.data[e][r];for(let r=t+1;r<this.columns;r++)n[r-1]=this.data[e][r];this.data[e]=n}return this.columns-=1,this}addColumn(t,e){typeof e>"u"&&(e=t,t=this.columns),ut(this,t,!0),e=Rt(this,e);for(let n=0;n<this.rows;n++){const r=new Float64Array(this.columns+1);let o=0;for(;o<t;o++)r[o]=this.data[n][o];for(r[o++]=e[n];o<this.columns+1;o++)r[o]=this.data[n][o-1];this.data[n]=r}return this.columns+=1,this}};Ps(R,F);class Ns extends R{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}}function en(s,t){let e=0;return Math.abs(s)>Math.abs(t)?(e=t/s,Math.abs(s)*Math.sqrt(1+e*e)):t!==0?(e=s/t,Math.abs(t)*Math.sqrt(1+e*e)):0}class Vs{constructor(t,e={}){const{assumeSymmetric:n=!1}=e;if(t=Ns.checkMatrix(t),!t.isSquare())throw new Error("Matrix is not a square matrix");if(t.isEmpty())throw new Error("Matrix must be non-empty");let r=t.columns,o=new F(r,r),i=new Float64Array(r),h=new Float64Array(r),l=t,a,c,u=!1;if(n?u=!0:u=t.isSymmetric(),u){for(a=0;a<r;a++)for(c=0;c<r;c++)o.set(a,c,l.get(a,c));zs(r,h,i,o),Us(r,h,i,o)}else{let f=new F(r,r),p=new Float64Array(r);for(c=0;c<r;c++)for(a=0;a<r;a++)f.set(a,c,l.get(a,c));Ys(r,f,p,o),Ds(r,h,i,o,f)}this.n=r,this.e=h,this.d=i,this.V=o}get realEigenvalues(){return Array.from(this.d)}get imaginaryEigenvalues(){return Array.from(this.e)}get eigenvectorMatrix(){return this.V}get diagonalMatrix(){let t=this.n,e=this.e,n=this.d,r=new F(t,t),o,i;for(o=0;o<t;o++){for(i=0;i<t;i++)r.set(o,i,0);r.set(o,o,n[o]),e[o]>0?r.set(o,o+1,e[o]):e[o]<0&&r.set(o,o-1,e[o])}return r}}function zs(s,t,e,n){let r,o,i,h,l,a,c,u;for(l=0;l<s;l++)e[l]=n.get(s-1,l);for(h=s-1;h>0;h--){for(u=0,i=0,a=0;a<h;a++)u=u+Math.abs(e[a]);if(u===0)for(t[h]=e[h-1],l=0;l<h;l++)e[l]=n.get(h-1,l),n.set(h,l,0),n.set(l,h,0);else{for(a=0;a<h;a++)e[a]/=u,i+=e[a]*e[a];for(r=e[h-1],o=Math.sqrt(i),r>0&&(o=-o),t[h]=u*o,i=i-r*o,e[h-1]=r-o,l=0;l<h;l++)t[l]=0;for(l=0;l<h;l++){for(r=e[l],n.set(l,h,r),o=t[l]+n.get(l,l)*r,a=l+1;a<=h-1;a++)o+=n.get(a,l)*e[a],t[a]+=n.get(a,l)*r;t[l]=o}for(r=0,l=0;l<h;l++)t[l]/=i,r+=t[l]*e[l];for(c=r/(i+i),l=0;l<h;l++)t[l]-=c*e[l];for(l=0;l<h;l++){for(r=e[l],o=t[l],a=l;a<=h-1;a++)n.set(a,l,n.get(a,l)-(r*t[a]+o*e[a]));e[l]=n.get(h-1,l),n.set(h,l,0)}}e[h]=i}for(h=0;h<s-1;h++){if(n.set(s-1,h,n.get(h,h)),n.set(h,h,1),i=e[h+1],i!==0){for(a=0;a<=h;a++)e[a]=n.get(a,h+1)/i;for(l=0;l<=h;l++){for(o=0,a=0;a<=h;a++)o+=n.get(a,h+1)*n.get(a,l);for(a=0;a<=h;a++)n.set(a,l,n.get(a,l)-o*e[a])}}for(a=0;a<=h;a++)n.set(a,h+1,0)}for(l=0;l<s;l++)e[l]=n.get(s-1,l),n.set(s-1,l,0);n.set(s-1,s-1,1),t[0]=0}function Us(s,t,e,n){let r,o,i,h,l,a,c,u,f,p,g,w,P,m,d,M;for(i=1;i<s;i++)t[i-1]=t[i];t[s-1]=0;let x=0,v=0,k=Number.EPSILON;for(a=0;a<s;a++){for(v=Math.max(v,Math.abs(e[a])+Math.abs(t[a])),c=a;c<s&&!(Math.abs(t[c])<=k*v);)c++;if(c>a)do{for(r=e[a],u=(e[a+1]-r)/(2*t[a]),f=en(u,1),u<0&&(f=-f),e[a]=t[a]/(u+f),e[a+1]=t[a]*(u+f),p=e[a+1],o=r-e[a],i=a+2;i<s;i++)e[i]-=o;for(x=x+o,u=e[c],g=1,w=g,P=g,m=t[a+1],d=0,M=0,i=c-1;i>=a;i--)for(P=w,w=g,M=d,r=g*t[i],o=g*u,f=en(u,t[i]),t[i+1]=d*f,d=t[i]/f,g=u/f,u=g*e[i]-d*r,e[i+1]=o+d*(g*r+d*e[i]),l=0;l<s;l++)o=n.get(l,i+1),n.set(l,i+1,d*n.get(l,i)+g*o),n.set(l,i,g*n.get(l,i)-d*o);u=-d*M*P*m*t[a]/p,t[a]=d*u,e[a]=g*u}while(Math.abs(t[a])>k*v);e[a]=e[a]+x,t[a]=0}for(i=0;i<s-1;i++){for(l=i,u=e[i],h=i+1;h<s;h++)e[h]<u&&(l=h,u=e[h]);if(l!==i)for(e[l]=e[i],e[i]=u,h=0;h<s;h++)u=n.get(h,i),n.set(h,i,n.get(h,l)),n.set(h,l,u)}}function Ys(s,t,e,n){let r=0,o=s-1,i,h,l,a,c,u,f;for(u=r+1;u<=o-1;u++){for(f=0,a=u;a<=o;a++)f=f+Math.abs(t.get(a,u-1));if(f!==0){for(l=0,a=o;a>=u;a--)e[a]=t.get(a,u-1)/f,l+=e[a]*e[a];for(h=Math.sqrt(l),e[u]>0&&(h=-h),l=l-e[u]*h,e[u]=e[u]-h,c=u;c<s;c++){for(i=0,a=o;a>=u;a--)i+=e[a]*t.get(a,c);for(i=i/l,a=u;a<=o;a++)t.set(a,c,t.get(a,c)-i*e[a])}for(a=0;a<=o;a++){for(i=0,c=o;c>=u;c--)i+=e[c]*t.get(a,c);for(i=i/l,c=u;c<=o;c++)t.set(a,c,t.get(a,c)-i*e[c])}e[u]=f*e[u],t.set(u,u-1,f*h)}}for(a=0;a<s;a++)for(c=0;c<s;c++)n.set(a,c,a===c?1:0);for(u=o-1;u>=r+1;u--)if(t.get(u,u-1)!==0){for(a=u+1;a<=o;a++)e[a]=t.get(a,u-1);for(c=u;c<=o;c++){for(h=0,a=u;a<=o;a++)h+=e[a]*n.get(a,c);for(h=h/e[u]/t.get(u,u-1),a=u;a<=o;a++)n.set(a,c,n.get(a,c)+h*e[a])}}}function Ds(s,t,e,n,r){let o=s-1,i=0,h=s-1,l=Number.EPSILON,a=0,c=0,u=0,f=0,p=0,g=0,w=0,P=0,m,d,M,x,v,k,A,b,I,O,D,nt,L,C,S;for(m=0;m<s;m++)for((m<i||m>h)&&(e[m]=r.get(m,m),t[m]=0),d=Math.max(m-1,0);d<s;d++)c=c+Math.abs(r.get(m,d));for(;o>=i;){for(x=o;x>i&&(g=Math.abs(r.get(x-1,x-1))+Math.abs(r.get(x,x)),g===0&&(g=c),!(Math.abs(r.get(x,x-1))<l*g));)x--;if(x===o)r.set(o,o,r.get(o,o)+a),e[o]=r.get(o,o),t[o]=0,o--,P=0;else if(x===o-1){if(A=r.get(o,o-1)*r.get(o-1,o),u=(r.get(o-1,o-1)-r.get(o,o))/2,f=u*u+A,w=Math.sqrt(Math.abs(f)),r.set(o,o,r.get(o,o)+a),r.set(o-1,o-1,r.get(o-1,o-1)+a),b=r.get(o,o),f>=0){for(w=u>=0?u+w:u-w,e[o-1]=b+w,e[o]=e[o-1],w!==0&&(e[o]=b-A/w),t[o-1]=0,t[o]=0,b=r.get(o,o-1),g=Math.abs(b)+Math.abs(w),u=b/g,f=w/g,p=Math.sqrt(u*u+f*f),u=u/p,f=f/p,d=o-1;d<s;d++)w=r.get(o-1,d),r.set(o-1,d,f*w+u*r.get(o,d)),r.set(o,d,f*r.get(o,d)-u*w);for(m=0;m<=o;m++)w=r.get(m,o-1),r.set(m,o-1,f*w+u*r.get(m,o)),r.set(m,o,f*r.get(m,o)-u*w);for(m=i;m<=h;m++)w=n.get(m,o-1),n.set(m,o-1,f*w+u*n.get(m,o)),n.set(m,o,f*n.get(m,o)-u*w)}else e[o-1]=b+u,e[o]=b+u,t[o-1]=w,t[o]=-w;o=o-2,P=0}else{if(b=r.get(o,o),I=0,A=0,x<o&&(I=r.get(o-1,o-1),A=r.get(o,o-1)*r.get(o-1,o)),P===10){for(a+=b,m=i;m<=o;m++)r.set(m,m,r.get(m,m)-b);g=Math.abs(r.get(o,o-1))+Math.abs(r.get(o-1,o-2)),b=I=.75*g,A=-.4375*g*g}if(P===30&&(g=(I-b)/2,g=g*g+A,g>0)){for(g=Math.sqrt(g),I<b&&(g=-g),g=b-A/((I-b)/2+g),m=i;m<=o;m++)r.set(m,m,r.get(m,m)-g);a+=g,b=I=A=.964}for(P=P+1,v=o-2;v>=x&&(w=r.get(v,v),p=b-w,g=I-w,u=(p*g-A)/r.get(v+1,v)+r.get(v,v+1),f=r.get(v+1,v+1)-w-p-g,p=r.get(v+2,v+1),g=Math.abs(u)+Math.abs(f)+Math.abs(p),u=u/g,f=f/g,p=p/g,!(v===x||Math.abs(r.get(v,v-1))*(Math.abs(f)+Math.abs(p))<l*(Math.abs(u)*(Math.abs(r.get(v-1,v-1))+Math.abs(w)+Math.abs(r.get(v+1,v+1))))));)v--;for(m=v+2;m<=o;m++)r.set(m,m-2,0),m>v+2&&r.set(m,m-3,0);for(M=v;M<=o-1&&(C=M!==o-1,M!==v&&(u=r.get(M,M-1),f=r.get(M+1,M-1),p=C?r.get(M+2,M-1):0,b=Math.abs(u)+Math.abs(f)+Math.abs(p),b!==0&&(u=u/b,f=f/b,p=p/b)),b!==0);M++)if(g=Math.sqrt(u*u+f*f+p*p),u<0&&(g=-g),g!==0){for(M!==v?r.set(M,M-1,-g*b):x!==v&&r.set(M,M-1,-r.get(M,M-1)),u=u+g,b=u/g,I=f/g,w=p/g,f=f/u,p=p/u,d=M;d<s;d++)u=r.get(M,d)+f*r.get(M+1,d),C&&(u=u+p*r.get(M+2,d),r.set(M+2,d,r.get(M+2,d)-u*w)),r.set(M,d,r.get(M,d)-u*b),r.set(M+1,d,r.get(M+1,d)-u*I);for(m=0;m<=Math.min(o,M+3);m++)u=b*r.get(m,M)+I*r.get(m,M+1),C&&(u=u+w*r.get(m,M+2),r.set(m,M+2,r.get(m,M+2)-u*p)),r.set(m,M,r.get(m,M)-u),r.set(m,M+1,r.get(m,M+1)-u*f);for(m=i;m<=h;m++)u=b*n.get(m,M)+I*n.get(m,M+1),C&&(u=u+w*n.get(m,M+2),n.set(m,M+2,n.get(m,M+2)-u*p)),n.set(m,M,n.get(m,M)-u),n.set(m,M+1,n.get(m,M+1)-u*f)}}}if(c!==0){for(o=s-1;o>=0;o--)if(u=e[o],f=t[o],f===0)for(x=o,r.set(o,o,1),m=o-1;m>=0;m--){for(A=r.get(m,m)-u,p=0,d=x;d<=o;d++)p=p+r.get(m,d)*r.get(d,o);if(t[m]<0)w=A,g=p;else if(x=m,t[m]===0?r.set(m,o,A!==0?-p/A:-p/(l*c)):(b=r.get(m,m+1),I=r.get(m+1,m),f=(e[m]-u)*(e[m]-u)+t[m]*t[m],k=(b*g-w*p)/f,r.set(m,o,k),r.set(m+1,o,Math.abs(b)>Math.abs(w)?(-p-A*k)/b:(-g-I*k)/w)),k=Math.abs(r.get(m,o)),l*k*k>1)for(d=m;d<=o;d++)r.set(d,o,r.get(d,o)/k)}else if(f<0)for(x=o-1,Math.abs(r.get(o,o-1))>Math.abs(r.get(o-1,o))?(r.set(o-1,o-1,f/r.get(o,o-1)),r.set(o-1,o,-(r.get(o,o)-u)/r.get(o,o-1))):(S=te(0,-r.get(o-1,o),r.get(o-1,o-1)-u,f),r.set(o-1,o-1,S[0]),r.set(o-1,o,S[1])),r.set(o,o-1,0),r.set(o,o,1),m=o-2;m>=0;m--){for(O=0,D=0,d=x;d<=o;d++)O=O+r.get(m,d)*r.get(d,o-1),D=D+r.get(m,d)*r.get(d,o);if(A=r.get(m,m)-u,t[m]<0)w=A,p=O,g=D;else if(x=m,t[m]===0?(S=te(-O,-D,A,f),r.set(m,o-1,S[0]),r.set(m,o,S[1])):(b=r.get(m,m+1),I=r.get(m+1,m),nt=(e[m]-u)*(e[m]-u)+t[m]*t[m]-f*f,L=(e[m]-u)*2*f,nt===0&&L===0&&(nt=l*c*(Math.abs(A)+Math.abs(f)+Math.abs(b)+Math.abs(I)+Math.abs(w))),S=te(b*p-w*O+f*D,b*g-w*D-f*O,nt,L),r.set(m,o-1,S[0]),r.set(m,o,S[1]),Math.abs(b)>Math.abs(w)+Math.abs(f)?(r.set(m+1,o-1,(-O-A*r.get(m,o-1)+f*r.get(m,o))/b),r.set(m+1,o,(-D-A*r.get(m,o)-f*r.get(m,o-1))/b)):(S=te(-p-I*r.get(m,o-1),-g-I*r.get(m,o),w,f),r.set(m+1,o-1,S[0]),r.set(m+1,o,S[1]))),k=Math.max(Math.abs(r.get(m,o-1)),Math.abs(r.get(m,o))),l*k*k>1)for(d=m;d<=o;d++)r.set(d,o-1,r.get(d,o-1)/k),r.set(d,o,r.get(d,o)/k)}for(m=0;m<s;m++)if(m<i||m>h)for(d=m;d<s;d++)n.set(m,d,r.get(m,d));for(d=s-1;d>=i;d--)for(m=i;m<=h;m++){for(w=0,M=i;M<=Math.min(d,h);M++)w=w+n.get(m,M)*r.get(M,d);n.set(m,d,w)}}}function te(s,t,e,n){let r,o;return Math.abs(e)>Math.abs(n)?(r=n/e,o=e+r*n,[(s+r*t)/o,(t-r*s)/o]):(r=e/n,o=n+r*e,[(r*s+t)/o,(r*t-s)/o])}function ee(s,t,e){const n=s/e,r=t/e;if(!(isFinite(n)&&isFinite(r))){const l=-s/t;return isFinite(l)?[l]:s==0&&t==0?[0]:[]}const o=r*r-4*n;let i=0;if(isFinite(o)){if(o<0)return[];if(o==0)return[-.5*r];i=-.5*(r+It(Math.sqrt(o),r))}else i=-r;const h=n/i;return isFinite(h)?h>i?[i,h]:[h,i]:[i]}function nn(s,t,e,n){const r=e/(3*n),o=t/(3*n),i=s/n;if(!(isFinite(i)&&isFinite(o)&&isFinite(r)))return ee(s,t,e);const h=-r*r+o,l=-o*r+i,a=r*i-o*o,c=4*h*a-l*l,u=-2*r*h+l;if(c<0){const f=Math.sqrt(-.25*c),p=-.5*u;return[Math.cbrt(p+f)+Math.cbrt(p-f)-r]}else if(c==0){const f=It(Math.sqrt(-h),u);return[f-r,-2*f-r]}else{const f=Math.atan2(Math.sqrt(c),-u)/3,p=Math.cos(f),g=Math.sin(f)*Math.sqrt(3),w=.5*(-p+g),P=.5*(-p-g),m=2*Math.sqrt(-h);return[m*p-r,m*w-r,m*P-r]}}function Xs(s,t,e,n,r){if(r==0)return nn(s,t,e,n);const o=n/r,i=e/r,h=t/r,l=s/r;let a=sn(o,i,h,l,!1);if(a!==null)return a;const c=716e74;for(let u=0;u<2;u++)if(a=sn(o/c,i/(c*c),h/(c*c*c),l/(c*c*c*c),u!=0),a!==null){for(let f=0;f<a.length;f++)a[f]*=c;return a}return[]}function St(s,t){return t==0?Math.abs(s):Math.abs((s-t)/t)}function sn(s,t,e,n,r){const o=Hs(s,t,e,n,r);if(o!==null&&o.length==4){let i=[];for(let h=0;h<2;h++){const l=o[h*2],a=o[h*2+1];i=i.concat(ee(a,l,1))}return i}return null}function Hs(s,t,e,n,r){function o(_,j,$,U){const X=St(_+$,s),Y=St(j+_*$+U,t),st=St(j*$+_*U,e);return X+Y+st}function i(_,j,$,U){return o(_,j,$,U)+St(j*U,n)}const h=9*s*s-24*t,l=h>=0?-2*t/(3*s+It(Math.sqrt(h),s)):-.25*s,a=s+4*l,c=t+3*l*(s+2*l),u=e+l*(2*t+l*(3*s+4*l)),f=n+l*(e+l*(t+l*(s+l)));let p=0,g=0;const w=349e100;if(r){const _=a/w,j=c/w,$=u/w,U=f/w;p=_*$-4/w*U-1/3*j*j,g=(_*$-8/w*U-2/9*j*j)*(1/3)*j-$*($/w)-_*_*U}else p=a*u-4*f-1/3*c*c,g=(a*u+8*f-2/9*c*c)*(1/3)*c-u*u-a*a*f;if(!isFinite(p)&&isFinite(g))return null;let P=Ws(p,g);r&&(P*=w);const m=s*.5,d=1/6*t+.5*P,M=e-s*d,x=2/3*t-P-m*m,v=.5*M/x,k=2*(n-d*d)/M,A=.5*M/k;let b=0,I=0,O=0;for(let _=0;_<3;_++){const j=_==1?A:x,$=_==0?v:k,U=St(j+m*m+2*d,t),X=St(2*(j*$+m*d),e),Y=St(j*$*$+d*d,n),st=U+X+Y;(_==0||st<O)&&(b=j,I=$,O=st)}const D=b,nt=I;let L=0,C=0,S=0,E=0;if(D<0){const _=Math.sqrt(-D);if(L=m+_,C=d+_*nt,S=m-_,E=d-_*nt,Math.abs(E)<Math.abs(C)?E=n/C:Math.abs(E)>Math.abs(C)&&(C=n/E),Math.abs(L)!=Math.abs(S)){let j=null,$=null;if(Math.abs(L)<Math.abs(S)){const X=(e-C*S)/E,Y=(t-E-C)/S;j=[s-S,X,Y],$=[S,S,S]}else{const X=(e-L*E)/C,Y=(t-E-C)/L,st=s-L;j=[L,L,L],$=[st,X,Y]}let U=0;for(let X=0;X<3;X++){const Y=j[X],st=$[X];if(isFinite(Y)&&isFinite(st)){const pt=o(Y,C,st,E);(X==0||pt<U)&&(L=Y,S=st,U=pt)}}}}else if(D==0){const _=n-d*d;L=m,C=d+Math.sqrt(-_),S=m,E=d-Math.sqrt(-_),Math.abs(C)>Math.abs(E)?E=n/C:Math.abs(E)>Math.abs(C)&&(C=n/E)}else return[];let yt=i(L,C,S,E);for(let _=0;_<8&&yt!=0;_++){const j=C*E-n,$=C*S+L*E-e,U=C+L*S+E-t,X=L+S-s,Y=L-S,st=C*C-C*(S*Y+2*E)+E*(L*Y+E);if(st==0)break;const pt=1/st,ft=E-C,bt=C*S-L*E,je=Y*j+ft*$+bt*U-(C*ft+L*bt)*X,qe=(L*Y+ft)*j-C*(Y*$+ft*U+bt*X),Oe=-Y*j-ft*$-bt*U+(S*bt+E*ft)*X,Ne=-(S*Y+ft)*j+E*(Y*$+ft*U+bt*X),ae=L-pt*je,le=C-pt*qe,ue=S-pt*Oe,ce=E-pt*Ne,fe=i(ae,le,ue,ce);if(fe<yt)L=ae,C=le,S=ue,E=ce,yt=fe;else break}return[L,C,S,E]}function Ws(s,t){const e=-.3333333333333333*s,n=.5*t;let r,o=null;if((Math.abs(e)>=1e102||Math.abs(n)>=1e164)&&(Math.abs(e)<Math.abs(n)?o=1-e*(e/n)*(e/n):o=Math.sign(e)*(n/e*(n/e)/e-1)),o!==null&&n==0)s>0?r=0:r=Math.sqrt(-s);else if(o!==null?o<0:n*n<e*e*e){const a=o!==null?n/e/Math.sqrt(e):n/Math.sqrt(e*e*e);r=-2*Math.sqrt(e)*It(Math.cos(Math.acos(Math.abs(a))*(1/3)),a)}else{let a;o!==null?Math.abs(e)<Math.abs(n)?a=-n*(1+Math.sqrt(o)):a=-n-It(Math.sqrt(Math.abs(e))*e*Math.sqrt(o),n):a=Math.cbrt(-n-It(Math.sqrt(n*n-e*e*e),n));const c=a==0?0:e/a;r=a+c}let i=r,h=(i*i+s)*i+t;const l=222045e-21;if(Math.abs(h)<l*Math.max(i*i*i,s*i,t))return i;for(let a=0;a<8;a++){const c=3*i*i+s;if(c==0)break;const u=i-h/c,f=(u*u+s)*u+t;if(f==0)return u;if(Math.abs(f)>=Math.abs(h))break;i=u,h=f}return i}function It(s,t){const e=Math.abs(s);return t<0?-e:e}function de(s,t=1e-9){if(s[s.length-1]==0)return de(s.slice(0,-1),t);const e=new F([s.slice(0,-1).reverse().map(r=>-r/s[s.length-1]),...Array.from({length:s.length-2},(r,o)=>{const i=new Array(s.length-1).fill(0);return i[o]=1,i})]),n=new Vs(e);return n.realEigenvalues.filter((r,o)=>Math.abs(n.imaginaryEigenvalues[o])<t)}const Js=(s,t,e)=>[s[0]*(1-e)+t[0]*e,s[1]*(1-e)+t[1]*e];function Zs(s){const t=[];for(let e=0;e<s.length-1;e++)t.push([s[e],s[e+1]]);return t}function Pe(s,t){const e=Zs(s).map(([n,r])=>Js(n,r,t));return s.length===2?[e]:[...Pe(e,t),e]}let K=class Bt extends Nt{constructor(t,e,n,r){super(t,e),this.segmentType="CUBIC_BEZIER",this._boundingBox=null,this._polynomialCoefficients=null,this.firstControlPoint=n,this.lastControlPoint=r}get midPoint(){return this.paramPoint(.5)}get boundingBox(){if(this._boundingBox===null){const t=e=>{const[n,r,o,i]=[this.firstPoint[e],this.firstControlPoint[e],this.lastControlPoint[e],this.lastPoint[e]],h=-n+3*r-3*o+i,l=2*n-4*r+2*o,a=-n+r;return ee(a,l,h).filter(c=>c>=-this.precision&&c<=1+this.precision)};this._boundingBox=me([this.firstPoint,...t(0).map(e=>this.paramPoint(e)),...t(1).map(e=>this.paramPoint(e)),this.lastPoint]).grow(this.precision)}return this._boundingBox}clone(){return new Bt(this.firstPoint,this.lastPoint,this.firstControlPoint,this.lastControlPoint)}reverse(){return new Bt(this.lastPoint,this.firstPoint,this.lastControlPoint,this.firstControlPoint)}isSame(t){return t.segmentType!=="CUBIC_BEZIER"?!1:y(this.firstPoint,t.firstPoint)&&y(this.lastPoint,t.lastPoint)&&y(this.firstControlPoint,t.firstControlPoint)&&y(this.lastControlPoint,t.lastControlPoint)}distanceFrom(t){const e=We(n=>vt(this.paramPoint(n),t),this.precision);return e.argMin<-this.precision||e.argMin>1+this.precision?Math.min(z(this.firstPoint,t),z(this.lastPoint,t)):Math.sqrt(e.fMin)}isOnSegment(t){if(!this.boundingBox.contains(t))return!1;try{const e=this.pointToParam(t);return e>=-this.precision&&e<=1+this.precision}catch{return!1}}gradientAt(t){const e=1-t,n=e*e,r=t*t,o=3*n,i=6*e*t,h=3*r,l=q(this.firstControlPoint,this.firstPoint),a=q(this.lastControlPoint,this.firstControlPoint),c=q(this.lastPoint,this.lastControlPoint);return[o*l[0]+i*a[0]+h*c[0],o*l[1]+i*a[1]+h*c[1]]}tangentAt(t){const e=this.pointToParam(t);return J(this.gradientAt(e))}get tangentAtFirstPoint(){return J(q(this.firstControlPoint,this.firstPoint))}get tangentAtLastPoint(){return J(q(this.lastControlPoint,this.lastPoint))}normalAt(t){const e=this.tangentAt(t);return G(e)}splitAtParameters(t,e=null){const n=[...t];n.sort((o,i)=>o-i);let r={originalParam:0,param:0,p0:this.firstPoint,p1:this.firstControlPoint,p2:this.lastControlPoint};return n.flatMap((o,i)=>{if(o-r.originalParam<this.precision)return[];let h=!1;o>1-this.precision&&(h=!0);const l=(o-r.originalParam)/(1-r.originalParam),a=Pe([r.p0,r.p1,r.p2,this.lastPoint],h?1:l),c=h?this.lastPoint:(e==null?void 0:e.get(o))??a[0][0],u=a[1][0],f=a[2][0],p=a[1][1],g=a[2][2],w=new Bt(r.p0,c,f,u);return r={param:l,originalParam:o,p0:c,p1:p,p2:g},i===n.length-1&&!h?[w,new Bt(r.p0,this.lastPoint,r.p1,r.p2)]:w})}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=e.map(o=>this.pointToParam(o)),r=new Map(at([n,e]));return this.splitAtParameters(n,r)}transform(t){return new Bt(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.firstControlPoint),t.transform(this.lastControlPoint))}paramPoint(t){const e=1-t,n=e*e,r=t*t,o=n*e,i=3*n*t,h=3*e*r,l=r*t;return[o*this.firstPoint[0]+i*this.firstControlPoint[0]+h*this.lastControlPoint[0]+l*this.lastPoint[0],o*this.firstPoint[1]+i*this.firstControlPoint[1]+h*this.lastControlPoint[1]+l*this.lastPoint[1]]}get polynomialCoefficients(){if(this._polynomialCoefficients===null){const t=e=>{const n=this.firstPoint[e],r=this.firstControlPoint[e],o=this.lastControlPoint[e],i=this.lastPoint[e],h=-n+3*r-3*o+i,l=3*n-6*r+3*o,a=-3*n+3*r;return[n,a,l,h]};this._polynomialCoefficients=[t(0),t(1)]}return this._polynomialCoefficients}paramsAtY(t){const[e,n,r,o]=this.polynomialCoefficients[1];return nn(e-t,n,r,o).filter(i=>i>=-this.precision&&i<=1+this.precision)}pointToParam(t){const e=this.paramsAtY(t[1]);if(e.length===0)throw new Error("Point is not on the curve");const n=o=>Math.abs(this.paramPoint(o)[0]-t[0])<=this.precision,r=e.find(n);if(r===void 0)throw new Error("Point is not on the curve");return r}};function Gs(s,t){const e=q(t,s.firstPoint),n=pe(e,s.V)/s.squareLength;return s.paramPoint(n)}function ne(s,t,e){const n=e||s.precision,r=Gs(s,t.center),o=z(r,t.center);if(o>t.radius+n)return[];if(Math.abs(o-t.radius)<n){const u=r;return s.isOnSegment(u)&&t.isOnSegment(u)?[u]:[]}const i=[],h=Math.sqrt(t.radius*t.radius-o*o),l=s.tangentAtFirstPoint,a=V(r,W(l,h));s.isOnSegment(a)&&t.isOnSegment(a)&&i.push(a);const c=V(r,W(l,-h));return s.isOnSegment(c)&&t.isOnSegment(c)&&i.push(c),i}const Ks=s=>{const{firstPoint:t,lastPoint:e,center:n,clockwise:r}=s;return new T(e,t,n,r,{ignoreChecks:!0})},Qs=(s,t)=>{if(s.isSame(t))return[s];const e=mt([t.isOnSegment(s.firstPoint)?s.firstPoint:null,t.isOnSegment(s.lastPoint)?s.lastPoint:null,s.isOnSegment(t.firstPoint)?t.firstPoint:null,s.isOnSegment(t.lastPoint)?t.lastPoint:null].filter(n=>n!==null)).sort((n,r)=>s.pointToParam(n)-s.pointToParam(r));if(e.length===0)return[];if(e.length===1)return[];if(e.length===2)return s.isSame(Ks(t))?[]:[new T(e[0],e[1],s.center,s.clockwise)];if(e.length===3){const n=y(e[0],t.lastPoint)||y(e[0],t.firstPoint)?1:0;return[new T(e[0+n],e[1+n],s.center,s.clockwise)]}else if(e.length===4)return[new T(e[0],e[1],s.center,s.clockwise),new T(e[2],e[3],s.center,s.clockwise)];throw new Error("Bug in the arc arc overlap algorithm")};function rn(s,t,e=!1,n){const r=n||s.precision,o=z(s.center,t.center),i=s.radius+t.radius;if(o>i+r)return[];const h=Math.abs(s.radius-t.radius);if(o<h-r)return[];if(o<r)return h>r?[]:e?Qs(s,t):[];const l=J(q(t.center,s.center)),a=o>i-r;if(a||Math.abs(o-h)<r){const m=a||s.radius>t.radius?1:-1,d=V(s.center,W(l,m*s.radius));return s.isOnSegment(d)&&t.isOnSegment(d)?[d]:[]}const c=s.radius*s.radius/(2*o)-t.radius*t.radius/(2*o)+o/2,u=V(s.center,W(l,c)),f=Math.sqrt(s.radius*s.radius-c*c),p=G(l),g=V(u,W(p,f)),w=V(u,W(p,-f)),P=[];return s.isOnSegment(g)&&t.isOnSegment(g)&&P.push(g),s.isOnSegment(w)&&t.isOnSegment(w)&&P.push(w),P}let Z=class Xt extends Nt{constructor(t,e,n,r,o,i,h=!1,{ignoreChecks:l=!1,angleUnits:a="deg"}={}){super(t,e),this.segmentType="ELLIPSE_ARC",this.precision=1e-6,this._coefficients=null,this.center=n;const c=r>=o;this.majorRadius=c?r:o,this.minorRadius=c?o:r;const u=a==="deg"?i*xt:i;if(this.tiltAngle=Et(c?u:u+Math.PI/2),this.clockwise=h,!l){if(y(t,e))throw new Error("Invalid arc, cannot be a full circle");if(!this.isPointOnEllipse(t))throw new Error(`First point ${H(t)} not on the ellipse defined by ${this.info}`);if(!this.isPointOnEllipse(e))throw new Error(`Last point ${H(e)} not on the ellipse defined by ${this.info}`);if(Math.abs(this.majorRadius-this.minorRadius)<this.precision)throw new Error("Both radii should be different, create an arc instead")}}get coefficients(){if(this._coefficients===null){const[t,e]=this.center,n=this.majorRadius*this.majorRadius,r=this.minorRadius*this.minorRadius,o=Math.cos(this.tiltAngle),i=Math.sin(this.tiltAngle),h=n*i*i+r*o*o,l=2*(r-n)*i*o,a=n*o*o+r*i*i;this._coefficients={x2:h,xy:l,y2:a,x:-2*h*t-l*e,y:-2*a*e-l*t,c:h*t*t+l*t*e+a*e*e-n*r}}return this._coefficients}get info(){return`ELLIPSE_ARC(${H(this.firstPoint)}, ${H(this.lastPoint)}, ${H(this.center)}, ${this.majorRadius}, ${this.minorRadius}, ${this.tiltAngle*ge}, ${this.clockwise?"CW":"CCW"})`}reverse(){return new Xt(this.lastPoint,this.firstPoint,this.center,this.majorRadius,this.minorRadius,this.tiltAngle,!this.clockwise,{ignoreChecks:!0,angleUnits:"rad"})}clone(){return new Xt(this.firstPoint,this.lastPoint,this.center,this.majorRadius,this.minorRadius,this.tiltAngle,this.clockwise,{ignoreChecks:!0,angleUnits:"rad"})}computeEllipseExtrema(){const t=Math.tan(this.tiltAngle),e=this.minorRadius/this.majorRadius,n=-Math.atan(e*t),r=Math.atan(e/t);return[n,Math.PI+n,r,Math.PI+r].map(o=>this.thetaToParam(o)).filter(o=>this.isValidParameter(o)).map(o=>this.paramPoint(o))}get boundingBox(){if(this._boundingBox===void 0){const t=this.computeEllipseExtrema(),e=[this.firstPoint,this.lastPoint,...t];this._boundingBox=me(e).grow(this.precision)}return this._boundingBox}get linearExentricity(){return this._linearExentricity===void 0&&(this._linearExentricity=Math.sqrt(this.majorRadius*this.majorRadius-this.minorRadius*this.minorRadius)),this._linearExentricity}get exentricity(){return this._exentricity===void 0&&(this._exentricity=this.linearExentricity/this.majorRadius),this._exentricity}get focals(){if(this._focals===void 0){const t=this.majorAxis;this._focals=[V(this.center,W(t,this.linearExentricity)),V(this.center,W(t,-this.linearExentricity))]}return this._focals}get majorAxis(){return gt(1,this.tiltAngle)}paramPoint(t){const e=this.firstAngle+t*this.deltaAngle*(this.clockwise?-1:1);return this.reverseEllipseReferenceFrameTransform.transform([this.majorRadius*Math.cos(e),this.minorRadius*Math.sin(e)])}pointToParam(t){if(!this.isPointOnEllipse(t))throw new Error(`Point ${H(t)} not on the ellipse defined by ${this.repr}`);const e=this.thetaToParam(this.pointTheta(t));if(!this.isValidParameter(e))throw new Error(`Point ${H(t)} is not on segment ${this.repr}`);return e}get midPoint(){return this.paramPoint(.5)}isValidParameter(t){return 1-t>=-this.precision&&t>=-this.precision}isSame(t){return y(this.center,t.center)&&Math.abs(this.majorRadius-t.majorRadius)<this.precision&&Math.abs(this.minorRadius-t.minorRadius)<this.precision&&(Math.abs(this.tiltAngle-t.tiltAngle)<this.precision||Math.abs(Math.abs(this.tiltAngle-t.tiltAngle)-Math.PI)<this.precision)&&(y(this.firstPoint,t.firstPoint)&&this.clockwise===t.clockwise||y(this.firstPoint,t.lastPoint)&&this.clockwise!==t.clockwise)}pointTheta(t){const e=this.ellipseReferenceFrameTransform.transform(t),n=Math.atan2(e[1]/this.minorRadius,e[0]/this.majorRadius);return Et(n)}thetaToParam(t){return Ht(this.firstAngle,Et(t),this.clockwise)/this.deltaAngle}isPointOnEllipse(t){const[e,n]=this.focals,r=z(t,e),o=z(t,n);return Math.abs(2*this.majorRadius-r-o)<this.precision}isOnSegment(t){return this.isPointOnEllipse(t)?this.isValidParameter(this.thetaToParam(this.pointTheta(t))):!1}distanceFrom(t){let e;if(y(t,this.center)?e=V(this.center,W(G(this.majorAxis),this.minorRadius)):e=this.reverseEllipseReferenceFrameTransform.transform(nr(this.majorRadius,this.minorRadius,this.ellipseReferenceFrameTransform.transform(t))),this.isValidParameter(this.thetaToParam(this.pointTheta(t))))return z(t,e);if(os(t,this.majorAxis,this.center)){const n=Et(2*Math.PI-this.pointTheta(t)),r=this.thetaToParam(n);if(this.isValidParameter(r))return z(t,this.paramPoint(r))}return Math.min(z(t,this.firstPoint),z(t,this.lastPoint))}get ellipseReferenceFrameTransform(){return this._ellipseReferenceFrameTransform===void 0&&(this._ellipseReferenceFrameTransform=new tt().rotate(-this.tiltAngle).translate(-this.center[0],-this.center[1])),this._ellipseReferenceFrameTransform}get reverseEllipseReferenceFrameTransform(){return this._reverseEllipseReferenceFrameTransform===void 0&&(this._reverseEllipseReferenceFrameTransform=new tt().translate(this.center[0],this.center[1]).rotate(this.tiltAngle)),this._reverseEllipseReferenceFrameTransform}get rotateFromEllipseReferenceFrame(){return this._rotateFromEllipseReferenceFrame===void 0&&(this._rotateFromEllipseReferenceFrame=new tt().rotate(this.tiltAngle)),this._rotateFromEllipseReferenceFrame}get firstAngle(){return this._firstAngle===void 0&&(this._firstAngle=this.pointTheta(this.firstPoint)),this._firstAngle}get lastAngle(){return this._lastAngle===void 0&&(this._lastAngle=this.pointTheta(this.lastPoint)),this._lastAngle}get deltaAngle(){return this._deltaAngle===void 0&&(this._deltaAngle=Ht(this.firstAngle,this.lastAngle,this.clockwise)),this._deltaAngle}normalAt(t){const e=this.tangentAt(t);return this.clockwise?G(e):Ot(e)}gradientAt(t){const e=this.firstAngle+t*this.deltaAngle*(this.clockwise?-1:1),n=-this.majorRadius*this.deltaAngle*Math.sin(e),r=this.minorRadius*this.deltaAngle*Math.cos(e),o=this.clockwise?[-n,-r]:[n,r];return this.rotateFromEllipseReferenceFrame.transform(o)}tangentAt(t){const e=this.pointTheta(t),n=-this.majorRadius*Math.sin(e),r=this.minorRadius*Math.cos(e),o=this.clockwise?[-n,-r]:[n,r];return J(this.rotateFromEllipseReferenceFrame.transform(o))}get tangentAtFirstPoint(){const t=-this.majorRadius*Math.sin(this.firstAngle),e=this.minorRadius*Math.cos(this.firstAngle),n=this.clockwise?[-t,-e]:[t,e];return J(this.rotateFromEllipseReferenceFrame.transform(n))}get tangentAtLastPoint(){const t=-this.majorRadius*Math.sin(this.lastAngle),e=this.minorRadius*Math.cos(this.lastAngle),n=this.clockwise?[-t,-e]:[t,e];return J(this.rotateFromEllipseReferenceFrame.transform(n))}transform(t){const e=t.transformAngle(this.tiltAngle),n=t.scaleFactor();return new Xt(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.center),this.majorRadius*n,this.minorRadius*n,e,t.keepsOrientation()?this.clockwise:!this.clockwise,{angleUnits:"rad"})}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=[0,1,...e.map(i=>this.pointToParam(i))],r=new Map(at([n,[this.firstPoint,this.lastPoint,...e]]));n.sort((i,h)=>i-h);let o=null;return n.flatMap((i,h)=>{if(h===n.length-1)return[];const l=n[h+1];if(l-i<this.precision)return o===null&&(o=i),[];const a=o===null?i:o,c=new Xt(r.get(a)||this.paramPoint(a),r.get(l)||this.paramPoint(l),this.center,this.majorRadius,this.minorRadius,this.tiltAngle,this.clockwise,{angleUnits:"rad"});return o=null,c})}};function tr(s,t,e,n,r,o,i){const{center:h,rx:l,ry:a}=er(s,t,e,n,r*xt,!o,i);return Math.abs(l-a)<1e-9?new T(s,t,h,i):new Z(s,t,h,l,a,r,i)}function er([s,t],[e,n],r,o,i,h,l){if(r<0&&(r=-r),o<0&&(o=-o),r==0||o==0)throw Error("rx and ry can not be 0");const a=Math.sin(i),c=Math.cos(i),u=(s-e)/2,f=(t-n)/2,p=(s+e)/2,g=(t+n)/2,w=c*u+a*f,P=c*f-a*u,m=w*w/(r*r)+P*P/(o*o);m>1&&(r=r*Math.sqrt(m),o=o*Math.sqrt(m));const d=r*o,M=r*P,x=o*w,v=M*M+x*x;if(!v)throw Error("start point can not be same as end point");let k=Math.sqrt(Math.abs((d*d-v)/v));h==l&&(k=-k);const A=k*M/o,b=-k*x/r,I=c*A-a*b+p,O=a*A+c*b+g;return{center:[I,O],rx:r,ry:o}}function nr(s,t,e){const n=Math.abs(e[0]),r=Math.abs(e[1]);let o=.707,i=.707;const h=s,l=t;for(let a=0;a<3;a++){const c=h*o,u=l*i,f=(h*h-l*l)*o**3/h,p=(l*l-h*h)*i**3/l,g=c-f,w=u-p,P=n-f,m=r-p,d=Math.hypot(g,w),M=Math.hypot(P,m);o=Math.min(1,Math.max(0,(P*d/M+f)/h)),i=Math.min(1,Math.max(0,(m*d/M+p)/l));const x=Math.hypot(o,i);o/=x,i/=x}return[h*o*Math.sign(e[0]),l*i*Math.sign(e[1])]}function Me(s,t,e=1e-9){const n=s.transform(t.ellipseReferenceFrameTransform),r=n.slope,o=n.yIntercept,i=t.majorRadius*t.majorRadius,h=t.minorRadius*t.minorRadius,l=t.majorRadius*t.minorRadius,a=n.slope*n.slope,c=n.yIntercept*n.yIntercept,u=m=>m.map(d=>t.reverseEllipseReferenceFrameTransform.transform(d)).filter(d=>s.isOnSegment(d)&&t.isOnSegment(d));if(!Number.isFinite(r)){const m=n.firstPoint[0];if(Math.abs(m)-t.majorRadius>e)return[];if(Math.abs(Math.abs(m)-t.majorRadius)<e)return u([[m,0]]);const d=t.minorRadius*Math.sqrt(1-m*m/i),M=[m,d],x=[m,-d];return u([M,x])}const f=i*a+h-c;if(f<-e)return[];const p=i*a+h;if(Math.abs(f)<e){const m=-(i*r*o)/p,d=h*o/p;return u([[m,d]])}const g=Math.sqrt(f),w=[-(i*r*o+l*g)/p,(h*o-l*r*g)/p],P=[-(i*r*o-l*g)/p,(h*o+l*r*g)/p];return u([w,P])}function on(s,t){const e=Math.max(s.precision,t.precision),n=s.coefficients,r=n.x2,o=n.xy,i=n.y2,h=n.x,l=n.y,a=n.c,c=t.coefficients,u=c.x2,f=c.xy,p=c.y2,g=c.x,w=c.y,P=c.c,m={z0:a*r*g*g+r*r*P*P-h*r*g*P+u*u*a*a-2*r*P*u*a-h*g*u*a+u*h*h*P,z1:w*h*h*u-P*g*r*o-2*r*P*u*l-a*u*f*h+2*g*f*r*a+2*w*P*r*r+g*g*r*l-w*g*r*h-2*r*w*u*a-a*u*g*o+2*a*l*u*u-P*f*r*h-l*u*g*h+2*P*o*u*h,z2:w*w*r*r+2*p*P*r*r-l*u*g*o+P*u*o*o-l*u*f*h-P*f*r*o-2*r*w*u*l+2*g*f*r*l-p*g*r*h-2*r*p*u*a+f*f*r*a+2*w*o*u*h+l*l*u*u-i*u*g*h-w*f*r*h+2*a*i*u*u-a*u*f*o+p*h*h*u+g*g*r*i-w*g*r*o-2*r*P*u*i,z3:-2*r*u*i*w+w*u*o*o+2*p*o*u*h-i*u*f*h+f*f*r*l-w*f*r*o-2*r*p*u*l-l*u*f*o-p*f*r*h+2*w*p*r*r+2*l*i*u*u-i*u*g*o+2*g*f*r*i-p*g*r*o,z4:r*r*p*p-2*r*p*u*i+u*u*i*i-o*r*f*p-o*f*u*i+o*o*u*p+i*r*f*f},d=de([m.z0,m.z1,m.z2,m.z3,m.z4],e).flatMap(M=>{const x=r*f*M+r*g-u*o*M-u*h;if(x)return[[-(r*P+r*p*M*M-u*i*M*M+r*w*M-u*l*M-u*a)/x,M]];const v=o*M+h,k=-v/(2*r),A=i*M*M+l*M+a,b=v*v/(4*r*r)-A/r;if(Math.abs(b)<e)return[[k,M]];if(b>0){const I=Math.sqrt(b);return[[k+I,M],[k-I,M]]}return[]});return mt(d,e)}function hn(s,t){return on(s,t).filter(e=>s.isOnSegment(e)&&t.isOnSegment(e))}const sr=s=>{const{firstPoint:t,lastPoint:e,center:n,majorRadius:r,minorRadius:o,tiltAngle:i,clockwise:h}=s;return new Z(e,t,n,r,o,i,h,{ignoreChecks:!0,angleUnits:"rad"})},rr=(s,t)=>{if(s.isSame(t))return[s];const e=(r,o)=>new Z(r,o,s.center,s.majorRadius,s.minorRadius,s.tiltAngle,s.clockwise,{ignoreChecks:!0,angleUnits:"rad"}),n=mt([t.isOnSegment(s.firstPoint)?s.firstPoint:null,t.isOnSegment(s.lastPoint)?s.lastPoint:null,s.isOnSegment(t.firstPoint)?t.firstPoint:null,s.isOnSegment(t.lastPoint)?t.lastPoint:null].filter(r=>r!==null)).sort((r,o)=>s.pointToParam(r)-s.pointToParam(o));if(n.length===0)return[];if(n.length===1)return[];if(n.length===2)return s.isSame(sr(t))?[]:[e(n[0],n[1])];if(n.length===3){const r=y(n[0],t.lastPoint)||y(n[0],t.firstPoint)?1:0;return[e(n[0+r],n[1+r])]}else if(n.length===4)return[e(n[0],n[1]),e(n[2],n[3])];throw new Error("Bug in the ellipse arc ellipse arc overlap algorithm")};function or(s,t,e=!1){const n=Math.max(s.precision,t.precision);return y(s.center,t.center)&&Math.abs(s.majorRadius-t.majorRadius)<n&&Math.abs(s.minorRadius-t.minorRadius)<n&&(Math.abs(s.tiltAngle-t.tiltAngle)<n||Math.abs(Math.abs(s.tiltAngle-t.tiltAngle)-Math.PI)<n)?e?rr(s,t):[]:on(s,t).filter(r=>s.isOnSegment(r)&&t.isOnSegment(r))}function an(s,t){const[e,n]=s.firstPoint,[r,o]=s.lastPoint,i=new tt().rotate(-Math.atan2(o-n,r-e)).translate(-e,-n),h=i.clone().inverse(),l=t.transform(i);return l.paramsAtY(0).map(a=>l.paramPoint(a)).map(a=>h.transform(a)).filter(a=>s.isOnSegment(a))}const ir=(s,t=1e-9)=>{let e=s;return Math.abs(s)<t&&(e=0),e.toFixed(-Math.log10(t))};function ln(s,t=1e-9){return Array.from(new Map(s.map(e=>[ir(e,t),e])).values())}const hr=(s,t)=>{const[[e,n,r,o],[i,h,l,a]]=t.polynomialCoefficients,c=s.coefficients,u=c.x2,f=c.xy,p=c.y2,g=c.x,w=c.y,P=c.c,m=e*e,d=n*n,M=r*r,x=o*o,v=i*i,k=h*h,A=l*l,b=a*a,I=P+g*e+u*m+w*i+f*e*i+p*v,O=g*n+2*u*e*n+f*n*i+w*h+f*e*h+2*p*i*h,D=u*d+g*r+2*u*e*r+f*r*i+f*n*h+p*k+w*l+f*e*l+2*p*i*l,nt=2*u*n*r+g*o+2*u*e*o+f*o*i+f*r*h+f*n*l+2*p*h*l+w*a+f*e*a+2*p*i*a,L=u*M+2*u*n*o+f*o*h+f*r*l+p*A+f*n*a+2*p*h*a,C=2*u*r*o+f*o*l+f*r*a+2*p*l*a,S=u*x+f*o*a+p*b;return[I,O,D,nt,L,C,S]};function un(s,t){const e=Math.max(s.precision,t.precision),n=hr(s,t),r=de(n,e).filter(o=>o>=-t.precision&&o<=1+t.precision);return ln(r,e).map(o=>t.paramPoint(o)).filter(o=>s.isOnSegment(o))}class N extends Nt{constructor(t,e,n){super(t,e),this.segmentType="QUADRATIC_BEZIER",this._boundingBox=null,this._polynomialCoefficients=null,this.controlPoint=n}get midPoint(){return this.paramPoint(.5)}get boundingBox(){if(this._boundingBox===null){const t=e=>{const[n,r,o]=[this.firstPoint[e],this.controlPoint[e],this.lastPoint[e]],i=n-2*r+o;if(!i)return[];const h=(n-r)/i;return h>=-this.precision&&h<=1+this.precision?[h]:[]};this._boundingBox=me([this.firstPoint,...t(0).map(e=>this.paramPoint(e)),...t(1).map(e=>this.paramPoint(e)),this.lastPoint]).grow(this.precision)}return this._boundingBox}clone(){return new N(this.firstPoint,this.lastPoint,this.controlPoint)}reverse(){return new N(this.lastPoint,this.firstPoint,this.controlPoint)}isSame(t){return t.segmentType!=="QUADRATIC_BEZIER"?!1:y(this.firstPoint,t.firstPoint)&&y(this.lastPoint,t.lastPoint)&&y(this.controlPoint,t.controlPoint)}distanceFrom(t){const e=We(n=>vt(this.paramPoint(n),t),this.precision);return e.argMin<-this.precision||e.argMin>1+this.precision?Math.min(z(this.firstPoint,t),z(this.lastPoint,t)):Math.sqrt(e.fMin)}isOnSegment(t){if(!this.boundingBox.contains(t))return!1;try{const e=this.pointToParam(t);return e>=-this.precision&&e<=1+this.precision}catch{return!1}}gradientAt(t){const e=n=>{const r=this.firstPoint[n],o=this.controlPoint[n],i=this.lastPoint[n];return 2*(t*(r-2*o+i)-r+o)};return[e(0),e(1)]}tangentAt(t){const e=this.pointToParam(t);return J(this.gradientAt(e))}get tangentAtFirstPoint(){return J(q(this.controlPoint,this.firstPoint))}get tangentAtLastPoint(){return J(q(this.controlPoint,this.lastPoint))}normalAt(t){const e=this.tangentAt(t);return G(e)}splitAtParameters(t,e=null){const n=[...t];n.sort((o,i)=>o-i);let r={originalParam:0,param:0,p0:this.firstPoint,p1:this.controlPoint};return n.flatMap((o,i)=>{if(o-r.originalParam<this.precision)return[];let h=!1;o>1-this.precision&&(h=!0);const l=(o-r.originalParam)/(1-r.originalParam),a=Pe([r.p0,r.p1,this.lastPoint],h?1:l),c=h?this.lastPoint:(e==null?void 0:e.get(o))??a[0][0],u=a[1][0],f=a[1][1],p=new N(r.p0,c,u);return r={param:l,originalParam:o,p0:c,p1:f},i===n.length-1&&!h?[p,new N(r.p0,this.lastPoint,r.p1)]:p})}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=e.map(o=>this.pointToParam(o)),r=new Map(at([n,e]));return this.splitAtParameters(n,r)}transform(t){return new N(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.controlPoint))}paramPoint(t){const e=1-t,n=e*e,r=2*e*t,o=t*t;return[n*this.firstPoint[0]+r*this.controlPoint[0]+o*this.lastPoint[0],n*this.firstPoint[1]+r*this.controlPoint[1]+o*this.lastPoint[1]]}get polynomialCoefficients(){if(this._polynomialCoefficients===null){const t=e=>{const n=this.firstPoint[e],r=this.controlPoint[e],o=this.lastPoint[e],i=n-2*r+o,h=2*(r-n);return[n,h,i]};this._polynomialCoefficients=[t(0),t(1)]}return this._polynomialCoefficients}paramsAtY(t){const[e,n,r]=this.polynomialCoefficients[1];return ee(e-t,n,r).filter(o=>o>=-this.precision&&o<=1+this.precision)}pointToParam(t){const e=this.paramsAtY(t[1]);if(e.length===0)throw new Error("Point is not on the curve!");const n=o=>Math.abs(this.paramPoint(o)[0]-t[0])<=this.precision,r=e.find(n);if(r===void 0)throw new Error("Point is not on the curve");return r}}const ar=(s,t)=>{const[[e,n,r],[o,i,h]]=t.polynomialCoefficients,l=s.coefficients,a=l.x2,c=l.xy,u=l.y2,f=l.x,p=l.y,g=l.c,w=e*e,P=n*n,m=r*r,d=o*o,M=i*i,x=h*h,v=a*w+c*e*o+u*d+f*e+p*o+g,k=2*a*e*n+c*e*i+c*n*o+2*u*o*i+f*n+p*i,A=2*a*e*r+a*P+c*e*h+c*n*i+c*r*o+2*u*o*h+u*M+f*r+p*h,b=2*a*n*r+c*n*h+c*r*i+2*u*i*h,I=a*m+c*r*h+u*x;return[v,k,A,b,I]};function cn(s,t){const e=Math.max(s.precision,t.precision),n=ar(s,t),r=Xs(...n).filter(o=>o>=-t.precision&&o<=1+t.precision);return ln(r,e).map(o=>t.paramPoint(o)).filter(o=>s.isOnSegment(o))}function et(s,{firstPoint:t,lastPoint:e},n=1e-9){const r=q(e,t);return Math.abs(r[0])<n?r[1]>0?t[0]-s[0]:s[0]-t[0]:Math.abs(r[1])<n?r[0]>0?s[1]-t[1]:t[1]-s[1]:dt(r,q(s,t))/ss(r)}class ye{constructor(t,e,n,r){this.firstPoint=t,this.lastPoint=e,this.negativeThickness=n,this.positiveThickness=r}get width(){return this.positiveThickness-this.negativeThickness}}const lr=3/4,ur=4/9;function cr(s){const t=et(s.firstControlPoint,s),e=et(s.lastControlPoint,s),n=t*e>0?lr:ur;return new ye(s.firstPoint,s.lastPoint,n*Math.min(0,t,e),n*Math.max(0,t,e))}function fr(s){const t=et(s.controlPoint,s);return new ye(s.firstPoint,s.lastPoint,Math.min(0,t/2),Math.max(0,t/2))}function mr(s){if(s instanceof K)return cr(s);if(s instanceof N)return fr(s);throw new Error("Not implemented")}function gr(s){const t=s.paramPoint(.5),e=G(q(t,s.firstPoint)),n=V(t,e),r={firstPoint:t,lastPoint:n},o=[et(s.firstPoint,r),et(s.lastPoint,r)];return s instanceof K?o.push(et(s.firstControlPoint,r),et(s.lastControlPoint,r)):s instanceof N&&o.push(et(s.controlPoint,r)),new ye(t,n,Math.min(...o),Math.max(...o))}function fn(s,t){const e=[];for(let n=1;n<s.length;n++){const r=s[n];if(r[1]===t){e.push(r[0]);continue}const o=s[n-1],i=t-o[1],h=t-r[1];if(i*h<0){e.push(o[0]+(t-o[1])*(r[0]-o[0])/(r[1]-o[1]));continue}}return e}class Vt{constructor(t,e){this.from=t,this.to=e}get size(){return this.from==="start"?this.to==="end"?1:this.to:this.to==="end"?1-this.from:Math.abs(this.from-this.to)}clipCurve(t){return this.from==="start"?this.to==="end"?t:t.splitAtParameters([this.to])[0]:this.to==="end"?t.splitAtParameters([this.from])[1]:t.splitAtParameters([this.from,this.to])[1]}}function pr(s,t){if(s instanceof K)return new dr([et(s.firstPoint,t),et(s.firstControlPoint,t),et(s.lastControlPoint,t),et(s.lastPoint,t)]);if(s instanceof N)return new wr([et(s.firstPoint,t),et(s.controlPoint,t),et(s.lastPoint,t)]);throw new Error("Not implemented")}class wr{constructor(t){this.distances=t,this.topHull=[],this.bottomHull=[];const[e,n,r]=t,o=[0,e],i=[1/2,n],h=[1,r],l=r-e,a=e;n-(l*(1/2)+a)>0?(this.topHull=[o,i,h],this.bottomHull=[o,h]):(this.topHull=[o,h],this.bottomHull=[o,i,h])}get startDistance(){return this.distances[0]}get endDistance(){return this.distances[2]}}class dr{constructor(t){this.distances=t,this.topHull=[],this.bottomHull=[];const[e,n,r,o]=t,i=[0,e],h=[1/3,n],l=[2/3,r],a=[1,o],c=o-e,u=e,f=n-(c*(1/3)+u),p=r-(c*(2/3)+u);let g=null,w=null;if(f*p<0)g=[i,h,a],w=[i,l,a];else{const P=f/p;P>=2?(g=[i,h,a],w=[i,a]):P<=.5?(g=[i,l,a],w=[i,a]):(g=[i,h,l,a],w=[i,a])}f<0&&([g,w]=[w,g]),this.topHull=g,this.bottomHull=w}get startDistance(){return this.distances[0]}get endDistance(){return this.distances[3]}}function mn(s,t){const e=pr(t,s),n=fn(e.topHull,s.negativeThickness),r=fn(e.bottomHull,s.positiveThickness),o=e.endDistance>=s.negativeThickness&&e.endDistance<=s.positiveThickness;if(!n.length&&!r.length)return o?new Vt("start","end"):null;if(n.length===1&&r.length===1)return new Vt(n[0],r[0]);if(n.length===2&&r.length===2)throw new Error("Bug in the clipping algorithm, unexpected number of crossing points");const i=n.length?n:r;return i.length===2?new Vt(i[0],i[1]):o?new Vt(i[0],"end"):new Vt("start",i[0])}function gn(s,t){const e=mr(s),n=mn(e,t);if(!n)return null;const r=gr(s),o=mn(r,t);return o?n.size>o.size?o.clipCurve(t):n.clipCurve(t):null}const se=s=>s instanceof N?ct(q(s.controlPoint,s.firstPoint))+ct(q(s.controlPoint,s.lastPoint)):ct(q(s.firstControlPoint,s.firstPoint))+ct(q(s.lastControlPoint,s.firstControlPoint))+ct(q(s.lastControlPoint,s.lastPoint));function kt(s,t,e=1e-9,{maxIterations:n=100}={}){const r=Math.max(e*e,Number.EPSILON*10);let o=s,i=t,h=se(o),l=se(i);for(let a=0;a<n;a++){const c=h>r?gn(i,o):o;if(!c)return[];const u=se(c),f=l>r?gn(c,i):i;if(!f)return[];const p=se(f);if(u<=r&&p<=r)return[c.boundingBox.intersection(f.boundingBox).center];if(y(c.firstPoint,c.lastPoint)&&f.isOnSegment(c.firstPoint))return[c.firstPoint];if(y(f.firstPoint,f.lastPoint)&&c.isOnSegment(f.firstPoint))return[f.firstPoint];if(u>.8*h&&p>.8*l)if(u/h>p/l){const[g,w]=c.splitAtParameters([.5]);return mt([...kt(g,f,e,{maxIterations:n-a}),...kt(w,f,e,{maxIterations:n-a})],e)}else{const[g,w]=f.splitAtParameters([.5]);return mt([...kt(c,g,e,{maxIterations:n-a}),...kt(c,w,e,{maxIterations:n-a})],e)}o=c,i=f,h=u,l=p}throw new Error("Bézier clip: Maximum number of iterations reached")}function Pr(s,t){const e=[];if([[s.firstPoint,t],[s.lastPoint,t],[t.firstPoint,s],[t.lastPoint,s]].forEach(([n,r])=>{r.isOnSegment(n)&&e.push(n)}),e.length<2)return null;if(e.length===2)return[s.splitAt(e)[1]];if(e.length===3)return y(e[0],s.firstPoint)&&y(e[1],s.lastPoint)?[s]:[t];if(e.length===4)return[s]}function Mr(s,t,e=!1){const n=Math.max(s.precision,t.precision);if(e){const r=Pr(s,t);if(r)return r}return kt(s,t,n)}function yr(s,t){const e=[];if([[s.firstPoint,t],[s.lastPoint,t],[t.firstPoint,s],[t.lastPoint,s]].forEach(([n,r])=>{r.isOnSegment(n)&&e.push(n)}),e.length<2)return null;if(e.length===2)return[s.splitAt(e)[1]];if(e.length===3)return y(e[0],s.firstPoint)&&y(e[1],s.lastPoint)?[s]:[t];if(e.length===4)return[s]}function br(s,t,e=!1){const n=Math.max(s.precision,t.precision);if(e){const r=yr(s,t);if(r)return r}return kt(s,t,n)}function xr(s,t,e){if(s instanceof B&&t instanceof B){const n=Ue(s,t,!1,e);return n===null?[]:[n]}if(s instanceof B&&t instanceof T)return ne(s,t,e);if(s instanceof T&&t instanceof B)return ne(t,s,e);if(s instanceof T&&t instanceof T)return rn(s,t,!1,e);throw new Error("Not implemented")}function zt(s,t,e){if(s instanceof B&&t instanceof B){const n=Ue(s,t,!0,e);return n===null?{intersections:[],overlaps:[],count:0}:n instanceof B?{intersections:[],overlaps:[n],count:1}:{intersections:[n],overlaps:[],count:1}}if(!s.boundingBox.overlaps(t.boundingBox))return{intersections:[],overlaps:[],count:0};if(s instanceof B&&t instanceof T){const n=ne(s,t,e);return{intersections:n,overlaps:[],count:n.length}}if(s instanceof T&&t instanceof B){const n=ne(t,s,e);return{intersections:n,overlaps:[],count:n.length}}if(s instanceof T&&t instanceof T){const n=rn(s,t,!0,e);return n.length?n[0]instanceof T?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}if(s instanceof B&&t instanceof Z){const n=Me(s,t,e);return{intersections:n,overlaps:[],count:n.length}}if(t instanceof B&&s instanceof Z){const n=Me(t,s,e);return{intersections:n,overlaps:[],count:n.length}}if(s instanceof T&&t instanceof Z){const n=hn(s,t);return{intersections:n,overlaps:[],count:n.length}}if(t instanceof T&&s instanceof Z){const n=hn(t,s);return{intersections:n,overlaps:[],count:n.length}}if(s instanceof Z&&t instanceof Z){const n=or(s,t,!0);return n.length?n[0]instanceof Z?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}if(s instanceof B&&(t instanceof K||t instanceof N)){const n=an(s,t);return{intersections:n,overlaps:[],count:n.length}}if(t instanceof B&&(s instanceof K||s instanceof N)){const n=an(t,s);return{intersections:n,overlaps:[],count:n.length}}if((s instanceof T||s instanceof Z)&&t instanceof N){const n=cn(s,t);return{intersections:n,overlaps:[],count:n.length}}if((t instanceof T||t instanceof Z)&&s instanceof N){const n=cn(t,s);return{intersections:n,overlaps:[],count:n.length}}if((s instanceof T||s instanceof Z)&&t instanceof K){const n=un(s,t);return{intersections:n,overlaps:[],count:n.length}}if((t instanceof T||t instanceof Z)&&s instanceof K){const n=un(t,s);return{intersections:n,overlaps:[],count:n.length}}if(s instanceof N&&t instanceof N){const n=br(s,t);return n.length?n[0]instanceof N?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}if(s instanceof N&&t instanceof K||t instanceof N&&s instanceof K){const n=kt(s,t);return{intersections:n,overlaps:[],count:n.length}}if(s instanceof K&&t instanceof K){const n=Mr(s,t);return n.length?n[0]instanceof K?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}throw new Error("Not implemented")}function pn(s){const t=[];for(let e=0;e<s;e++)for(let n=0;n<=e;n++)t.push([e,n]);return t}function*be(s){for(const[t,e]of pn(s.length))t!==e&&(yield[s[t],s[e]])}class wn extends At{constructor(t,{ignoreChecks:e=!1}={}){super(),this._boundingBox=null,e||dn(t),this.segments=t}get repr(){return this.segments.map(t=>t.repr).join(`
1
+ (function(tt,gt){typeof exports=="object"&&typeof module<"u"?gt(exports):typeof define=="function"&&define.amd?define(["exports"],gt):(tt=typeof globalThis<"u"?globalThis:tt||self,gt(tt.Dielines={}))})(this,function(tt){"use strict";var bo=Object.defineProperty;var xo=(tt,gt,It)=>gt in tt?bo(tt,gt,{enumerable:!0,configurable:!0,writable:!0,value:It}):tt[gt]=It;var $t=(tt,gt,It)=>xo(tt,typeof gt!="symbol"?gt+"":gt,It);var gt=Object.defineProperty,It=i=>{throw TypeError(i)},zi=(i,t,e)=>t in i?gt(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,_=(i,t,e)=>zi(i,typeof t!="symbol"?t+"":t,e),Le=(i,t,e)=>t.has(i)||It("Cannot "+e),vt=(i,t,e)=>(Le(i,t,"read from private field"),e?e.call(i):t.get(i)),Mn=(i,t,e)=>t.has(i)?It("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),Be=(i,t,e,n)=>(Le(i,t,"write to private field"),t.set(i,e),e),Pn=(i,t,e)=>(Le(i,t,"access private method"),e);function ae(i,t,e,n){return i<=n&&t>=e}let Gt=class re{constructor(t=1/0,e=1/0,n=-1/0,s=-1/0){_(this,"xMin"),_(this,"yMin"),_(this,"xMax"),_(this,"yMax"),this.xMin=t,this.yMin=e,this.xMax=n,this.yMax=s}get width(){return this.xMax-this.xMin}get height(){return this.yMax-this.yMin}get center(){return[(this.xMin+this.xMax)/2,(this.yMin+this.yMax)/2]}grow(t){return new re(this.xMin-t,this.yMin-t,this.xMax+t,this.yMax+t)}contains(t){const[e,n]=t;return ae(this.xMin,this.xMax,e,e)&&ae(this.yMin,this.yMax,n,n)}overlaps(t){return ae(this.xMin,this.xMax,t.xMin,t.xMax)&&ae(this.yMin,this.yMax,t.yMin,t.yMax)}addPoint(t){const[e,n]=t;return new re(Math.min(this.xMin,e),Math.min(this.yMin,n),Math.max(this.xMax,e),Math.max(this.yMax,n))}merge(t){return new re(Math.min(this.xMin,t.xMin),Math.min(this.yMin,t.yMin),Math.max(this.xMax,t.xMax),Math.max(this.yMax,t.yMax))}intersection(t){return new re(Math.max(this.xMin,t.xMin),Math.max(this.yMin,t.yMin),Math.min(this.xMax,t.xMax),Math.min(this.yMax,t.yMax))}};function Ve(i){return i.reduce((t,e)=>t.addPoint(e),new Gt)}const yn=(i,t=1e-9)=>{let e=i;return Math.abs(i)<t&&(e=0),e.toFixed(-Math.log10(t))};function Et(i,t=1e-9){return Array.from(new Map(i.map(([e,n])=>[`[${yn(e,t)},${yn(n,t)}]`,[e,n]])).values())}const Ft=Math.PI/180,je=180/Math.PI,et=i=>`[${i[0]}, ${i[1]}]`,k=([i,t],[e,n],s=1e-9)=>Math.abs(i-e)<=s&&Math.abs(t-n)<=s,G=([i,t],[e,n])=>[i+e,t+n],D=([i,t],[e,n])=>[i-e,t-n],At=([i,t])=>i*i+t*t,Di=([i,t])=>Math.sqrt(At([i,t])),nt=([i,t],e)=>[i*e,t*e],_t=([i,t],[e,n]=[0,0])=>(i-e)**2+(t-n)**2,Z=(i,t=[0,0])=>Math.sqrt(_t(i,t));function Ct([i,t],[e,n]){return i*n-t*e}function Ne([i,t],[e,n]){return i*e+t*n}function it([i,t]){const e=Z([i,t]);return[i/e,t/e]}function St(i,t){const e=Math.cos(t)*i,n=Math.sin(t)*i;return[e,n]}function Ui([i,t]){return Math.atan2(t,i)}function bn(i){const t=Z(i),e=Ui(i);return[t,e]}function qe(i,t,e=1e-9){const n=Ct(i,t),s=At(i),r=At(t);return n*n<s*r*e*e}function at(i){return[-i[1],i[0]]}function Zt(i){return[i[1],-i[0]]}function Yi(i,t,e){return k(e,i)||qe(D(e,i),t)}const Nt=(i,t)=>{const[e,n,s,r,o,a,h,l,c]=i,[u,m,w,g,p,P,f,M,b]=t;return[e*u+n*g+s*f,e*m+n*p+s*M,e*w+n*P+s*b,r*u+o*g+a*f,r*m+o*p+a*M,r*w+o*P+a*b,h*u+l*g+c*f,h*m+l*p+c*M,h*w+l*P+c*b]},Xi=i=>{const[t,e,n,s,r,o,a,h,l]=i,c=t*(r*l-o*h)-e*(s*l-o*a)+n*(s*h-r*a);return[(r*l-o*h)/c,(n*h-e*l)/c,(e*o-n*r)/c,(o*a-s*l)/c,(t*l-n*a)/c,(n*s-t*o)/c,(s*h-r*a)/c,(e*a-t*h)/c,(t*r-e*s)/c]},Hi=i=>{const[t,e,n,s,r,o,a,h,l]=i;return[t,s,a,e,r,h,n,o,l]};let pt=class qi{constructor(t){_(this,"_matrix",[1,0,0,0,1,0,0,0,1]),t&&(this._matrix=[...t])}clone(){return new qi(this._matrix)}transpose(){return this._matrix=Hi(this._matrix),this}inverse(){return this._matrix=Xi(this._matrix),this}translate(t,e){return this._matrix=Nt(this._matrix,[1,0,t,0,1,e,0,0,1]),this}rotate(t,e){const n=Math.cos(t),s=Math.sin(t),r=[n,-s,0,s,n,0,0,0,1];return e&&this.translate(e[0],e[1]),this._matrix=Nt(this._matrix,r),e&&this.translate(-e[0],-e[1]),this}mirrorX(){return this._matrix=Nt(this._matrix,[1,0,0,0,-1,0,0,0,1]),this}mirrorY(){return this._matrix=Nt(this._matrix,[-1,0,0,0,1,0,0,0,1]),this}mirrorLine(t,e){const[n,s]=t,r=Math.atan2(s,n);return e&&this.translate(e[0],e[1]),this.rotate(r),this.mirrorX(),this.rotate(-r),e&&this.translate(-e[0],-e[1]),this}mirrorCenter(t){return t&&this.translate(t[0],t[1]),this._matrix=Nt(this._matrix,[-1,0,0,0,-1,0,0,0,1]),t&&this.translate(-t[0],-t[1]),this}scale(t,e){return e&&this.translate(e[0],e[1]),this._matrix=Nt(this._matrix,[t,0,0,0,t,0,0,0,1]),e&&this.translate(-e[0],-e[1]),this}transform(t){const[e,n]=t,[s,r,o,a,h,l]=this._matrix;return[s*e+r*n+o,a*e+h*n+l]}transformAngle(t){const[e,n]=this.transform([Math.cos(t),Math.sin(t)]),[s,r]=this.transform([0,0]);return Math.atan2(n-r,e-s)}keepsOrientation(){const[t,,,,e]=this._matrix;return t*e>0}scaleFactor(){const[t,,,e]=this._matrix;return Math.sqrt(t*t+e*e)}};class Lt{translateX(t){const e=new pt().translate(t,0);return this.transform(e)}translateY(t){const e=new pt().translate(0,t);return this.transform(e)}translate(t,e){const n=new pt().translate(t,e);return this.transform(n)}translateTo([t,e]){const n=new pt().translate(t,e);return this.transform(n)}rotate(t,e){const n=new pt().rotate(t*Ft,e);return this.transform(n)}scale(t,e){const n=new pt().scale(t,e);return this.transform(n)}mirrorCenter(t){const e=new pt().mirrorCenter(t);return this.transform(e)}mirror(t="x",e){const n=new pt;return t==="x"?n.mirrorX():t==="y"?n.mirrorY():n.mirrorLine(t,e),this.transform(n)}}let Jt=class extends Lt{constructor(t,e){super(),_(this,"precision",1e-9),this.firstPoint=t,this.lastPoint=e,this.firstPoint=t,this.lastPoint=e}get repr(){return`${this.segmentType} ${et(this.firstPoint)} - ${et(this.lastPoint)}`}get info(){return this.repr}[Symbol.for("nodejs.util.inspect.custom")](){return this.repr}};class N extends Jt{constructor(){super(...arguments),_(this,"segmentType","LINE"),_(this,"_V",null),_(this,"_slope",null),_(this,"_yIntercept",null),_(this,"_boundingBox",null)}isValidParameter(t){const e=this.length*this.precision;return t>=-e&&1-t>=-e}paramPoint(t){return G(this.firstPoint,nt(this.V,t))}get length(){return Z(this.firstPoint,this.lastPoint)}get squareLength(){return _t(this.firstPoint,this.lastPoint)}get V(){return this._V===null&&(this._V=D(this.lastPoint,this.firstPoint)),this._V}get slope(){if(this._slope===null){const[t,e]=this.V;this._slope=e/t}return this._slope}get yIntercept(){return this._yIntercept===null&&(this._yIntercept=this.firstPoint[1]-this.slope*this.firstPoint[0]),this._yIntercept}get midPoint(){return G(this.firstPoint,nt(this.V,.5))}isSame(t){return t instanceof N?k(this.firstPoint,t.firstPoint)&&k(this.lastPoint,t.lastPoint)||k(this.lastPoint,t.firstPoint)&&k(this.firstPoint,t.lastPoint):!1}clone(){return new N(this.firstPoint,this.lastPoint)}reverse(){return new N(this.lastPoint,this.firstPoint)}get boundingBox(){return this._boundingBox===null&&(this._boundingBox=new Gt(Math.min(this.firstPoint[0],this.lastPoint[0])-this.precision,Math.min(this.firstPoint[1],this.lastPoint[1])-this.precision,Math.max(this.firstPoint[0],this.lastPoint[0])+this.precision,Math.max(this.firstPoint[1],this.lastPoint[1])+this.precision)),this._boundingBox}distanceFrom(t){const e=D(t,this.firstPoint),n=Ne(e,this.V)/this.squareLength;if(n<0)return Z(t,this.firstPoint);if(n>1)return Z(t,this.lastPoint);const s=this.paramPoint(n);return Z(t,s)}isOnSegment(t){if(k(t,this.firstPoint,this.precision))return!0;const e=D(t,this.firstPoint);if(!qe(this.V,e))return!1;const n=Ne(e,this.V)/this.squareLength;return this.isValidParameter(n)}gradientAt(t){return this.V}tangentAt(t){if(!this.isOnSegment(t))throw new Error("Point is not on segment");return it(this.V)}get normalVector(){return at(it(this.V))}get tangentAtFirstPoint(){return it(this.V)}get tangentAtLastPoint(){return it(this.V)}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t],e.forEach(h=>{if(!this.isOnSegment(h))throw new Error(`Point ${et(h)} is not on segment ${this.repr}`)});const n=[this.firstPoint,...e,this.lastPoint],s=Et(n),r=this.lastPoint[0]-this.firstPoint[0];let o=Math.sign(r),a=0;return Math.abs(r)<this.precision&&(o=Math.sign(this.lastPoint[1]-this.firstPoint[1]),a=1),s.sort((h,l)=>o*(h[a]-l[a])),s.flatMap((h,l)=>l===s.length-1?[]:new N(h,s[l+1]))}transform(t){return new N(t.transform(this.firstPoint),t.transform(this.lastPoint))}}function Wi(i){return Array.from(Array(i).keys())}function xt(i){const t=Math.min(...i.map(e=>e.length));return Wi(t).map(e=>i.map(n=>n[e]))}function Bt(i,t=1e-9){return i<0?i+2*Math.PI:i>=2*Math.PI?i%(2*Math.PI):i>2*Math.PI-t?0:i}function he(i,t,e,n=1e-9){let s=t-i;return e&&(s=-s),s<0&&(s+=2*Math.PI),s>2*Math.PI-n?0:s}const le=(i,t,e)=>{const n=Ct(i.V,t.V),s=At(i.V),r=At(t.V),o=e?e*e:i.precision*t.precision;if(n*n<s*r*o)return"parallel";const a=D(t.firstPoint,i.firstPoint),h=Ct(a,t.V)/n,l=Ct(a,i.V)/n;return{intersectionParam1:h,intersectionParam2:l}};function xn(i,t,e=!1,n){const s=le(i,t,n);if(s==="parallel"){if(!e)return null;if(i.isSame(t))return i;const a=Et([t.isOnSegment(i.firstPoint)?i.firstPoint:null,t.isOnSegment(i.lastPoint)?i.lastPoint:null,i.isOnSegment(t.firstPoint)?t.firstPoint:null,i.isOnSegment(t.lastPoint)?t.lastPoint:null].filter(h=>h!==null)).sort((h,l)=>h[0]-l[0]);if(a.length===0||a.length===1)return null;if(a.length===2)return new N(a[0],a[1]);throw console.error(a),new Error("Unexpected number of points while intersecting parallel lines")}const{intersectionParam1:r,intersectionParam2:o}=s;return!i.isValidParameter(r)||!t.isValidParameter(o)?null:i.paramPoint(r)}const ue=(i,t)=>{const e=D(i,t);return bn(e)};let z=class Ht extends Jt{constructor(t,e,n,s=!1,{ignoreChecks:r=!1}={}){if(super(t,e),_(this,"segmentType","ARC"),_(this,"center"),_(this,"clockwise"),_(this,"_coefficients",null),_(this,"_angularLength",null),_(this,"_radius",null),_(this,"_firstAngle",null),_(this,"_lastAngle",null),_(this,"_boundingBox",null),this.center=n,this.clockwise=s,!r){if(k(t,e))throw new Error("Invalid arc, cannot be a full circle");if(Math.abs(this.radius-Z(this.lastPoint,this.center))>this.precision)throw new Error(`Invalid arc, radius does not match between ${et(t)} and ${et(e)}} (center ${et(n)})`)}}get info(){return`ARC(${et(this.firstPoint)}, ${et(this.lastPoint)}, ${et(this.center)}, ${this.clockwise?"CW":"CCW"})`}get coefficients(){if(this._coefficients===null){const[t,e]=this.center,n=this.radius*this.radius;this._coefficients={x2:1/n,xy:0,y2:1/n,x:-(2*t)/n,y:-(2*e)/n,c:(t*t+e*e-n)/n}}return this._coefficients}isValidParameter(t){return 1-t>=-this.precision&&t>=-this.precision}angleToParam(t){return he(this.firstAngle,Bt(t),this.clockwise)/this.angularLength}get angularLength(){return this._angularLength||(this._angularLength=he(this.firstAngle,this.lastAngle,this.clockwise)),this._angularLength}paramPoint(t){return G(this.center,St(this.radius,this.firstAngle+t*this.angularLength*(this.clockwise?-1:1)))}pointToParam(t){const[e,n]=ue(t,this.center);if(Math.abs(e-this.radius)>this.precision)throw new Error(`Point ${et(t)} is not on segment ${this.repr}`);const s=this.angleToParam(n);if(!this.isValidParameter(s))throw new Error(`Point ${et(t)} is not on segment ${this.repr}`);return s}get radius(){return this._radius===null&&(this._radius=Z(this.firstPoint,this.center)),this._radius}get firstAngle(){if(this._firstAngle===null){const[t,e]=D(this.firstPoint,this.center);this._firstAngle=Bt(Math.atan2(e,t))}return this._firstAngle}get lastAngle(){if(this._lastAngle===null){const[t,e]=D(this.lastPoint,this.center);this._lastAngle=Bt(Math.atan2(e,t))}return this._lastAngle}get length(){return this.radius*this.angularLength}get squareLength(){return this.length*this.length}get midPoint(){return this.paramPoint(.5)}isSame(t){return!(t instanceof Ht)||!k(this.center,t.center)?!1:k(this.firstPoint,t.firstPoint)&&k(this.lastPoint,t.lastPoint)&&this.clockwise===t.clockwise||k(this.lastPoint,t.firstPoint)&&k(this.firstPoint,t.lastPoint)&&this.clockwise===!t.clockwise}clone(){return new Ht(this.firstPoint,this.lastPoint,this.center,this.clockwise)}reverse(){return new Ht(this.lastPoint,this.firstPoint,this.center,!this.clockwise)}get boundingBox(){if(this._boundingBox===null){const t=this.radius+this.precision,e=n=>this.isValidParameter(this.angleToParam(n));this._boundingBox=new Gt(e(Math.PI)?this.center[0]-t:Math.min(this.firstPoint[0],this.lastPoint[0])-this.precision,e(Math.PI*1.5)?this.center[1]-t:Math.min(this.firstPoint[1],this.lastPoint[1])-this.precision,e(0)?this.center[0]+t:Math.max(this.firstPoint[0],this.lastPoint[0])+this.precision,e(Math.PI/2)?this.center[1]+t:Math.max(this.firstPoint[1],this.lastPoint[1])+this.precision)}return this._boundingBox}distanceFrom(t){const[e,n]=ue(t,this.center);return this.isValidParameter(this.angleToParam(n))?Math.abs(e-this.radius):Math.sqrt(Math.min(_t(t,this.firstPoint),_t(t,this.lastPoint)))}isOnSegment(t){if(k(t,this.firstPoint)||k(t,this.lastPoint))return!0;const[e,n]=ue(t,this.center);if(Math.abs(e-this.radius)>this.precision)return!1;const s=this.angleToParam(n);return this.isValidParameter(s)}gradientAt(t){const e=this.firstAngle+t*this.angularLength*(this.clockwise?-1:1),n=this.radius*this.angularLength,s=-n*Math.sin(e),r=n*Math.cos(e);return this.clockwise?[-s,-r]:[s,r]}tangentAt(t){const[e,n]=ue(t,this.center);if(Math.abs(e-this.radius)>this.precision)throw new Error("Point is not on the arc");const s=this.angleToParam(n);if(!this.isValidParameter(s))throw new Error("Point is not on the arc");const r=St(1,n);return(this.clockwise?Zt:at)(it(r))}get tangentAtFirstPoint(){const t=St(1,this.firstAngle);return(this.clockwise?Zt:at)(it(t))}get tangentAtLastPoint(){const t=St(1,this.lastAngle);return(this.clockwise?Zt:at)(it(t))}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=[0,1,...e.map(o=>this.pointToParam(o))],s=new Map(xt([n,[this.firstPoint,this.lastPoint,...e]]));n.sort((o,a)=>o-a);let r=null;return n.flatMap((o,a)=>{if(a===n.length-1)return[];const h=n[a+1];if(h-o<this.precision)return r===null&&(r=o),[];const l=r===null?o:r,c=new Ht(s.get(l)||this.paramPoint(l),s.get(h)||this.paramPoint(h),this.center,this.clockwise);return r=null,c})}transform(t){return new Ht(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.center),t.keepsOrientation()?this.clockwise:!this.clockwise)}};function Qi(i,t,e){const n=new N(t,i),s=new N(t,e),r=at(n.tangentAtFirstPoint),o=at(s.tangentAtLastPoint),a=le({firstPoint:n.midPoint,V:r,precision:1e-9},{firstPoint:s.midPoint,V:o,precision:1e-9});if(a==="parallel")throw new Error("Cannot create an arc from three colinear points");const h=Ct(D(i,t),D(e,t))>0;return new z(i,e,G(n.midPoint,nt(r,a.intersectionParam1)),h,{ignoreChecks:!0})}function vn(i,t,e){const n=new N(t,i),s=at(n.tangentAtFirstPoint),r=le({firstPoint:n.midPoint,V:s,precision:1e-9},{firstPoint:i,V:at(e),precision:1e-9});if(r==="parallel")throw new Error("Cannot create an arc from three colinear points");const o=G(n.midPoint,nt(s,r.intersectionParam1)),a=Ct(D(o,i),D(o,G(i,e)))<0;return new z(i,t,o,a,{ignoreChecks:!0})}const An=1e-21,ce=1.618034;function En(i,t=0,e=1,n=110,s=1e3){let r,o,a,h,l,c,u,m,w,g,p,P,f;for(o=i(t),a=i(e),o<a&&([t,e]=[e,t],[o,a]=[a,o]),f=e+ce*(e-t),h=i(f),l=3,u=0;h<a;){if(m=(e-t)*(a-h),w=(e-f)*(a-o),g=w-m,Math.abs(g)<An?r=2*An:r=2*g,p=e-((e-f)*w-(e-t)*m)/r,P=e+n*(f-e),u>s)throw new Error("Too many iterations.");if(u+=1,(p-f)*(e-p)>0){if(c=i(p),l+=1,c<h)return t=e,e=p,o=a,a=c,[t,e,f,o,a,h,l];if(c>a)return f=p,h=c,[t,e,f,o,a,h,l];p=f+ce*(f-e),c=i(p),l+=1}else(p-P)*(P-f)>=0?(p=P,c=i(p),l+=1):(p-P)*(f-p)>0?(c=i(p),l+=1,c<h&&(e=f,f=p,p=f+ce*(f-e),a=h,h=c,c=i(p),l+=1)):(p=f+ce*(f-e),c=i(p),l+=1);t=e,e=f,f=p,o=a,a=h,h=c}return[t,e,f,o,a,h,l]}const Sn=.381966,Gi=1e-11;class Zi{constructor(t,e=148e-10,n=500){_(this,"xmin"),_(this,"fval"),_(this,"iter"),_(this,"funcalls"),_(this,"brack"),this.func=t,this.tol=e,this.maxiter=n,this.func=t,this.tol=e,this.maxiter=n,this.xmin=1/0,this.fval=1/0,this.iter=0,this.funcalls=0,this.brack=null}setBracket(t=null){this.brack=t}getBracketInfo(){let t,e,n,s,r,o,a;const h=this.func,l=this.brack;if(l===null)[r,o,a,t,e,n,s]=En(h);else if(l.length===2)[r,o,a,t,e,n,s]=En(h,l[0],l[1]);else if(l.length===3){if([r,o,a]=l,r>a&&([a,r]=[r,a]),!(r<o&&o<a))throw new Error("Not a bracketing interval.");if(t=h(r),e=h(o),n=h(a),!(e<t&&e<n))throw new Error("Not a bracketing interval.");s=3}else throw new Error("Bracketing interval must be length 2 or 3 sequence.");return[r,o,a,t,e,n,s]}optimize(){const t=this.func;let[e,n,s,,,,r]=this.getBracketInfo(),o=n,a=n,h=n,l=t(o),c=l,u=l,m,w;e<s?(m=e,w=s):(m=s,w=e);let g=0;r=1;let p=0,P=0,f;for(;p<this.maxiter;){const M=this.tol*Math.abs(o)+Gi,b=2*M,R=.5*(m+w);if(Math.abs(o-R)<b-.5*(w-m))break;if(Math.abs(g)<=M)o>=R?g=m-o:g=w-o,P=Sn*g;else{const V=(o-a)*(u-c);let v=(o-h)*(u-l),S=(o-h)*v-(o-a)*V;v=2*(v-V),v>0&&(S=-S),v=Math.abs(v);const j=g;g=P,S>v*(m-o)&&S<v*(w-o)&&Math.abs(S)<Math.abs(.5*v*j)?(P=S*1/v,f=o+P,(f-m<b||w-f<b)&&(R-o>=0?P=M:P=-M)):(o>=R?g=m-o:g=w-o,P=Sn*g)}Math.abs(P)<M?P>=0?f=o+M:f=o-M:f=o+P;const C=t(f);r+=1,C>u?(f<o?m=f:w=f,C<=l||a===o?(h=a,a=f,c=l,l=C):(C<=c||h===o||h===a)&&(h=f,c=C)):(f>=o?m=o:w=o,h=a,a=o,o=f,c=l,l=u,u=C),p+=1}this.xmin=o,this.fval=u,this.iter=p,this.funcalls=r}results(){return{argMin:this.xmin,fMin:this.fval,iterations:this.iter,funcCalls:this.funcalls}}run(){return this.optimize(),this.results()}}function kn(i,t=1e-8,e=1e3){const n=new Zi(i,t,e);return n.setBracket([0,1]),n.run()}function Rn(i){if(i.__esModule)return i;var t=i.default;if(typeof t=="function"){var e=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};e.prototype=t.prototype}else e={};return Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(i).forEach(function(n){var s=Object.getOwnPropertyDescriptor(i,n);Object.defineProperty(e,n,s.get?s:{enumerable:!0,get:function(){return i[n]}})}),e}var q={};const Ji=Object.prototype.toString;function Kt(i){const t=Ji.call(i);return t.endsWith("Array]")&&!t.includes("Big")}const Ki=Object.freeze(Object.defineProperty({__proto__:null,isAnyArray:Kt},Symbol.toStringTag,{value:"Module"})),ts=Rn(Ki);function es(i){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Kt(i))throw new TypeError("input must be an array");if(i.length===0)throw new TypeError("input must not be empty");var e=t.fromIndex,n=e===void 0?0:e,s=t.toIndex,r=s===void 0?i.length:s;if(n<0||n>=i.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(r<=n||r>i.length||!Number.isInteger(r))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=i[n],a=n+1;a<r;a++)i[a]>o&&(o=i[a]);return o}function ns(i){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Kt(i))throw new TypeError("input must be an array");if(i.length===0)throw new TypeError("input must not be empty");var e=t.fromIndex,n=e===void 0?0:e,s=t.toIndex,r=s===void 0?i.length:s;if(n<0||n>=i.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(r<=n||r>i.length||!Number.isInteger(r))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=i[n],a=n+1;a<r;a++)i[a]<o&&(o=i[a]);return o}function is(i){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(Kt(i)){if(i.length===0)throw new TypeError("input must not be empty")}else throw new TypeError("input must be an array");var e;if(t.output!==void 0){if(!Kt(t.output))throw new TypeError("output option must be an array if specified");e=t.output}else e=new Array(i.length);var n=ns(i),s=es(i);if(n===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var r=t.min,o=r===void 0?t.autoMinMax?n:0:r,a=t.max,h=a===void 0?t.autoMinMax?s:1:a;if(o>=h)throw new RangeError("min option must be smaller than max option");for(var l=(h-o)/(s-n),c=0;c<i.length;c++)e[c]=(i[c]-n)*l+o;return e}const ss=Object.freeze(Object.defineProperty({__proto__:null,default:is},Symbol.toStringTag,{value:"Module"})),rs=Rn(ss);Object.defineProperty(q,"__esModule",{value:!0});var ft=ts,Cn=rs;const fe=" ".repeat(2),Tn=" ".repeat(4);function os(){return $n(this)}function $n(i,t={}){const{maxRows:e=15,maxColumns:n=10,maxNumSize:s=8,padMinus:r="auto"}=t;return`${i.constructor.name} {
2
+ ${fe}[
3
+ ${Tn}${as(i,e,n,s,r)}
4
+ ${fe}]
5
+ ${fe}rows: ${i.rows}
6
+ ${fe}columns: ${i.columns}
7
+ }`}function as(i,t,e,n,s){const{rows:r,columns:o}=i,a=Math.min(r,t),h=Math.min(o,e),l=[];if(s==="auto"){s=!1;t:for(let c=0;c<a;c++)for(let u=0;u<h;u++)if(i.get(c,u)<0){s=!0;break t}}for(let c=0;c<a;c++){let u=[];for(let m=0;m<h;m++)u.push(hs(i.get(c,m),n,s));l.push(`${u.join(" ")}`)}return h!==o&&(l[l.length-1]+=` ... ${o-e} more columns`),a!==r&&l.push(`... ${r-t} more rows`),l.join(`
8
+ ${Tn}`)}function hs(i,t,e){return(i>=0&&e?` ${In(i,t-1)}`:In(i,t)).padEnd(t)}function In(i,t){let e=i.toString();if(e.length<=t)return e;let n=i.toFixed(t);if(n.length>t&&(n=i.toFixed(Math.max(0,t-(n.length-t)))),n.length<=t&&!n.startsWith("0.000")&&!n.startsWith("-0.000"))return n;let s=i.toExponential(t);return s.length>t&&(s=i.toExponential(Math.max(0,t-(s.length-t)))),s.slice(0)}function ls(i,t){i.prototype.add=function(e){return typeof e=="number"?this.addS(e):this.addM(e)},i.prototype.addS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)+e);return this},i.prototype.addM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)+e.get(n,s));return this},i.add=function(e,n){return new t(e).add(n)},i.prototype.sub=function(e){return typeof e=="number"?this.subS(e):this.subM(e)},i.prototype.subS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)-e);return this},i.prototype.subM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)-e.get(n,s));return this},i.sub=function(e,n){return new t(e).sub(n)},i.prototype.subtract=i.prototype.sub,i.prototype.subtractS=i.prototype.subS,i.prototype.subtractM=i.prototype.subM,i.subtract=i.sub,i.prototype.mul=function(e){return typeof e=="number"?this.mulS(e):this.mulM(e)},i.prototype.mulS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)*e);return this},i.prototype.mulM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)*e.get(n,s));return this},i.mul=function(e,n){return new t(e).mul(n)},i.prototype.multiply=i.prototype.mul,i.prototype.multiplyS=i.prototype.mulS,i.prototype.multiplyM=i.prototype.mulM,i.multiply=i.mul,i.prototype.div=function(e){return typeof e=="number"?this.divS(e):this.divM(e)},i.prototype.divS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)/e);return this},i.prototype.divM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)/e.get(n,s));return this},i.div=function(e,n){return new t(e).div(n)},i.prototype.divide=i.prototype.div,i.prototype.divideS=i.prototype.divS,i.prototype.divideM=i.prototype.divM,i.divide=i.div,i.prototype.mod=function(e){return typeof e=="number"?this.modS(e):this.modM(e)},i.prototype.modS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)%e);return this},i.prototype.modM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)%e.get(n,s));return this},i.mod=function(e,n){return new t(e).mod(n)},i.prototype.modulus=i.prototype.mod,i.prototype.modulusS=i.prototype.modS,i.prototype.modulusM=i.prototype.modM,i.modulus=i.mod,i.prototype.and=function(e){return typeof e=="number"?this.andS(e):this.andM(e)},i.prototype.andS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)&e);return this},i.prototype.andM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)&e.get(n,s));return this},i.and=function(e,n){return new t(e).and(n)},i.prototype.or=function(e){return typeof e=="number"?this.orS(e):this.orM(e)},i.prototype.orS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)|e);return this},i.prototype.orM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)|e.get(n,s));return this},i.or=function(e,n){return new t(e).or(n)},i.prototype.xor=function(e){return typeof e=="number"?this.xorS(e):this.xorM(e)},i.prototype.xorS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)^e);return this},i.prototype.xorM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)^e.get(n,s));return this},i.xor=function(e,n){return new t(e).xor(n)},i.prototype.leftShift=function(e){return typeof e=="number"?this.leftShiftS(e):this.leftShiftM(e)},i.prototype.leftShiftS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)<<e);return this},i.prototype.leftShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)<<e.get(n,s));return this},i.leftShift=function(e,n){return new t(e).leftShift(n)},i.prototype.signPropagatingRightShift=function(e){return typeof e=="number"?this.signPropagatingRightShiftS(e):this.signPropagatingRightShiftM(e)},i.prototype.signPropagatingRightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)>>e);return this},i.prototype.signPropagatingRightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)>>e.get(n,s));return this},i.signPropagatingRightShift=function(e,n){return new t(e).signPropagatingRightShift(n)},i.prototype.rightShift=function(e){return typeof e=="number"?this.rightShiftS(e):this.rightShiftM(e)},i.prototype.rightShiftS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)>>>e);return this},i.prototype.rightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)>>>e.get(n,s));return this},i.rightShift=function(e,n){return new t(e).rightShift(n)},i.prototype.zeroFillRightShift=i.prototype.rightShift,i.prototype.zeroFillRightShiftS=i.prototype.rightShiftS,i.prototype.zeroFillRightShiftM=i.prototype.rightShiftM,i.zeroFillRightShift=i.rightShift,i.prototype.not=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,~this.get(e,n));return this},i.not=function(e){return new t(e).not()},i.prototype.abs=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.abs(this.get(e,n)));return this},i.abs=function(e){return new t(e).abs()},i.prototype.acos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acos(this.get(e,n)));return this},i.acos=function(e){return new t(e).acos()},i.prototype.acosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.acosh(this.get(e,n)));return this},i.acosh=function(e){return new t(e).acosh()},i.prototype.asin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asin(this.get(e,n)));return this},i.asin=function(e){return new t(e).asin()},i.prototype.asinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.asinh(this.get(e,n)));return this},i.asinh=function(e){return new t(e).asinh()},i.prototype.atan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atan(this.get(e,n)));return this},i.atan=function(e){return new t(e).atan()},i.prototype.atanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.atanh(this.get(e,n)));return this},i.atanh=function(e){return new t(e).atanh()},i.prototype.cbrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cbrt(this.get(e,n)));return this},i.cbrt=function(e){return new t(e).cbrt()},i.prototype.ceil=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.ceil(this.get(e,n)));return this},i.ceil=function(e){return new t(e).ceil()},i.prototype.clz32=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.clz32(this.get(e,n)));return this},i.clz32=function(e){return new t(e).clz32()},i.prototype.cos=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cos(this.get(e,n)));return this},i.cos=function(e){return new t(e).cos()},i.prototype.cosh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.cosh(this.get(e,n)));return this},i.cosh=function(e){return new t(e).cosh()},i.prototype.exp=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.exp(this.get(e,n)));return this},i.exp=function(e){return new t(e).exp()},i.prototype.expm1=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.expm1(this.get(e,n)));return this},i.expm1=function(e){return new t(e).expm1()},i.prototype.floor=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.floor(this.get(e,n)));return this},i.floor=function(e){return new t(e).floor()},i.prototype.fround=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.fround(this.get(e,n)));return this},i.fround=function(e){return new t(e).fround()},i.prototype.log=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log(this.get(e,n)));return this},i.log=function(e){return new t(e).log()},i.prototype.log1p=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log1p(this.get(e,n)));return this},i.log1p=function(e){return new t(e).log1p()},i.prototype.log10=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log10(this.get(e,n)));return this},i.log10=function(e){return new t(e).log10()},i.prototype.log2=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.log2(this.get(e,n)));return this},i.log2=function(e){return new t(e).log2()},i.prototype.round=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.round(this.get(e,n)));return this},i.round=function(e){return new t(e).round()},i.prototype.sign=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sign(this.get(e,n)));return this},i.sign=function(e){return new t(e).sign()},i.prototype.sin=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sin(this.get(e,n)));return this},i.sin=function(e){return new t(e).sin()},i.prototype.sinh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sinh(this.get(e,n)));return this},i.sinh=function(e){return new t(e).sinh()},i.prototype.sqrt=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.sqrt(this.get(e,n)));return this},i.sqrt=function(e){return new t(e).sqrt()},i.prototype.tan=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tan(this.get(e,n)));return this},i.tan=function(e){return new t(e).tan()},i.prototype.tanh=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.tanh(this.get(e,n)));return this},i.tanh=function(e){return new t(e).tanh()},i.prototype.trunc=function(){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.trunc(this.get(e,n)));return this},i.trunc=function(e){return new t(e).trunc()},i.pow=function(e,n){return new t(e).pow(n)},i.prototype.pow=function(e){return typeof e=="number"?this.powS(e):this.powM(e)},i.prototype.powS=function(e){for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)**e);return this},i.prototype.powM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.set(n,s,this.get(n,s)**e.get(n,s));return this}}function Mt(i,t,e){let n=e?i.rows:i.rows-1;if(t<0||t>n)throw new RangeError("Row index out of range")}function Pt(i,t,e){let n=e?i.columns:i.columns-1;if(t<0||t>n)throw new RangeError("Column index out of range")}function qt(i,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==i.columns)throw new RangeError("vector size must be the same as the number of columns");return t}function Ot(i,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==i.rows)throw new RangeError("vector size must be the same as the number of rows");return t}function Oe(i,t){if(!ft.isAnyArray(t))throw new TypeError("row indices must be an array");for(let e=0;e<t.length;e++)if(t[e]<0||t[e]>=i.rows)throw new RangeError("row indices are out of range")}function ze(i,t){if(!ft.isAnyArray(t))throw new TypeError("column indices must be an array");for(let e=0;e<t.length;e++)if(t[e]<0||t[e]>=i.columns)throw new RangeError("column indices are out of range")}function De(i,t,e,n,s){if(arguments.length!==5)throw new RangeError("expected 4 arguments");if(ge("startRow",t),ge("endRow",e),ge("startColumn",n),ge("endColumn",s),t>e||n>s||t<0||t>=i.rows||e<0||e>=i.rows||n<0||n>=i.columns||s<0||s>=i.columns)throw new RangeError("Submatrix indices are out of range")}function me(i,t=0){let e=[];for(let n=0;n<i;n++)e.push(t);return e}function ge(i,t){if(typeof t!="number")throw new TypeError(`${i} must be a number`)}function zt(i){if(i.isEmpty())throw new Error("Empty matrix has no elements to index")}function us(i){let t=me(i.rows);for(let e=0;e<i.rows;++e)for(let n=0;n<i.columns;++n)t[e]+=i.get(e,n);return t}function cs(i){let t=me(i.columns);for(let e=0;e<i.rows;++e)for(let n=0;n<i.columns;++n)t[n]+=i.get(e,n);return t}function fs(i){let t=0;for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)t+=i.get(e,n);return t}function ms(i){let t=me(i.rows,1);for(let e=0;e<i.rows;++e)for(let n=0;n<i.columns;++n)t[e]*=i.get(e,n);return t}function gs(i){let t=me(i.columns,1);for(let e=0;e<i.rows;++e)for(let n=0;n<i.columns;++n)t[n]*=i.get(e,n);return t}function ps(i){let t=1;for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)t*=i.get(e,n);return t}function ws(i,t,e){const n=i.rows,s=i.columns,r=[];for(let o=0;o<n;o++){let a=0,h=0,l=0;for(let c=0;c<s;c++)l=i.get(o,c)-e[o],a+=l,h+=l*l;t?r.push((h-a*a/s)/(s-1)):r.push((h-a*a/s)/s)}return r}function ds(i,t,e){const n=i.rows,s=i.columns,r=[];for(let o=0;o<s;o++){let a=0,h=0,l=0;for(let c=0;c<n;c++)l=i.get(c,o)-e[o],a+=l,h+=l*l;t?r.push((h-a*a/n)/(n-1)):r.push((h-a*a/n)/n)}return r}function Ms(i,t,e){const n=i.rows,s=i.columns,r=n*s;let o=0,a=0,h=0;for(let l=0;l<n;l++)for(let c=0;c<s;c++)h=i.get(l,c)-e,o+=h,a+=h*h;return t?(a-o*o/r)/(r-1):(a-o*o/r)/r}function Ps(i,t){for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)i.set(e,n,i.get(e,n)-t[e])}function ys(i,t){for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)i.set(e,n,i.get(e,n)-t[n])}function bs(i,t){for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)i.set(e,n,i.get(e,n)-t)}function xs(i){const t=[];for(let e=0;e<i.rows;e++){let n=0;for(let s=0;s<i.columns;s++)n+=i.get(e,s)**2/(i.columns-1);t.push(Math.sqrt(n))}return t}function vs(i,t){for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)i.set(e,n,i.get(e,n)/t[e])}function As(i){const t=[];for(let e=0;e<i.columns;e++){let n=0;for(let s=0;s<i.rows;s++)n+=i.get(s,e)**2/(i.rows-1);t.push(Math.sqrt(n))}return t}function Es(i,t){for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)i.set(e,n,i.get(e,n)/t[n])}function Ss(i){const t=i.size-1;let e=0;for(let n=0;n<i.columns;n++)for(let s=0;s<i.rows;s++)e+=i.get(s,n)**2/t;return Math.sqrt(e)}function ks(i,t){for(let e=0;e<i.rows;e++)for(let n=0;n<i.columns;n++)i.set(e,n,i.get(e,n)/t)}let Q=class st{static from1DArray(t,e,n){if(t*e!==n.length)throw new RangeError("data length does not match given dimensions");let s=new E(t,e);for(let r=0;r<t;r++)for(let o=0;o<e;o++)s.set(r,o,n[r*e+o]);return s}static rowVector(t){let e=new E(1,t.length);for(let n=0;n<t.length;n++)e.set(0,n,t[n]);return e}static columnVector(t){let e=new E(t.length,1);for(let n=0;n<t.length;n++)e.set(n,0,t[n]);return e}static zeros(t,e){return new E(t,e)}static ones(t,e){return new E(t,e).fill(1)}static rand(t,e,n={}){if(typeof n!="object")throw new TypeError("options must be an object");const{random:s=Math.random}=n;let r=new E(t,e);for(let o=0;o<t;o++)for(let a=0;a<e;a++)r.set(o,a,s());return r}static randInt(t,e,n={}){if(typeof n!="object")throw new TypeError("options must be an object");const{min:s=0,max:r=1e3,random:o=Math.random}=n;if(!Number.isInteger(s))throw new TypeError("min must be an integer");if(!Number.isInteger(r))throw new TypeError("max must be an integer");if(s>=r)throw new RangeError("min must be smaller than max");let a=r-s,h=new E(t,e);for(let l=0;l<t;l++)for(let c=0;c<e;c++){let u=s+Math.round(o()*a);h.set(l,c,u)}return h}static eye(t,e,n){e===void 0&&(e=t),n===void 0&&(n=1);let s=Math.min(t,e),r=this.zeros(t,e);for(let o=0;o<s;o++)r.set(o,o,n);return r}static diag(t,e,n){let s=t.length;e===void 0&&(e=s),n===void 0&&(n=e);let r=Math.min(s,e,n),o=this.zeros(e,n);for(let a=0;a<r;a++)o.set(a,a,t[a]);return o}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,s=t.columns,r=new E(n,s);for(let o=0;o<n;o++)for(let a=0;a<s;a++)r.set(o,a,Math.min(t.get(o,a),e.get(o,a)));return r}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,s=t.columns,r=new this(n,s);for(let o=0;o<n;o++)for(let a=0;a<s;a++)r.set(o,a,Math.max(t.get(o,a),e.get(o,a)));return r}static checkMatrix(t){return st.isMatrix(t)?t:new E(t)}static isMatrix(t){return t!=null&&t.klass==="Matrix"}get size(){return this.rows*this.columns}apply(t){if(typeof t!="function")throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.call(this,e,n);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.push(this.get(e,n));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let n=0;n<this.columns;n++)t[e].push(this.get(e,n))}return t}toJSON(){return this.to2DArray()}isRowVector(){return this.rows===1}isColumnVector(){return this.columns===1}isVector(){return this.rows===1||this.columns===1}isSquare(){return this.rows===this.columns}isEmpty(){return this.rows===0||this.columns===0}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isDistance(){if(!this.isSymmetric())return!1;for(let t=0;t<this.rows;t++)if(this.get(t,t)!==0)return!1;return!0}isEchelonForm(){let t=0,e=0,n=-1,s=!0,r=!1;for(;t<this.rows&&s;){for(e=0,r=!1;e<this.columns&&r===!1;)this.get(t,e)===0?e++:this.get(t,e)===1&&e>n?(r=!0,n=e):(s=!1,r=!0);t++}return s}isReducedEchelonForm(){let t=0,e=0,n=-1,s=!0,r=!1;for(;t<this.rows&&s;){for(e=0,r=!1;e<this.columns&&r===!1;)this.get(t,e)===0?e++:this.get(t,e)===1&&e>n?(r=!0,n=e):(s=!1,r=!0);for(let o=e+1;o<this.rows;o++)this.get(t,o)!==0&&(s=!1);t++}return s}echelonForm(){let t=this.clone(),e=0,n=0;for(;e<t.rows&&n<t.columns;){let s=e;for(let r=e;r<t.rows;r++)t.get(r,n)>t.get(s,n)&&(s=r);if(t.get(s,n)===0)n++;else{t.swapRows(e,s);let r=t.get(e,n);for(let o=n;o<t.columns;o++)t.set(e,o,t.get(e,o)/r);for(let o=e+1;o<t.rows;o++){let a=t.get(o,n)/t.get(e,n);t.set(o,n,0);for(let h=n+1;h<t.columns;h++)t.set(o,h,t.get(o,h)-t.get(e,h)*a)}e++,n++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,n=t.rows,s=n-1;for(;s>=0;)if(t.maxRow(s)===0)s--;else{let r=0,o=!1;for(;r<n&&o===!1;)t.get(s,r)===1?o=!0:r++;for(let a=0;a<s;a++){let h=t.get(a,r);for(let l=r;l<e;l++){let c=t.get(a,l)-h*t.get(s,l);t.set(a,l,c)}}s--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if(typeof t!="object")throw new TypeError("options must be an object");const{rows:e=1,columns:n=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(n)||n<=0)throw new TypeError("columns must be a positive integer");let s=new E(this.rows*e,this.columns*n);for(let r=0;r<e;r++)for(let o=0;o<n;o++)s.setSubMatrix(this,this.rows*r,this.columns*o);return s}fill(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,t);return this}neg(){return this.mulS(-1)}getRow(t){Mt(this,t);let e=[];for(let n=0;n<this.columns;n++)e.push(this.get(t,n));return e}getRowVector(t){return E.rowVector(this.getRow(t))}setRow(t,e){Mt(this,t),e=qt(this,e);for(let n=0;n<this.columns;n++)this.set(t,n,e[n]);return this}swapRows(t,e){Mt(this,t),Mt(this,e);for(let n=0;n<this.columns;n++){let s=this.get(t,n);this.set(t,n,this.get(e,n)),this.set(e,n,s)}return this}getColumn(t){Pt(this,t);let e=[];for(let n=0;n<this.rows;n++)e.push(this.get(n,t));return e}getColumnVector(t){return E.columnVector(this.getColumn(t))}setColumn(t,e){Pt(this,t),e=Ot(this,e);for(let n=0;n<this.rows;n++)this.set(n,t,e[n]);return this}swapColumns(t,e){Pt(this,t),Pt(this,e);for(let n=0;n<this.rows;n++){let s=this.get(n,t);this.set(n,t,this.get(n,e)),this.set(n,e,s)}return this}addRowVector(t){t=qt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[n]);return this}subRowVector(t){t=qt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[n]);return this}mulRowVector(t){t=qt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[n]);return this}divRowVector(t){t=qt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[n]);return this}addColumnVector(t){t=Ot(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[e]);return this}subColumnVector(t){t=Ot(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[e]);return this}mulColumnVector(t){t=Ot(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[e]);return this}divColumnVector(t){t=Ot(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[e]);return this}mulRow(t,e){Mt(this,t);for(let n=0;n<this.columns;n++)this.set(t,n,this.get(t,n)*e);return this}mulColumn(t,e){Pt(this,t);for(let n=0;n<this.rows;n++)this.set(n,t,this.get(n,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const e=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)>e[n]&&(e[n]=this.get(n,s));return e}case"column":{const e=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)>e[s]&&(e[s]=this.get(n,s));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)>e&&(e=this.get(n,s));return e}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){zt(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)>t&&(t=this.get(n,s),e[0]=n,e[1]=s);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const e=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)<e[n]&&(e[n]=this.get(n,s));return e}case"column":{const e=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)<e[s]&&(e[s]=this.get(n,s));return e}case void 0:{let e=this.get(0,0);for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)<e&&(e=this.get(n,s));return e}default:throw new Error(`invalid option: ${t}`)}}minIndex(){zt(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let s=0;s<this.columns;s++)this.get(n,s)<t&&(t=this.get(n,s),e[0]=n,e[1]=s);return e}maxRow(t){if(Mt(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n));return e}maxRowIndex(t){Mt(this,t),zt(this);let e=this.get(t,0),n=[t,0];for(let s=1;s<this.columns;s++)this.get(t,s)>e&&(e=this.get(t,s),n[1]=s);return n}minRow(t){if(Mt(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n));return e}minRowIndex(t){Mt(this,t),zt(this);let e=this.get(t,0),n=[t,0];for(let s=1;s<this.columns;s++)this.get(t,s)<e&&(e=this.get(t,s),n[1]=s);return n}maxColumn(t){if(Pt(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t));return e}maxColumnIndex(t){Pt(this,t),zt(this);let e=this.get(0,t),n=[0,t];for(let s=1;s<this.rows;s++)this.get(s,t)>e&&(e=this.get(s,t),n[0]=s);return n}minColumn(t){if(Pt(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t));return e}minColumnIndex(t){Pt(this,t),zt(this);let e=this.get(0,t),n=[0,t];for(let s=1;s<this.rows;s++)this.get(s,t)<e&&(e=this.get(s,t),n[0]=s);return n}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let n=0;n<t;n++)e.push(this.get(n,n));return e}norm(t="frobenius"){switch(t){case"max":return this.max();case"frobenius":return Math.sqrt(this.dot(this));default:throw new RangeError(`unknown norm type: ${t}`)}}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t+=this.get(e,n),this.set(e,n,t);return this}dot(t){st.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let n=0;for(let s=0;s<e.length;s++)n+=e[s]*t[s];return n}mmul(t){t=E.checkMatrix(t);let e=this.rows,n=this.columns,s=t.columns,r=new E(e,s),o=new Float64Array(n);for(let a=0;a<s;a++){for(let h=0;h<n;h++)o[h]=t.get(h,a);for(let h=0;h<e;h++){let l=0;for(let c=0;c<n;c++)l+=this.get(h,c)*o[c];r.set(h,a,l)}}return r}mpow(t){if(!this.isSquare())throw new RangeError("Matrix must be square");if(!Number.isInteger(t)||t<0)throw new RangeError("Exponent must be a non-negative integer");let e=E.eye(this.rows),n=this;for(let s=t;s>1;s/=2)s&1&&(e=e.mmul(n)),n=n.mmul(n);return e}strassen2x2(t){t=E.checkMatrix(t);let e=new E(2,2);const n=this.get(0,0),s=t.get(0,0),r=this.get(0,1),o=t.get(0,1),a=this.get(1,0),h=t.get(1,0),l=this.get(1,1),c=t.get(1,1),u=(n+l)*(s+c),m=(a+l)*s,w=n*(o-c),g=l*(h-s),p=(n+r)*c,P=(a-n)*(s+o),f=(r-l)*(h+c),M=u+g-p+f,b=w+p,R=m+g,C=u-m+w+P;return e.set(0,0,M),e.set(0,1,b),e.set(1,0,R),e.set(1,1,C),e}strassen3x3(t){t=E.checkMatrix(t);let e=new E(3,3);const n=this.get(0,0),s=this.get(0,1),r=this.get(0,2),o=this.get(1,0),a=this.get(1,1),h=this.get(1,2),l=this.get(2,0),c=this.get(2,1),u=this.get(2,2),m=t.get(0,0),w=t.get(0,1),g=t.get(0,2),p=t.get(1,0),P=t.get(1,1),f=t.get(1,2),M=t.get(2,0),b=t.get(2,1),R=t.get(2,2),C=(n+s+r-o-a-c-u)*P,V=(n-o)*(-w+P),v=a*(-m+w+p-P-f-M+R),S=(-n+o+a)*(m-w+P),j=(o+a)*(-m+w),d=n*m,x=(-n+l+c)*(m-g+f),A=(-n+l)*(g-f),y=(l+c)*(-m+g),$=(n+s+r-a-h-l-c)*f,I=c*(-m+g+p-P-f-M+b),F=(-r+c+u)*(P+M-b),X=(r-u)*(P-b),L=r*M,O=(c+u)*(-M+b),B=(-r+a+h)*(f+M-R),Y=(r-h)*(f-R),H=(a+h)*(-M+R),T=s*p,U=h*b,K=o*g,J=l*w,W=u*R,mn=d+L+T,gn=C+S+j+d+F+L+O,pn=d+x+y+$+L+B+H,wn=V+v+S+d+L+B+Y,Ce=V+S+j+d+U,Te=L+B+Y+H+K,$e=d+x+A+I+F+X+L,Ie=F+X+L+O+J,Fe=d+x+A+y+W;return e.set(0,0,mn),e.set(0,1,gn),e.set(0,2,pn),e.set(1,0,wn),e.set(1,1,Ce),e.set(1,2,Te),e.set(2,0,$e),e.set(2,1,Ie),e.set(2,2,Fe),e}mmulStrassen(t){t=E.checkMatrix(t);let e=this.clone(),n=e.rows,s=e.columns,r=t.rows,o=t.columns;s!==r&&console.warn(`Multiplying ${n} x ${s} and ${r} x ${o} matrix: dimensions do not match.`);function a(u,m,w){let g=u.rows,p=u.columns;if(g===m&&p===w)return u;{let P=st.zeros(m,w);return P=P.setSubMatrix(u,0,0),P}}let h=Math.max(n,r),l=Math.max(s,o);e=a(e,h,l),t=a(t,h,l);function c(u,m,w,g){if(w<=512||g<=512)return u.mmul(m);w%2===1&&g%2===1?(u=a(u,w+1,g+1),m=a(m,w+1,g+1)):w%2===1?(u=a(u,w+1,g),m=a(m,w+1,g)):g%2===1&&(u=a(u,w,g+1),m=a(m,w,g+1));let p=parseInt(u.rows/2,10),P=parseInt(u.columns/2,10),f=u.subMatrix(0,p-1,0,P-1),M=m.subMatrix(0,p-1,0,P-1),b=u.subMatrix(0,p-1,P,u.columns-1),R=m.subMatrix(0,p-1,P,m.columns-1),C=u.subMatrix(p,u.rows-1,0,P-1),V=m.subMatrix(p,m.rows-1,0,P-1),v=u.subMatrix(p,u.rows-1,P,u.columns-1),S=m.subMatrix(p,m.rows-1,P,m.columns-1),j=c(st.add(f,v),st.add(M,S),p,P),d=c(st.add(C,v),M,p,P),x=c(f,st.sub(R,S),p,P),A=c(v,st.sub(V,M),p,P),y=c(st.add(f,b),S,p,P),$=c(st.sub(C,f),st.add(M,R),p,P),I=c(st.sub(b,v),st.add(V,S),p,P),F=st.add(j,A);F.sub(y),F.add(I);let X=st.add(x,y),L=st.add(d,A),O=st.sub(j,d);O.add(x),O.add($);let B=st.zeros(2*F.rows,2*F.columns);return B=B.setSubMatrix(F,0,0),B=B.setSubMatrix(X,F.rows,0),B=B.setSubMatrix(L,0,F.columns),B=B.setSubMatrix(O,F.rows,F.columns),B.subMatrix(0,w-1,0,g-1)}return c(e,t,h,l)}scaleRows(t={}){if(typeof t!="object")throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let s=new E(this.rows,this.columns);for(let r=0;r<this.rows;r++){const o=this.getRow(r);o.length>0&&Cn(o,{min:e,max:n,output:o}),s.setRow(r,o)}return s}scaleColumns(t={}){if(typeof t!="object")throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let s=new E(this.rows,this.columns);for(let r=0;r<this.columns;r++){const o=this.getColumn(r);o.length&&Cn(o,{min:e,max:n,output:o}),s.setColumn(r,o)}return s}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let n=0;n<t;n++){let s=this.get(e,n),r=this.get(e,this.columns-1-n);this.set(e,n,r),this.set(e,this.columns-1-n,s)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let n=0;n<t;n++){let s=this.get(n,e),r=this.get(this.rows-1-n,e);this.set(n,e,r),this.set(this.rows-1-n,e,s)}return this}kroneckerProduct(t){t=E.checkMatrix(t);let e=this.rows,n=this.columns,s=t.rows,r=t.columns,o=new E(e*s,n*r);for(let a=0;a<e;a++)for(let h=0;h<n;h++)for(let l=0;l<s;l++)for(let c=0;c<r;c++)o.set(s*a+l,r*h+c,this.get(a,h)*t.get(l,c));return o}kroneckerSum(t){if(t=E.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,n=t.rows,s=this.kroneckerProduct(E.eye(n,n)),r=E.eye(e,e).kroneckerProduct(t);return s.add(r)}transpose(){let t=new E(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(n,e,this.get(e,n));return t}sortRows(t=Fn){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=Fn){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,n,s){De(this,t,e,n,s);let r=new E(e-t+1,s-n+1);for(let o=t;o<=e;o++)for(let a=n;a<=s;a++)r.set(o-t,a-n,this.get(o,a));return r}subMatrixRow(t,e,n){if(e===void 0&&(e=0),n===void 0&&(n=this.columns-1),e>n||e<0||e>=this.columns||n<0||n>=this.columns)throw new RangeError("Argument out of range");let s=new E(t.length,n-e+1);for(let r=0;r<t.length;r++)for(let o=e;o<=n;o++){if(t[r]<0||t[r]>=this.rows)throw new RangeError(`Row index out of range: ${t[r]}`);s.set(r,o-e,this.get(t[r],o))}return s}subMatrixColumn(t,e,n){if(e===void 0&&(e=0),n===void 0&&(n=this.rows-1),e>n||e<0||e>=this.rows||n<0||n>=this.rows)throw new RangeError("Argument out of range");let s=new E(n-e+1,t.length);for(let r=0;r<t.length;r++)for(let o=e;o<=n;o++){if(t[r]<0||t[r]>=this.columns)throw new RangeError(`Column index out of range: ${t[r]}`);s.set(o-e,r,this.get(o,t[r]))}return s}setSubMatrix(t,e,n){if(t=E.checkMatrix(t),t.isEmpty())return this;let s=e+t.rows-1,r=n+t.columns-1;De(this,e,s,n,r);for(let o=0;o<t.rows;o++)for(let a=0;a<t.columns;a++)this.set(e+o,n+a,t.get(o,a));return this}selection(t,e){Oe(this,t),ze(this,e);let n=new E(t.length,e.length);for(let s=0;s<t.length;s++){let r=t[s];for(let o=0;o<e.length;o++){let a=e[o];n.set(s,o,this.get(r,a))}}return n}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let n=0;n<t;n++)e+=this.get(n,n);return e}clone(){return this.constructor.copy(this,new E(this.rows,this.columns))}static copy(t,e){for(const[n,s,r]of t.entries())e.set(n,s,r);return e}sum(t){switch(t){case"row":return us(this);case"column":return cs(this);case void 0:return fs(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return ms(this);case"column":return gs(this);case void 0:return ps(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":{for(let n=0;n<this.rows;n++)e[n]/=this.columns;return e}case"column":{for(let n=0;n<this.columns;n++)e[n]/=this.rows;return e}case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if(typeof t=="object"&&(e=t,t=void 0),typeof e!="object")throw new TypeError("options must be an object");const{unbiased:n=!0,mean:s=this.mean(t)}=e;if(typeof n!="boolean")throw new TypeError("unbiased must be a boolean");switch(t){case"row":{if(!ft.isAnyArray(s))throw new TypeError("mean must be an array");return ws(this,n,s)}case"column":{if(!ft.isAnyArray(s))throw new TypeError("mean must be an array");return ds(this,n,s)}case void 0:{if(typeof s!="number")throw new TypeError("mean must be a number");return Ms(this,n,s)}default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){typeof t=="object"&&(e=t,t=void 0);const n=this.variance(t,e);if(t===void 0)return Math.sqrt(n);for(let s=0;s<n.length;s++)n[s]=Math.sqrt(n[s]);return n}center(t,e={}){if(typeof t=="object"&&(e=t,t=void 0),typeof e!="object")throw new TypeError("options must be an object");const{center:n=this.mean(t)}=e;switch(t){case"row":{if(!ft.isAnyArray(n))throw new TypeError("center must be an array");return Ps(this,n),this}case"column":{if(!ft.isAnyArray(n))throw new TypeError("center must be an array");return ys(this,n),this}case void 0:{if(typeof n!="number")throw new TypeError("center must be a number");return bs(this,n),this}default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if(typeof t=="object"&&(e=t,t=void 0),typeof e!="object")throw new TypeError("options must be an object");let n=e.scale;switch(t){case"row":{if(n===void 0)n=xs(this);else if(!ft.isAnyArray(n))throw new TypeError("scale must be an array");return vs(this,n),this}case"column":{if(n===void 0)n=As(this);else if(!ft.isAnyArray(n))throw new TypeError("scale must be an array");return Es(this,n),this}case void 0:{if(n===void 0)n=Ss(this);else if(typeof n!="number")throw new TypeError("scale must be a number");return ks(this,n),this}default:throw new Error(`invalid option: ${t}`)}}toString(t){return $n(this,t)}[Symbol.iterator](){return this.entries()}*entries(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)yield[t,e,this.get(t,e)]}*values(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)yield this.get(t,e)}};Q.prototype.klass="Matrix",typeof Symbol<"u"&&(Q.prototype[Symbol.for("nodejs.util.inspect.custom")]=os);function Fn(i,t){return i-t}function Rs(i){return i.every(t=>typeof t=="number")}Q.random=Q.rand,Q.randomInt=Q.randInt,Q.diagonal=Q.diag,Q.prototype.diagonal=Q.prototype.diag,Q.identity=Q.eye,Q.prototype.negate=Q.prototype.neg,Q.prototype.tensorProduct=Q.prototype.kroneckerProduct;var pe,Ue,we;let E=(we=class extends Q{constructor(i,t){if(super(),Mn(this,pe),_(this,"data"),we.isMatrix(i))Pn(this,pe,Ue).call(this,i.rows,i.columns),we.copy(i,this);else if(Number.isInteger(i)&&i>=0)Pn(this,pe,Ue).call(this,i,t);else if(ft.isAnyArray(i)){const e=i;if(i=e.length,t=i?e[0].length:0,typeof t!="number")throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let n=0;n<i;n++){if(e[n].length!==t)throw new RangeError("Inconsistent array dimensions");if(!Rs(e[n]))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(e[n]))}this.rows=i,this.columns=t}else throw new TypeError("First argument must be a positive number or an array")}set(i,t,e){return this.data[i][t]=e,this}get(i,t){return this.data[i][t]}removeRow(i){return Mt(this,i),this.data.splice(i,1),this.rows-=1,this}addRow(i,t){return t===void 0&&(t=i,i=this.rows),Mt(this,i,!0),t=Float64Array.from(qt(this,t)),this.data.splice(i,0,t),this.rows+=1,this}removeColumn(i){Pt(this,i);for(let t=0;t<this.rows;t++){const e=new Float64Array(this.columns-1);for(let n=0;n<i;n++)e[n]=this.data[t][n];for(let n=i+1;n<this.columns;n++)e[n-1]=this.data[t][n];this.data[t]=e}return this.columns-=1,this}addColumn(i,t){typeof t>"u"&&(t=i,i=this.columns),Pt(this,i,!0),t=Ot(this,t);for(let e=0;e<this.rows;e++){const n=new Float64Array(this.columns+1);let s=0;for(;s<i;s++)n[s]=this.data[e][s];for(n[s++]=t[e];s<this.columns+1;s++)n[s]=this.data[e][s-1];this.data[e]=n}return this.columns+=1,this}},pe=new WeakSet,Ue=function(i,t){if(this.data=[],Number.isInteger(t)&&t>=0)for(let e=0;e<i;e++)this.data.push(new Float64Array(t));else throw new TypeError("nColumns must be a positive integer");this.rows=i,this.columns=t},we);ls(Q,E);var lt;const Cs=class dn extends Q{constructor(t){if(super(),Mn(this,lt),E.isMatrix(t)){if(!t.isSymmetric())throw new TypeError("not symmetric data");Be(this,lt,E.copy(t,new E(t.rows,t.rows)))}else if(Number.isInteger(t)&&t>=0)Be(this,lt,new E(t,t));else if(Be(this,lt,new E(t)),!this.isSymmetric())throw new TypeError("not symmetric data")}get size(){return vt(this,lt).size}get rows(){return vt(this,lt).rows}get columns(){return vt(this,lt).columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(t){return E.isMatrix(t)&&t.klassType==="SymmetricMatrix"}static zeros(t){return new this(t)}static ones(t){return new this(t).fill(1)}clone(){const t=new dn(this.diagonalSize);for(const[e,n,s]of this.upperRightEntries())t.set(e,n,s);return t}toMatrix(){return new E(this)}get(t,e){return vt(this,lt).get(t,e)}set(t,e,n){return vt(this,lt).set(t,e,n),vt(this,lt).set(e,t,n),this}removeCross(t){return vt(this,lt).removeRow(t),vt(this,lt).removeColumn(t),this}addCross(t,e){e===void 0&&(e=t,t=this.diagonalSize);const n=e.slice();return n.splice(t,1),vt(this,lt).addRow(t,n),vt(this,lt).addColumn(t,e),this}applyMask(t){if(t.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const e=[];for(const[n,s]of t.entries())s||e.push(n);e.reverse();for(const n of e)this.removeCross(n);return this}toCompact(){const{diagonalSize:t}=this,e=new Array(t*(t+1)/2);for(let n=0,s=0,r=0;r<e.length;r++)e[r]=this.get(s,n),++n>=t&&(n=++s);return e}static fromCompact(t){const e=t.length,n=(Math.sqrt(8*e+1)-1)/2;if(!Number.isInteger(n))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(t)}`);const s=new dn(n);for(let r=0,o=0,a=0;a<e;a++)s.set(r,o,t[a]),++r>=n&&(r=++o);return s}*upperRightEntries(){for(let t=0,e=0;t<this.diagonalSize;void 0){const n=this.get(t,e);yield[t,e,n],++e>=this.diagonalSize&&(e=++t)}}*upperRightValues(){for(let t=0,e=0;t<this.diagonalSize;void 0)yield this.get(t,e),++e>=this.diagonalSize&&(e=++t)}};lt=new WeakMap;let te=Cs;te.prototype.klassType="SymmetricMatrix";let _n=class Oi extends te{static isDistanceMatrix(t){return te.isSymmetricMatrix(t)&&t.klassSubType==="DistanceMatrix"}constructor(t){if(super(t),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(t,e,n){return t===e&&(n=0),super.set(t,e,n)}addCross(t,e){return e===void 0&&(e=t,t=this.diagonalSize),e=e.slice(),e[t]=0,super.addCross(t,e)}toSymmetricMatrix(){return new te(this)}clone(){const t=new Oi(this.diagonalSize);for(const[e,n,s]of this.upperRightEntries())e!==n&&t.set(e,n,s);return t}toCompact(){const{diagonalSize:t}=this,e=(t-1)*t/2,n=new Array(e);for(let s=1,r=0,o=0;o<n.length;o++)n[o]=this.get(r,s),++s>=t&&(s=++r+1);return n}static fromCompact(t){const e=t.length;if(e===0)return new this(0);const n=(Math.sqrt(8*e+1)+1)/2;if(!Number.isInteger(n))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(t)}`);const s=new this(n);for(let r=1,o=0,a=0;a<e;a++)s.set(r,o,t[a]),++r>=n&&(r=++o+1);return s}};_n.prototype.klassSubType="DistanceMatrix";let kt=class extends Q{constructor(t,e,n){super(),this.matrix=t,this.rows=e,this.columns=n}};class Ts extends kt{constructor(t,e){Pt(t,e),super(t,t.rows,1),this.column=e}set(t,e,n){return this.matrix.set(t,this.column,n),this}get(t){return this.matrix.get(t,this.column)}}class $s extends kt{constructor(t,e){ze(t,e),super(t,t.rows,e.length),this.columnIndices=e}set(t,e,n){return this.matrix.set(t,this.columnIndices[e],n),this}get(t,e){return this.matrix.get(t,this.columnIndices[e])}}class Is extends kt{constructor(t){super(t,t.rows,t.columns)}set(t,e,n){return this.matrix.set(t,this.columns-e-1,n),this}get(t,e){return this.matrix.get(t,this.columns-e-1)}}class Fs extends kt{constructor(t){super(t,t.rows,t.columns)}set(t,e,n){return this.matrix.set(this.rows-t-1,e,n),this}get(t,e){return this.matrix.get(this.rows-t-1,e)}}class _s extends kt{constructor(t,e){Mt(t,e),super(t,1,t.columns),this.row=e}set(t,e,n){return this.matrix.set(this.row,e,n),this}get(t,e){return this.matrix.get(this.row,e)}}class Ls extends kt{constructor(t,e){Oe(t,e),super(t,e.length,t.columns),this.rowIndices=e}set(t,e,n){return this.matrix.set(this.rowIndices[t],e,n),this}get(t,e){return this.matrix.get(this.rowIndices[t],e)}}class de extends kt{constructor(t,e,n){Oe(t,e),ze(t,n),super(t,e.length,n.length),this.rowIndices=e,this.columnIndices=n}set(t,e,n){return this.matrix.set(this.rowIndices[t],this.columnIndices[e],n),this}get(t,e){return this.matrix.get(this.rowIndices[t],this.columnIndices[e])}}class Bs extends kt{constructor(t,e,n,s,r){De(t,e,n,s,r),super(t,n-e+1,r-s+1),this.startRow=e,this.startColumn=s}set(t,e,n){return this.matrix.set(this.startRow+t,this.startColumn+e,n),this}get(t,e){return this.matrix.get(this.startRow+t,this.startColumn+e)}}class Vs extends kt{constructor(t){super(t,t.columns,t.rows)}set(t,e,n){return this.matrix.set(e,t,n),this}get(t,e){return this.matrix.get(e,t)}}class Ln extends Q{constructor(t,e={}){const{rows:n=1}=e;if(t.length%n!==0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=n,this.columns=t.length/n,this.data=t}set(t,e,n){let s=this._calculateIndex(t,e);return this.data[s]=n,this}get(t,e){let n=this._calculateIndex(t,e);return this.data[n]}_calculateIndex(t,e){return t*this.columns+e}}let wt=class extends Q{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}};function js(i,t){if(ft.isAnyArray(i))return i[0]&&ft.isAnyArray(i[0])?new wt(i):new Ln(i,t);throw new Error("the argument is not an array")}let Me=class{constructor(t){t=wt.checkMatrix(t);let e=t.clone(),n=e.rows,s=e.columns,r=new Float64Array(n),o=1,a,h,l,c,u,m,w,g,p;for(a=0;a<n;a++)r[a]=a;for(g=new Float64Array(n),h=0;h<s;h++){for(a=0;a<n;a++)g[a]=e.get(a,h);for(a=0;a<n;a++){for(p=Math.min(a,h),u=0,l=0;l<p;l++)u+=e.get(a,l)*g[l];g[a]-=u,e.set(a,h,g[a])}for(c=h,a=h+1;a<n;a++)Math.abs(g[a])>Math.abs(g[c])&&(c=a);if(c!==h){for(l=0;l<s;l++)m=e.get(c,l),e.set(c,l,e.get(h,l)),e.set(h,l,m);w=r[c],r[c]=r[h],r[h]=w,o=-o}if(h<n&&e.get(h,h)!==0)for(a=h+1;a<n;a++)e.set(a,h,e.get(a,h)/e.get(h,h))}this.LU=e,this.pivotVector=r,this.pivotSign=o}isSingular(){let t=this.LU,e=t.columns;for(let n=0;n<e;n++)if(t.get(n,n)===0)return!0;return!1}solve(t){t=E.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let n=t.columns,s=t.subMatrixRow(this.pivotVector,0,n-1),r=e.columns,o,a,h;for(h=0;h<r;h++)for(o=h+1;o<r;o++)for(a=0;a<n;a++)s.set(o,a,s.get(o,a)-s.get(h,a)*e.get(o,h));for(h=r-1;h>=0;h--){for(a=0;a<n;a++)s.set(h,a,s.get(h,a)/e.get(h,h));for(o=0;o<h;o++)for(a=0;a<n;a++)s.set(o,a,s.get(o,a)-s.get(h,a)*e.get(o,h))}return s}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,n=t.columns;for(let s=0;s<n;s++)e*=t.get(s,s);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,s=new E(e,n);for(let r=0;r<e;r++)for(let o=0;o<n;o++)r>o?s.set(r,o,t.get(r,o)):r===o?s.set(r,o,1):s.set(r,o,0);return s}get upperTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,s=new E(e,n);for(let r=0;r<e;r++)for(let o=0;o<n;o++)r<=o?s.set(r,o,t.get(r,o)):s.set(r,o,0);return s}get pivotPermutationVector(){return Array.from(this.pivotVector)}};function Rt(i,t){let e=0;return Math.abs(i)>Math.abs(t)?(e=t/i,Math.abs(i)*Math.sqrt(1+e*e)):t!==0?(e=i/t,Math.abs(t)*Math.sqrt(1+e*e)):0}class Ye{constructor(t){t=wt.checkMatrix(t);let e=t.clone(),n=t.rows,s=t.columns,r=new Float64Array(s),o,a,h,l;for(h=0;h<s;h++){let c=0;for(o=h;o<n;o++)c=Rt(c,e.get(o,h));if(c!==0){for(e.get(h,h)<0&&(c=-c),o=h;o<n;o++)e.set(o,h,e.get(o,h)/c);for(e.set(h,h,e.get(h,h)+1),a=h+1;a<s;a++){for(l=0,o=h;o<n;o++)l+=e.get(o,h)*e.get(o,a);for(l=-l/e.get(h,h),o=h;o<n;o++)e.set(o,a,e.get(o,a)+l*e.get(o,h))}}r[h]=-c}this.QR=e,this.Rdiag=r}solve(t){t=E.checkMatrix(t);let e=this.QR,n=e.rows;if(t.rows!==n)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let s=t.columns,r=t.clone(),o=e.columns,a,h,l,c;for(l=0;l<o;l++)for(h=0;h<s;h++){for(c=0,a=l;a<n;a++)c+=e.get(a,l)*r.get(a,h);for(c=-c/e.get(l,l),a=l;a<n;a++)r.set(a,h,r.get(a,h)+c*e.get(a,l))}for(l=o-1;l>=0;l--){for(h=0;h<s;h++)r.set(l,h,r.get(l,h)/this.Rdiag[l]);for(a=0;a<l;a++)for(h=0;h<s;h++)r.set(a,h,r.get(a,h)-r.get(l,h)*e.get(a,l))}return r.subMatrix(0,o-1,0,s-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(this.Rdiag[e]===0)return!1;return!0}get upperTriangularMatrix(){let t=this.QR,e=t.columns,n=new E(e,e),s,r;for(s=0;s<e;s++)for(r=0;r<e;r++)s<r?n.set(s,r,t.get(s,r)):s===r?n.set(s,r,this.Rdiag[s]):n.set(s,r,0);return n}get orthogonalMatrix(){let t=this.QR,e=t.rows,n=t.columns,s=new E(e,n),r,o,a,h;for(a=n-1;a>=0;a--){for(r=0;r<e;r++)s.set(r,a,0);for(s.set(a,a,1),o=a;o<n;o++)if(t.get(a,a)!==0){for(h=0,r=a;r<e;r++)h+=t.get(r,a)*s.get(r,o);for(h=-h/t.get(a,a),r=a;r<e;r++)s.set(r,o,s.get(r,o)+h*t.get(r,a))}}return s}}let Dt=class{constructor(t,e={}){if(t=wt.checkMatrix(t),t.isEmpty())throw new Error("Matrix must be non-empty");let n=t.rows,s=t.columns;const{computeLeftSingularVectors:r=!0,computeRightSingularVectors:o=!0,autoTranspose:a=!1}=e;let h=!!r,l=!!o,c=!1,u;if(n<s)if(!a)u=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else{u=t.transpose(),n=u.rows,s=u.columns,c=!0;let d=h;h=l,l=d}else u=t.clone();let m=Math.min(n,s),w=Math.min(n+1,s),g=new Float64Array(w),p=new E(n,m),P=new E(s,s),f=new Float64Array(s),M=new Float64Array(n),b=new Float64Array(w);for(let d=0;d<w;d++)b[d]=d;let R=Math.min(n-1,s),C=Math.max(0,Math.min(s-2,n)),V=Math.max(R,C);for(let d=0;d<V;d++){if(d<R){g[d]=0;for(let x=d;x<n;x++)g[d]=Rt(g[d],u.get(x,d));if(g[d]!==0){u.get(d,d)<0&&(g[d]=-g[d]);for(let x=d;x<n;x++)u.set(x,d,u.get(x,d)/g[d]);u.set(d,d,u.get(d,d)+1)}g[d]=-g[d]}for(let x=d+1;x<s;x++){if(d<R&&g[d]!==0){let A=0;for(let y=d;y<n;y++)A+=u.get(y,d)*u.get(y,x);A=-A/u.get(d,d);for(let y=d;y<n;y++)u.set(y,x,u.get(y,x)+A*u.get(y,d))}f[x]=u.get(d,x)}if(h&&d<R)for(let x=d;x<n;x++)p.set(x,d,u.get(x,d));if(d<C){f[d]=0;for(let x=d+1;x<s;x++)f[d]=Rt(f[d],f[x]);if(f[d]!==0){f[d+1]<0&&(f[d]=0-f[d]);for(let x=d+1;x<s;x++)f[x]/=f[d];f[d+1]+=1}if(f[d]=-f[d],d+1<n&&f[d]!==0){for(let x=d+1;x<n;x++)M[x]=0;for(let x=d+1;x<n;x++)for(let A=d+1;A<s;A++)M[x]+=f[A]*u.get(x,A);for(let x=d+1;x<s;x++){let A=-f[x]/f[d+1];for(let y=d+1;y<n;y++)u.set(y,x,u.get(y,x)+A*M[y])}}if(l)for(let x=d+1;x<s;x++)P.set(x,d,f[x])}}let v=Math.min(s,n+1);if(R<s&&(g[R]=u.get(R,R)),n<v&&(g[v-1]=0),C+1<v&&(f[C]=u.get(C,v-1)),f[v-1]=0,h){for(let d=R;d<m;d++){for(let x=0;x<n;x++)p.set(x,d,0);p.set(d,d,1)}for(let d=R-1;d>=0;d--)if(g[d]!==0){for(let x=d+1;x<m;x++){let A=0;for(let y=d;y<n;y++)A+=p.get(y,d)*p.get(y,x);A=-A/p.get(d,d);for(let y=d;y<n;y++)p.set(y,x,p.get(y,x)+A*p.get(y,d))}for(let x=d;x<n;x++)p.set(x,d,-p.get(x,d));p.set(d,d,1+p.get(d,d));for(let x=0;x<d-1;x++)p.set(x,d,0)}else{for(let x=0;x<n;x++)p.set(x,d,0);p.set(d,d,1)}}if(l)for(let d=s-1;d>=0;d--){if(d<C&&f[d]!==0)for(let x=d+1;x<s;x++){let A=0;for(let y=d+1;y<s;y++)A+=P.get(y,d)*P.get(y,x);A=-A/P.get(d+1,d);for(let y=d+1;y<s;y++)P.set(y,x,P.get(y,x)+A*P.get(y,d))}for(let x=0;x<s;x++)P.set(x,d,0);P.set(d,d,1)}let S=v-1,j=Number.EPSILON;for(;v>0;){let d,x;for(d=v-2;d>=-1&&d!==-1;d--){const A=Number.MIN_VALUE+j*Math.abs(g[d]+Math.abs(g[d+1]));if(Math.abs(f[d])<=A||Number.isNaN(f[d])){f[d]=0;break}}if(d===v-2)x=4;else{let A;for(A=v-1;A>=d&&A!==d;A--){let y=(A!==v?Math.abs(f[A]):0)+(A!==d+1?Math.abs(f[A-1]):0);if(Math.abs(g[A])<=j*y){g[A]=0;break}}A===d?x=3:A===v-1?x=1:(x=2,d=A)}switch(d++,x){case 1:{let A=f[v-2];f[v-2]=0;for(let y=v-2;y>=d;y--){let $=Rt(g[y],A),I=g[y]/$,F=A/$;if(g[y]=$,y!==d&&(A=-F*f[y-1],f[y-1]=I*f[y-1]),l)for(let X=0;X<s;X++)$=I*P.get(X,y)+F*P.get(X,v-1),P.set(X,v-1,-F*P.get(X,y)+I*P.get(X,v-1)),P.set(X,y,$)}break}case 2:{let A=f[d-1];f[d-1]=0;for(let y=d;y<v;y++){let $=Rt(g[y],A),I=g[y]/$,F=A/$;if(g[y]=$,A=-F*f[y],f[y]=I*f[y],h)for(let X=0;X<n;X++)$=I*p.get(X,y)+F*p.get(X,d-1),p.set(X,d-1,-F*p.get(X,y)+I*p.get(X,d-1)),p.set(X,y,$)}break}case 3:{const A=Math.max(Math.abs(g[v-1]),Math.abs(g[v-2]),Math.abs(f[v-2]),Math.abs(g[d]),Math.abs(f[d])),y=g[v-1]/A,$=g[v-2]/A,I=f[v-2]/A,F=g[d]/A,X=f[d]/A,L=(($+y)*($-y)+I*I)/2,O=y*I*(y*I);let B=0;(L!==0||O!==0)&&(L<0?B=0-Math.sqrt(L*L+O):B=Math.sqrt(L*L+O),B=O/(L+B));let Y=(F+y)*(F-y)+B,H=F*X;for(let T=d;T<v-1;T++){let U=Rt(Y,H);U===0&&(U=Number.MIN_VALUE);let K=Y/U,J=H/U;if(T!==d&&(f[T-1]=U),Y=K*g[T]+J*f[T],f[T]=K*f[T]-J*g[T],H=J*g[T+1],g[T+1]=K*g[T+1],l)for(let W=0;W<s;W++)U=K*P.get(W,T)+J*P.get(W,T+1),P.set(W,T+1,-J*P.get(W,T)+K*P.get(W,T+1)),P.set(W,T,U);if(U=Rt(Y,H),U===0&&(U=Number.MIN_VALUE),K=Y/U,J=H/U,g[T]=U,Y=K*f[T]+J*g[T+1],g[T+1]=-J*f[T]+K*g[T+1],H=J*f[T+1],f[T+1]=K*f[T+1],h&&T<n-1)for(let W=0;W<n;W++)U=K*p.get(W,T)+J*p.get(W,T+1),p.set(W,T+1,-J*p.get(W,T)+K*p.get(W,T+1)),p.set(W,T,U)}f[v-2]=Y;break}case 4:{if(g[d]<=0&&(g[d]=g[d]<0?-g[d]:0,l))for(let A=0;A<=S;A++)P.set(A,d,-P.get(A,d));for(;d<S&&!(g[d]>=g[d+1]);){let A=g[d];if(g[d]=g[d+1],g[d+1]=A,l&&d<s-1)for(let y=0;y<s;y++)A=P.get(y,d+1),P.set(y,d+1,P.get(y,d)),P.set(y,d,A);if(h&&d<n-1)for(let y=0;y<n;y++)A=p.get(y,d+1),p.set(y,d+1,p.get(y,d)),p.set(y,d,A);d++}v--;break}}}if(c){let d=P;P=p,p=d}this.m=n,this.n=s,this.s=g,this.U=p,this.V=P}solve(t){let e=t,n=this.threshold,s=this.s.length,r=E.zeros(s,s);for(let m=0;m<s;m++)Math.abs(this.s[m])<=n?r.set(m,m,0):r.set(m,m,1/this.s[m]);let o=this.U,a=this.rightSingularVectors,h=a.mmul(r),l=a.rows,c=o.rows,u=E.zeros(l,c);for(let m=0;m<l;m++)for(let w=0;w<c;w++){let g=0;for(let p=0;p<s;p++)g+=h.get(m,p)*o.get(w,p);u.set(m,w,g)}return u.mmul(e)}solveForDiagonal(t){return this.solve(E.diag(t))}inverse(){let t=this.V,e=this.threshold,n=t.rows,s=t.columns,r=new E(n,this.s.length);for(let c=0;c<n;c++)for(let u=0;u<s;u++)Math.abs(this.s[u])>e&&r.set(c,u,t.get(c,u)/this.s[u]);let o=this.U,a=o.rows,h=o.columns,l=new E(n,a);for(let c=0;c<n;c++)for(let u=0;u<a;u++){let m=0;for(let w=0;w<h;w++)m+=r.get(c,w)*o.get(u,w);l.set(c,u,m)}return l}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,n=this.s;for(let s=0,r=n.length;s<r;s++)n[s]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return E.diag(this.s)}};function Ns(i,t=!1){return i=wt.checkMatrix(i),t?new Dt(i).inverse():Bn(i,E.eye(i.rows))}function Bn(i,t,e=!1){return i=wt.checkMatrix(i),t=wt.checkMatrix(t),e?new Dt(i).solve(t):i.isSquare()?new Me(i).solve(t):new Ye(i).solve(t)}function Pe(i){if(i=E.checkMatrix(i),i.isSquare()){if(i.columns===0)return 1;let t,e,n,s;if(i.columns===2)return t=i.get(0,0),e=i.get(0,1),n=i.get(1,0),s=i.get(1,1),t*s-e*n;if(i.columns===3){let r,o,a;return r=new de(i,[1,2],[1,2]),o=new de(i,[1,2],[0,2]),a=new de(i,[1,2],[0,1]),t=i.get(0,0),e=i.get(0,1),n=i.get(0,2),t*Pe(r)-e*Pe(o)+n*Pe(a)}else return new Me(i).determinant}else throw Error("determinant can only be calculated for a square matrix")}function qs(i,t){let e=[];for(let n=0;n<i;n++)n!==t&&e.push(n);return e}function Os(i,t,e,n=1e-9,s=1e-9){if(i>s)return new Array(t.rows+1).fill(0);{let r=t.addRow(e,[0]);for(let o=0;o<r.rows;o++)Math.abs(r.get(o,0))<n&&r.set(o,0,0);return r.to1DArray()}}function zs(i,t={}){const{thresholdValue:e=1e-9,thresholdError:n=1e-9}=t;i=E.checkMatrix(i);let s=i.rows,r=new E(s,s);for(let o=0;o<s;o++){let a=E.columnVector(i.getRow(o)),h=i.subMatrixRow(qs(s,o)).transpose(),l=new Dt(h).solve(a),c=E.sub(a,h.mmul(l)).abs().max();r.setRow(o,Os(c,l,o,e,n))}return r}function Ds(i,t=Number.EPSILON){if(i=E.checkMatrix(i),i.isEmpty())return i.transpose();let e=new Dt(i,{autoTranspose:!0}),n=e.leftSingularVectors,s=e.rightSingularVectors,r=e.diagonal;for(let o=0;o<r.length;o++)Math.abs(r[o])>t?r[o]=1/r[o]:r[o]=0;return s.mmul(E.diag(r).mmul(n.transpose()))}function Us(i,t=i,e={}){i=new E(i);let n=!1;if(typeof t=="object"&&!E.isMatrix(t)&&!ft.isAnyArray(t)?(e=t,t=i,n=!0):t=new E(t),i.rows!==t.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:s=!0}=e;s&&(i=i.center("column"),n||(t=t.center("column")));const r=i.transpose().mmul(t);for(let o=0;o<r.rows;o++)for(let a=0;a<r.columns;a++)r.set(o,a,r.get(o,a)*(1/(i.rows-1)));return r}function Ys(i,t=i,e={}){i=new E(i);let n=!1;if(typeof t=="object"&&!E.isMatrix(t)&&!ft.isAnyArray(t)?(e=t,t=i,n=!0):t=new E(t),i.rows!==t.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:s=!0,scale:r=!0}=e;s&&(i.center("column"),n||t.center("column")),r&&(i.scale("column"),n||t.scale("column"));const o=i.standardDeviation("column",{unbiased:!0}),a=n?o:t.standardDeviation("column",{unbiased:!0}),h=i.transpose().mmul(t);for(let l=0;l<h.rows;l++)for(let c=0;c<h.columns;c++)h.set(l,c,h.get(l,c)*(1/(o[l]*a[c]))*(1/(i.rows-1)));return h}let Vn=class{constructor(i,t={}){const{assumeSymmetric:e=!1}=t;if(i=wt.checkMatrix(i),!i.isSquare())throw new Error("Matrix is not a square matrix");if(i.isEmpty())throw new Error("Matrix must be non-empty");let n=i.columns,s=new E(n,n),r=new Float64Array(n),o=new Float64Array(n),a=i,h,l,c=!1;if(e?c=!0:c=i.isSymmetric(),c){for(h=0;h<n;h++)for(l=0;l<n;l++)s.set(h,l,a.get(h,l));Xs(n,o,r,s),Hs(n,o,r,s)}else{let u=new E(n,n),m=new Float64Array(n);for(l=0;l<n;l++)for(h=0;h<n;h++)u.set(h,l,a.get(h,l));Ws(n,u,m,s),Qs(n,o,r,s,u)}this.n=n,this.e=o,this.d=r,this.V=s}get realEigenvalues(){return Array.from(this.d)}get imaginaryEigenvalues(){return Array.from(this.e)}get eigenvectorMatrix(){return this.V}get diagonalMatrix(){let i=this.n,t=this.e,e=this.d,n=new E(i,i),s,r;for(s=0;s<i;s++){for(r=0;r<i;r++)n.set(s,r,0);n.set(s,s,e[s]),t[s]>0?n.set(s,s+1,t[s]):t[s]<0&&n.set(s,s-1,t[s])}return n}};function Xs(i,t,e,n){let s,r,o,a,h,l,c,u;for(h=0;h<i;h++)e[h]=n.get(i-1,h);for(a=i-1;a>0;a--){for(u=0,o=0,l=0;l<a;l++)u=u+Math.abs(e[l]);if(u===0)for(t[a]=e[a-1],h=0;h<a;h++)e[h]=n.get(a-1,h),n.set(a,h,0),n.set(h,a,0);else{for(l=0;l<a;l++)e[l]/=u,o+=e[l]*e[l];for(s=e[a-1],r=Math.sqrt(o),s>0&&(r=-r),t[a]=u*r,o=o-s*r,e[a-1]=s-r,h=0;h<a;h++)t[h]=0;for(h=0;h<a;h++){for(s=e[h],n.set(h,a,s),r=t[h]+n.get(h,h)*s,l=h+1;l<=a-1;l++)r+=n.get(l,h)*e[l],t[l]+=n.get(l,h)*s;t[h]=r}for(s=0,h=0;h<a;h++)t[h]/=o,s+=t[h]*e[h];for(c=s/(o+o),h=0;h<a;h++)t[h]-=c*e[h];for(h=0;h<a;h++){for(s=e[h],r=t[h],l=h;l<=a-1;l++)n.set(l,h,n.get(l,h)-(s*t[l]+r*e[l]));e[h]=n.get(a-1,h),n.set(a,h,0)}}e[a]=o}for(a=0;a<i-1;a++){if(n.set(i-1,a,n.get(a,a)),n.set(a,a,1),o=e[a+1],o!==0){for(l=0;l<=a;l++)e[l]=n.get(l,a+1)/o;for(h=0;h<=a;h++){for(r=0,l=0;l<=a;l++)r+=n.get(l,a+1)*n.get(l,h);for(l=0;l<=a;l++)n.set(l,h,n.get(l,h)-r*e[l])}}for(l=0;l<=a;l++)n.set(l,a+1,0)}for(h=0;h<i;h++)e[h]=n.get(i-1,h),n.set(i-1,h,0);n.set(i-1,i-1,1),t[0]=0}function Hs(i,t,e,n){let s,r,o,a,h,l,c,u,m,w,g,p,P,f,M,b;for(o=1;o<i;o++)t[o-1]=t[o];t[i-1]=0;let R=0,C=0,V=Number.EPSILON;for(l=0;l<i;l++){for(C=Math.max(C,Math.abs(e[l])+Math.abs(t[l])),c=l;c<i&&!(Math.abs(t[c])<=V*C);)c++;if(c>l)do{for(s=e[l],u=(e[l+1]-s)/(2*t[l]),m=Rt(u,1),u<0&&(m=-m),e[l]=t[l]/(u+m),e[l+1]=t[l]*(u+m),w=e[l+1],r=s-e[l],o=l+2;o<i;o++)e[o]-=r;for(R=R+r,u=e[c],g=1,p=g,P=g,f=t[l+1],M=0,b=0,o=c-1;o>=l;o--)for(P=p,p=g,b=M,s=g*t[o],r=g*u,m=Rt(u,t[o]),t[o+1]=M*m,M=t[o]/m,g=u/m,u=g*e[o]-M*s,e[o+1]=r+M*(g*s+M*e[o]),h=0;h<i;h++)r=n.get(h,o+1),n.set(h,o+1,M*n.get(h,o)+g*r),n.set(h,o,g*n.get(h,o)-M*r);u=-M*b*P*f*t[l]/w,t[l]=M*u,e[l]=g*u}while(Math.abs(t[l])>V*C);e[l]=e[l]+R,t[l]=0}for(o=0;o<i-1;o++){for(h=o,u=e[o],a=o+1;a<i;a++)e[a]<u&&(h=a,u=e[a]);if(h!==o)for(e[h]=e[o],e[o]=u,a=0;a<i;a++)u=n.get(a,o),n.set(a,o,n.get(a,h)),n.set(a,h,u)}}function Ws(i,t,e,n){let s=0,r=i-1,o,a,h,l,c,u,m;for(u=s+1;u<=r-1;u++){for(m=0,l=u;l<=r;l++)m=m+Math.abs(t.get(l,u-1));if(m!==0){for(h=0,l=r;l>=u;l--)e[l]=t.get(l,u-1)/m,h+=e[l]*e[l];for(a=Math.sqrt(h),e[u]>0&&(a=-a),h=h-e[u]*a,e[u]=e[u]-a,c=u;c<i;c++){for(o=0,l=r;l>=u;l--)o+=e[l]*t.get(l,c);for(o=o/h,l=u;l<=r;l++)t.set(l,c,t.get(l,c)-o*e[l])}for(l=0;l<=r;l++){for(o=0,c=r;c>=u;c--)o+=e[c]*t.get(l,c);for(o=o/h,c=u;c<=r;c++)t.set(l,c,t.get(l,c)-o*e[c])}e[u]=m*e[u],t.set(u,u-1,m*a)}}for(l=0;l<i;l++)for(c=0;c<i;c++)n.set(l,c,l===c?1:0);for(u=r-1;u>=s+1;u--)if(t.get(u,u-1)!==0){for(l=u+1;l<=r;l++)e[l]=t.get(l,u-1);for(c=u;c<=r;c++){for(a=0,l=u;l<=r;l++)a+=e[l]*n.get(l,c);for(a=a/e[u]/t.get(u,u-1),l=u;l<=r;l++)n.set(l,c,n.get(l,c)+a*e[l])}}}function Qs(i,t,e,n,s){let r=i-1,o=0,a=i-1,h=Number.EPSILON,l=0,c=0,u=0,m=0,w=0,g=0,p=0,P=0,f,M,b,R,C,V,v,S,j,d,x,A,y,$,I;for(f=0;f<i;f++)for((f<o||f>a)&&(e[f]=s.get(f,f),t[f]=0),M=Math.max(f-1,0);M<i;M++)c=c+Math.abs(s.get(f,M));for(;r>=o;){for(R=r;R>o&&(g=Math.abs(s.get(R-1,R-1))+Math.abs(s.get(R,R)),g===0&&(g=c),!(Math.abs(s.get(R,R-1))<h*g));)R--;if(R===r)s.set(r,r,s.get(r,r)+l),e[r]=s.get(r,r),t[r]=0,r--,P=0;else if(R===r-1){if(v=s.get(r,r-1)*s.get(r-1,r),u=(s.get(r-1,r-1)-s.get(r,r))/2,m=u*u+v,p=Math.sqrt(Math.abs(m)),s.set(r,r,s.get(r,r)+l),s.set(r-1,r-1,s.get(r-1,r-1)+l),S=s.get(r,r),m>=0){for(p=u>=0?u+p:u-p,e[r-1]=S+p,e[r]=e[r-1],p!==0&&(e[r]=S-v/p),t[r-1]=0,t[r]=0,S=s.get(r,r-1),g=Math.abs(S)+Math.abs(p),u=S/g,m=p/g,w=Math.sqrt(u*u+m*m),u=u/w,m=m/w,M=r-1;M<i;M++)p=s.get(r-1,M),s.set(r-1,M,m*p+u*s.get(r,M)),s.set(r,M,m*s.get(r,M)-u*p);for(f=0;f<=r;f++)p=s.get(f,r-1),s.set(f,r-1,m*p+u*s.get(f,r)),s.set(f,r,m*s.get(f,r)-u*p);for(f=o;f<=a;f++)p=n.get(f,r-1),n.set(f,r-1,m*p+u*n.get(f,r)),n.set(f,r,m*n.get(f,r)-u*p)}else e[r-1]=S+u,e[r]=S+u,t[r-1]=p,t[r]=-p;r=r-2,P=0}else{if(S=s.get(r,r),j=0,v=0,R<r&&(j=s.get(r-1,r-1),v=s.get(r,r-1)*s.get(r-1,r)),P===10){for(l+=S,f=o;f<=r;f++)s.set(f,f,s.get(f,f)-S);g=Math.abs(s.get(r,r-1))+Math.abs(s.get(r-1,r-2)),S=j=.75*g,v=-.4375*g*g}if(P===30&&(g=(j-S)/2,g=g*g+v,g>0)){for(g=Math.sqrt(g),j<S&&(g=-g),g=S-v/((j-S)/2+g),f=o;f<=r;f++)s.set(f,f,s.get(f,f)-g);l+=g,S=j=v=.964}for(P=P+1,C=r-2;C>=R&&(p=s.get(C,C),w=S-p,g=j-p,u=(w*g-v)/s.get(C+1,C)+s.get(C,C+1),m=s.get(C+1,C+1)-p-w-g,w=s.get(C+2,C+1),g=Math.abs(u)+Math.abs(m)+Math.abs(w),u=u/g,m=m/g,w=w/g,!(C===R||Math.abs(s.get(C,C-1))*(Math.abs(m)+Math.abs(w))<h*(Math.abs(u)*(Math.abs(s.get(C-1,C-1))+Math.abs(p)+Math.abs(s.get(C+1,C+1))))));)C--;for(f=C+2;f<=r;f++)s.set(f,f-2,0),f>C+2&&s.set(f,f-3,0);for(b=C;b<=r-1&&($=b!==r-1,b!==C&&(u=s.get(b,b-1),m=s.get(b+1,b-1),w=$?s.get(b+2,b-1):0,S=Math.abs(u)+Math.abs(m)+Math.abs(w),S!==0&&(u=u/S,m=m/S,w=w/S)),S!==0);b++)if(g=Math.sqrt(u*u+m*m+w*w),u<0&&(g=-g),g!==0){for(b!==C?s.set(b,b-1,-g*S):R!==C&&s.set(b,b-1,-s.get(b,b-1)),u=u+g,S=u/g,j=m/g,p=w/g,m=m/u,w=w/u,M=b;M<i;M++)u=s.get(b,M)+m*s.get(b+1,M),$&&(u=u+w*s.get(b+2,M),s.set(b+2,M,s.get(b+2,M)-u*p)),s.set(b,M,s.get(b,M)-u*S),s.set(b+1,M,s.get(b+1,M)-u*j);for(f=0;f<=Math.min(r,b+3);f++)u=S*s.get(f,b)+j*s.get(f,b+1),$&&(u=u+p*s.get(f,b+2),s.set(f,b+2,s.get(f,b+2)-u*w)),s.set(f,b,s.get(f,b)-u),s.set(f,b+1,s.get(f,b+1)-u*m);for(f=o;f<=a;f++)u=S*n.get(f,b)+j*n.get(f,b+1),$&&(u=u+p*n.get(f,b+2),n.set(f,b+2,n.get(f,b+2)-u*w)),n.set(f,b,n.get(f,b)-u),n.set(f,b+1,n.get(f,b+1)-u*m)}}}if(c!==0){for(r=i-1;r>=0;r--)if(u=e[r],m=t[r],m===0)for(R=r,s.set(r,r,1),f=r-1;f>=0;f--){for(v=s.get(f,f)-u,w=0,M=R;M<=r;M++)w=w+s.get(f,M)*s.get(M,r);if(t[f]<0)p=v,g=w;else if(R=f,t[f]===0?s.set(f,r,v!==0?-w/v:-w/(h*c)):(S=s.get(f,f+1),j=s.get(f+1,f),m=(e[f]-u)*(e[f]-u)+t[f]*t[f],V=(S*g-p*w)/m,s.set(f,r,V),s.set(f+1,r,Math.abs(S)>Math.abs(p)?(-w-v*V)/S:(-g-j*V)/p)),V=Math.abs(s.get(f,r)),h*V*V>1)for(M=f;M<=r;M++)s.set(M,r,s.get(M,r)/V)}else if(m<0)for(R=r-1,Math.abs(s.get(r,r-1))>Math.abs(s.get(r-1,r))?(s.set(r-1,r-1,m/s.get(r,r-1)),s.set(r-1,r,-(s.get(r,r)-u)/s.get(r,r-1))):(I=ye(0,-s.get(r-1,r),s.get(r-1,r-1)-u,m),s.set(r-1,r-1,I[0]),s.set(r-1,r,I[1])),s.set(r,r-1,0),s.set(r,r,1),f=r-2;f>=0;f--){for(d=0,x=0,M=R;M<=r;M++)d=d+s.get(f,M)*s.get(M,r-1),x=x+s.get(f,M)*s.get(M,r);if(v=s.get(f,f)-u,t[f]<0)p=v,w=d,g=x;else if(R=f,t[f]===0?(I=ye(-d,-x,v,m),s.set(f,r-1,I[0]),s.set(f,r,I[1])):(S=s.get(f,f+1),j=s.get(f+1,f),A=(e[f]-u)*(e[f]-u)+t[f]*t[f]-m*m,y=(e[f]-u)*2*m,A===0&&y===0&&(A=h*c*(Math.abs(v)+Math.abs(m)+Math.abs(S)+Math.abs(j)+Math.abs(p))),I=ye(S*w-p*d+m*x,S*g-p*x-m*d,A,y),s.set(f,r-1,I[0]),s.set(f,r,I[1]),Math.abs(S)>Math.abs(p)+Math.abs(m)?(s.set(f+1,r-1,(-d-v*s.get(f,r-1)+m*s.get(f,r))/S),s.set(f+1,r,(-x-v*s.get(f,r)-m*s.get(f,r-1))/S)):(I=ye(-w-j*s.get(f,r-1),-g-j*s.get(f,r),p,m),s.set(f+1,r-1,I[0]),s.set(f+1,r,I[1]))),V=Math.max(Math.abs(s.get(f,r-1)),Math.abs(s.get(f,r))),h*V*V>1)for(M=f;M<=r;M++)s.set(M,r-1,s.get(M,r-1)/V),s.set(M,r,s.get(M,r)/V)}for(f=0;f<i;f++)if(f<o||f>a)for(M=f;M<i;M++)n.set(f,M,s.get(f,M));for(M=i-1;M>=o;M--)for(f=o;f<=a;f++){for(p=0,b=o;b<=Math.min(M,a);b++)p=p+n.get(f,b)*s.get(b,M);n.set(f,M,p)}}}function ye(i,t,e,n){let s,r;return Math.abs(e)>Math.abs(n)?(s=n/e,r=e+s*n,[(i+s*t)/r,(t-s*i)/r]):(s=e/n,r=n+s*e,[(s*i+t)/r,(s*t-i)/r])}class jn{constructor(t){if(t=wt.checkMatrix(t),!t.isSymmetric())throw new Error("Matrix is not symmetric");let e=t,n=e.rows,s=new E(n,n),r=!0,o,a,h;for(a=0;a<n;a++){let l=0;for(h=0;h<a;h++){let c=0;for(o=0;o<h;o++)c+=s.get(h,o)*s.get(a,o);c=(e.get(a,h)-c)/s.get(h,h),s.set(a,h,c),l=l+c*c}for(l=e.get(a,a)-l,r&&(r=l>0),s.set(a,a,Math.sqrt(Math.max(l,0))),h=a+1;h<n;h++)s.set(a,h,0)}this.L=s,this.positiveDefinite=r}isPositiveDefinite(){return this.positiveDefinite}solve(t){t=wt.checkMatrix(t);let e=this.L,n=e.rows;if(t.rows!==n)throw new Error("Matrix dimensions do not match");if(this.isPositiveDefinite()===!1)throw new Error("Matrix is not positive definite");let s=t.columns,r=t.clone(),o,a,h;for(h=0;h<n;h++)for(a=0;a<s;a++){for(o=0;o<h;o++)r.set(h,a,r.get(h,a)-r.get(o,a)*e.get(h,o));r.set(h,a,r.get(h,a)/e.get(h,h))}for(h=n-1;h>=0;h--)for(a=0;a<s;a++){for(o=h+1;o<n;o++)r.set(h,a,r.get(h,a)-r.get(o,a)*e.get(o,h));r.set(h,a,r.get(h,a)/e.get(h,h))}return r}get lowerTriangularMatrix(){return this.L}}class Nn{constructor(t,e={}){t=wt.checkMatrix(t);let{Y:n}=e;const{scaleScores:s=!1,maxIterations:r=1e3,terminationCriteria:o=1e-10}=e;let a;if(n){if(ft.isAnyArray(n)&&typeof n[0]=="number"?n=E.columnVector(n):n=wt.checkMatrix(n),n.rows!==t.rows)throw new Error("Y should have the same number of rows as X");a=n.getColumnVector(0)}else a=t.getColumnVector(0);let h=1,l,c,u,m;for(let w=0;w<r&&h>o;w++)u=t.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0)),u=u.div(u.norm()),l=t.mmul(u).div(u.transpose().mmul(u).get(0,0)),w>0&&(h=l.clone().sub(m).pow(2).sum()),m=l.clone(),n?(c=n.transpose().mmul(l).div(l.transpose().mmul(l).get(0,0)),c=c.div(c.norm()),a=n.mmul(c).div(c.transpose().mmul(c).get(0,0))):a=l;if(n){let w=t.transpose().mmul(l).div(l.transpose().mmul(l).get(0,0));w=w.div(w.norm());let g=t.clone().sub(l.clone().mmul(w.transpose())),p=a.transpose().mmul(l).div(l.transpose().mmul(l).get(0,0)),P=n.clone().sub(l.clone().mulS(p.get(0,0)).mmul(c.transpose()));this.t=l,this.p=w.transpose(),this.w=u.transpose(),this.q=c,this.u=a,this.s=l.transpose().mmul(l),this.xResidual=g,this.yResidual=P,this.betas=p}else this.w=u.transpose(),this.s=l.transpose().mmul(l).sqrt(),s?this.t=l.clone().div(this.s.get(0,0)):this.t=l,this.xResidual=t.sub(l.mmul(u.transpose()))}}q.AbstractMatrix=Q,q.CHO=jn,q.CholeskyDecomposition=jn,q.DistanceMatrix=_n,q.EVD=Vn;var Gs=q.EigenvalueDecomposition=Vn;q.LU=Me,q.LuDecomposition=Me;var Zs=q.Matrix=E;q.MatrixColumnSelectionView=$s,q.MatrixColumnView=Ts,q.MatrixFlipColumnView=Is,q.MatrixFlipRowView=Fs,q.MatrixRowSelectionView=Ls,q.MatrixRowView=_s,q.MatrixSelectionView=de,q.MatrixSubView=Bs,q.MatrixTransposeView=Vs,q.NIPALS=Nn,q.Nipals=Nn,q.QR=Ye,q.QrDecomposition=Ye,q.SVD=Dt,q.SingularValueDecomposition=Dt,q.SymmetricMatrix=te,q.WrapperMatrix1D=Ln,q.WrapperMatrix2D=wt,q.correlation=Ys,q.covariance=Us;var qn=q.default=E;q.determinant=Pe,q.inverse=Ns,q.linearDependencies=zs,q.pseudoInverse=Ds,q.solve=Bn,q.wrap=js;const Js=Gs,Ks=Zs;qn.Matrix&&qn.Matrix;function be(i,t,e){const n=i/e,s=t/e;if(!(isFinite(n)&&isFinite(s))){const h=-i/t;return isFinite(h)?[h]:i==0&&t==0?[0]:[]}const r=s*s-4*n;let o=0;if(isFinite(r)){if(r<0)return[];if(r==0)return[-.5*s];o=-.5*(s+Ut(Math.sqrt(r),s))}else o=-s;const a=n/o;return isFinite(a)?a>o?[o,a]:[a,o]:[o]}function On(i,t,e,n){const s=e/(3*n),r=t/(3*n),o=i/n;if(!(isFinite(o)&&isFinite(r)&&isFinite(s)))return be(i,t,e);const a=-s*s+r,h=-r*s+o,l=s*o-r*r,c=4*a*l-h*h,u=-2*s*a+h;if(c<0){const m=Math.sqrt(-.25*c),w=-.5*u;return[Math.cbrt(w+m)+Math.cbrt(w-m)-s]}else if(c==0){const m=Ut(Math.sqrt(-a),u);return[m-s,-2*m-s]}else{const m=Math.atan2(Math.sqrt(c),-u)/3,w=Math.cos(m),g=Math.sin(m)*Math.sqrt(3),p=.5*(-w+g),P=.5*(-w-g),f=2*Math.sqrt(-a);return[f*w-s,f*p-s,f*P-s]}}function tr(i,t,e,n,s){if(s==0)return On(i,t,e,n);const r=n/s,o=e/s,a=t/s,h=i/s;let l=zn(r,o,a,h,!1);if(l!==null)return l;const c=716e74;for(let u=0;u<2;u++)if(l=zn(r/c,o/(c*c),a/(c*c*c),h/(c*c*c*c),u!=0),l!==null){for(let m=0;m<l.length;m++)l[m]*=c;return l}return[]}function Vt(i,t){return t==0?Math.abs(i):Math.abs((i-t)/t)}function zn(i,t,e,n,s){const r=er(i,t,e,n,s);if(r!==null&&r.length==4){let o=[];for(let a=0;a<2;a++){const h=r[a*2],l=r[a*2+1];o=o.concat(be(l,h,1))}return o}return null}function er(i,t,e,n,s){function r(L,O,B,Y){const H=Vt(L+B,i),T=Vt(O+L*B+Y,t),U=Vt(O*B+L*Y,e);return H+T+U}function o(L,O,B,Y){return r(L,O,B,Y)+Vt(O*Y,n)}const a=9*i*i-24*t,h=a>=0?-2*t/(3*i+Ut(Math.sqrt(a),i)):-.25*i,l=i+4*h,c=t+3*h*(i+2*h),u=e+h*(2*t+h*(3*i+4*h)),m=n+h*(e+h*(t+h*(i+h)));let w=0,g=0;const p=349e100;if(s){const L=l/p,O=c/p,B=u/p,Y=m/p;w=L*B-4/p*Y-1/3*O*O,g=(L*B-8/p*Y-2/9*O*O)*(1/3)*O-B*(B/p)-L*L*Y}else w=l*u-4*m-1/3*c*c,g=(l*u+8*m-2/9*c*c)*(1/3)*c-u*u-l*l*m;if(!isFinite(w)&&isFinite(g))return null;let P=nr(w,g);s&&(P*=p);const f=i*.5,M=1/6*t+.5*P,b=e-i*M,R=2/3*t-P-f*f,C=.5*b/R,V=2*(n-M*M)/b,v=.5*b/V;let S=0,j=0,d=0;for(let L=0;L<3;L++){const O=L==1?v:R,B=L==0?C:V,Y=Vt(O+f*f+2*M,t),H=Vt(2*(O*B+f*M),e),T=Vt(O*B*B+M*M,n),U=Y+H+T;(L==0||U<d)&&(S=O,j=B,d=U)}const x=S,A=j;let y=0,$=0,I=0,F=0;if(x<0){const L=Math.sqrt(-x);if(y=f+L,$=M+L*A,I=f-L,F=M-L*A,Math.abs(F)<Math.abs($)?F=n/$:Math.abs(F)>Math.abs($)&&($=n/F),Math.abs(y)!=Math.abs(I)){let O=null,B=null;if(Math.abs(y)<Math.abs(I)){const H=(e-$*I)/F,T=(t-F-$)/I;O=[i-I,H,T],B=[I,I,I]}else{const H=(e-y*F)/$,T=(t-F-$)/y,U=i-y;O=[y,y,y],B=[U,H,T]}let Y=0;for(let H=0;H<3;H++){const T=O[H],U=B[H];if(isFinite(T)&&isFinite(U)){const K=r(T,$,U,F);(H==0||K<Y)&&(y=T,I=U,Y=K)}}}}else if(x==0){const L=n-M*M;y=f,$=M+Math.sqrt(-L),I=f,F=M-Math.sqrt(-L),Math.abs($)>Math.abs(F)?F=n/$:Math.abs(F)>Math.abs($)&&($=n/F)}else return[];let X=o(y,$,I,F);for(let L=0;L<8&&X!=0;L++){const O=$*F-n,B=$*I+y*F-e,Y=$+y*I+F-t,H=y+I-i,T=y-I,U=$*$-$*(I*T+2*F)+F*(y*T+F);if(U==0)break;const K=1/U,J=F-$,W=$*I-y*F,mn=T*O+J*B+W*Y-($*J+y*W)*H,gn=(y*T+J)*O-$*(T*B+J*Y+W*H),pn=-T*O-J*B-W*Y+(I*W+F*J)*H,wn=-(I*T+J)*O+F*(T*B+J*Y+W*H),Ce=y-K*mn,Te=$-K*gn,$e=I-K*pn,Ie=F-K*wn,Fe=o(Ce,Te,$e,Ie);if(Fe<X)y=Ce,$=Te,I=$e,F=Ie,X=Fe;else break}return[y,$,I,F]}function nr(i,t){const e=-.3333333333333333*i,n=.5*t;let s,r=null;if((Math.abs(e)>=1e102||Math.abs(n)>=1e164)&&(Math.abs(e)<Math.abs(n)?r=1-e*(e/n)*(e/n):r=Math.sign(e)*(n/e*(n/e)/e-1)),r!==null&&n==0)i>0?s=0:s=Math.sqrt(-i);else if(r!==null?r<0:n*n<e*e*e){const h=r!==null?n/e/Math.sqrt(e):n/Math.sqrt(e*e*e);s=-2*Math.sqrt(e)*Ut(Math.cos(Math.acos(Math.abs(h))*(1/3)),h)}else{let h;r!==null?Math.abs(e)<Math.abs(n)?h=-n*(1+Math.sqrt(r)):h=-n-Ut(Math.sqrt(Math.abs(e))*e*Math.sqrt(r),n):h=Math.cbrt(-n-Ut(Math.sqrt(n*n-e*e*e),n));const l=h==0?0:e/h;s=h+l}let o=s,a=(o*o+i)*o+t;if(Math.abs(a)<222045e-21*Math.max(o*o*o,i*o,t))return o;for(let h=0;h<8;h++){const l=3*o*o+i;if(l==0)break;const c=o-a/l,u=(c*c+i)*c+t;if(u==0)return c;if(Math.abs(u)>=Math.abs(a))break;o=c,a=u}return o}function Ut(i,t){const e=Math.abs(i);return t<0?-e:e}function Xe(i,t=1e-9){if(i[i.length-1]==0)return Xe(i.slice(0,-1),t);const e=new Ks([i.slice(0,-1).reverse().map(s=>-s/i[i.length-1]),...Array.from({length:i.length-2},(s,r)=>{const o=new Array(i.length-1).fill(0);return o[r]=1,o})]),n=new Js(e);return n.realEigenvalues.filter((s,r)=>Math.abs(n.imaginaryEigenvalues[r])<t)}const ir=(i,t,e)=>[i[0]*(1-e)+t[0]*e,i[1]*(1-e)+t[1]*e];function sr(i){const t=[];for(let e=0;e<i.length-1;e++)t.push([i[e],i[e+1]]);return t}function He(i,t){const e=sr(i).map(([n,s])=>ir(n,s,t));return i.length===2?[e]:[...He(e,t),e]}let ht=class Wt extends Jt{constructor(t,e,n,s){super(t,e),_(this,"segmentType","CUBIC_BEZIER"),_(this,"firstControlPoint"),_(this,"lastControlPoint"),_(this,"_boundingBox",null),_(this,"_polynomialCoefficients",null),this.firstControlPoint=n,this.lastControlPoint=s}get midPoint(){return this.paramPoint(.5)}get boundingBox(){if(this._boundingBox===null){const t=e=>{const[n,s,r,o]=[this.firstPoint[e],this.firstControlPoint[e],this.lastControlPoint[e],this.lastPoint[e]],a=-n+3*s-3*r+o,h=2*n-4*s+2*r,l=-n+s;return be(l,h,a).filter(c=>c>=-this.precision&&c<=1+this.precision)};this._boundingBox=Ve([this.firstPoint,...t(0).map(e=>this.paramPoint(e)),...t(1).map(e=>this.paramPoint(e)),this.lastPoint]).grow(this.precision)}return this._boundingBox}clone(){return new Wt(this.firstPoint,this.lastPoint,this.firstControlPoint,this.lastControlPoint)}reverse(){return new Wt(this.lastPoint,this.firstPoint,this.lastControlPoint,this.firstControlPoint)}isSame(t){return t.segmentType!=="CUBIC_BEZIER"?!1:k(this.firstPoint,t.firstPoint)&&k(this.lastPoint,t.lastPoint)&&k(this.firstControlPoint,t.firstControlPoint)&&k(this.lastControlPoint,t.lastControlPoint)}distanceFrom(t){const e=kn(n=>_t(this.paramPoint(n),t),this.precision);return e.argMin<-this.precision||e.argMin>1+this.precision?Math.min(Z(this.firstPoint,t),Z(this.lastPoint,t)):Math.sqrt(e.fMin)}isOnSegment(t){if(!this.boundingBox.contains(t))return!1;try{const e=this.pointToParam(t);return e>=-this.precision&&e<=1+this.precision}catch{return!1}}gradientAt(t){const e=1-t,n=e*e,s=t*t,r=3*n,o=6*e*t,a=3*s,h=D(this.firstControlPoint,this.firstPoint),l=D(this.lastControlPoint,this.firstControlPoint),c=D(this.lastPoint,this.lastControlPoint);return[r*h[0]+o*l[0]+a*c[0],r*h[1]+o*l[1]+a*c[1]]}tangentAt(t){const e=this.pointToParam(t);return it(this.gradientAt(e))}get tangentAtFirstPoint(){return it(D(this.firstControlPoint,this.firstPoint))}get tangentAtLastPoint(){return it(D(this.lastControlPoint,this.lastPoint))}normalAt(t){const e=this.tangentAt(t);return at(e)}splitAtParameters(t,e=null){const n=[...t];n.sort((r,o)=>r-o);let s={originalParam:0,param:0,p0:this.firstPoint,p1:this.firstControlPoint,p2:this.lastControlPoint};return n.flatMap((r,o)=>{if(r-s.originalParam<this.precision)return[];let a=!1;r>1-this.precision&&(a=!0);const h=(r-s.originalParam)/(1-s.originalParam),l=He([s.p0,s.p1,s.p2,this.lastPoint],a?1:h),c=a?this.lastPoint:(e==null?void 0:e.get(r))??l[0][0],u=l[1][0],m=l[2][0],w=l[1][1],g=l[2][2],p=new Wt(s.p0,c,m,u);return s={param:h,originalParam:r,p0:c,p1:w,p2:g},o===n.length-1&&!a?[p,new Wt(s.p0,this.lastPoint,s.p1,s.p2)]:p})}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=e.map(r=>this.pointToParam(r)),s=new Map(xt([n,e]));return this.splitAtParameters(n,s)}transform(t){return new Wt(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.firstControlPoint),t.transform(this.lastControlPoint))}paramPoint(t){const e=1-t,n=e*e,s=t*t,r=n*e,o=3*n*t,a=3*e*s,h=s*t;return[r*this.firstPoint[0]+o*this.firstControlPoint[0]+a*this.lastControlPoint[0]+h*this.lastPoint[0],r*this.firstPoint[1]+o*this.firstControlPoint[1]+a*this.lastControlPoint[1]+h*this.lastPoint[1]]}get polynomialCoefficients(){if(this._polynomialCoefficients===null){const t=e=>{const n=this.firstPoint[e],s=this.firstControlPoint[e],r=this.lastControlPoint[e],o=this.lastPoint[e],a=-n+3*s-3*r+o,h=3*n-6*s+3*r,l=-3*n+3*s;return[n,l,h,a]};this._polynomialCoefficients=[t(0),t(1)]}return this._polynomialCoefficients}paramsAtY(t){const[e,n,s,r]=this.polynomialCoefficients[1];return On(e-t,n,s,r).filter(o=>o>=-this.precision&&o<=1+this.precision)}pointToParam(t){const e=this.paramsAtY(t[1]);if(e.length===0)throw new Error("Point is not on the curve");const n=r=>Math.abs(this.paramPoint(r)[0]-t[0])<=this.precision,s=e.find(n);if(s===void 0)throw new Error("Point is not on the curve");return s}},rt=class oe extends Jt{constructor(t,e,n,s,r,o,a=!1,{ignoreChecks:h=!1,angleUnits:l="deg"}={}){super(t,e),_(this,"segmentType","ELLIPSE_ARC"),_(this,"precision",1e-6),_(this,"majorRadius"),_(this,"minorRadius"),_(this,"center"),_(this,"tiltAngle"),_(this,"clockwise"),_(this,"_coefficients",null),_(this,"_boundingBox"),_(this,"_linearExentricity"),_(this,"_exentricity"),_(this,"_focals"),_(this,"_ellipseReferenceFrameTransform"),_(this,"_reverseEllipseReferenceFrameTransform"),_(this,"_rotateFromEllipseReferenceFrame"),_(this,"_firstAngle"),_(this,"_lastAngle"),_(this,"_deltaAngle"),this.center=n;const c=s>=r;this.majorRadius=c?s:r,this.minorRadius=c?r:s;const u=l==="deg"?o*Ft:o;if(this.tiltAngle=Bt(c?u:u+Math.PI/2),this.clockwise=a,!h){if(k(t,e))throw new Error("Invalid arc, cannot be a full circle");if(!this.isPointOnEllipse(t))throw new Error(`First point ${et(t)} not on the ellipse defined by ${this.info}`);if(!this.isPointOnEllipse(e))throw new Error(`Last point ${et(e)} not on the ellipse defined by ${this.info}`);if(Math.abs(this.majorRadius-this.minorRadius)<this.precision)throw new Error("Both radii should be different, create an arc instead")}}get coefficients(){if(this._coefficients===null){const[t,e]=this.center,n=this.majorRadius*this.majorRadius,s=this.minorRadius*this.minorRadius,r=Math.cos(this.tiltAngle),o=Math.sin(this.tiltAngle),a=n*o*o+s*r*r,h=2*(s-n)*o*r,l=n*r*r+s*o*o;this._coefficients={x2:a,xy:h,y2:l,x:-2*a*t-h*e,y:-2*l*e-h*t,c:a*t*t+h*t*e+l*e*e-n*s}}return this._coefficients}get info(){return`ELLIPSE_ARC(${et(this.firstPoint)}, ${et(this.lastPoint)}, ${et(this.center)}, ${this.majorRadius}, ${this.minorRadius}, ${this.tiltAngle*je}, ${this.clockwise?"CW":"CCW"})`}reverse(){return new oe(this.lastPoint,this.firstPoint,this.center,this.majorRadius,this.minorRadius,this.tiltAngle,!this.clockwise,{ignoreChecks:!0,angleUnits:"rad"})}clone(){return new oe(this.firstPoint,this.lastPoint,this.center,this.majorRadius,this.minorRadius,this.tiltAngle,this.clockwise,{ignoreChecks:!0,angleUnits:"rad"})}computeEllipseExtrema(){const t=Math.tan(this.tiltAngle),e=this.minorRadius/this.majorRadius,n=-Math.atan(e*t),s=Math.atan(e/t);return[n,Math.PI+n,s,Math.PI+s].map(r=>this.thetaToParam(r)).filter(r=>this.isValidParameter(r)).map(r=>this.paramPoint(r))}get boundingBox(){if(this._boundingBox===void 0){const t=this.computeEllipseExtrema(),e=[this.firstPoint,this.lastPoint,...t];this._boundingBox=Ve(e).grow(this.precision)}return this._boundingBox}get linearExentricity(){return this._linearExentricity===void 0&&(this._linearExentricity=Math.sqrt(this.majorRadius*this.majorRadius-this.minorRadius*this.minorRadius)),this._linearExentricity}get exentricity(){return this._exentricity===void 0&&(this._exentricity=this.linearExentricity/this.majorRadius),this._exentricity}get focals(){if(this._focals===void 0){const t=this.majorAxis;this._focals=[G(this.center,nt(t,this.linearExentricity)),G(this.center,nt(t,-this.linearExentricity))]}return this._focals}get majorAxis(){return St(1,this.tiltAngle)}paramPoint(t){const e=this.firstAngle+t*this.deltaAngle*(this.clockwise?-1:1);return this.reverseEllipseReferenceFrameTransform.transform([this.majorRadius*Math.cos(e),this.minorRadius*Math.sin(e)])}pointToParam(t){if(!this.isPointOnEllipse(t))throw new Error(`Point ${et(t)} not on the ellipse defined by ${this.repr}`);const e=this.thetaToParam(this.pointTheta(t));if(!this.isValidParameter(e))throw new Error(`Point ${et(t)} is not on segment ${this.repr}`);return e}get midPoint(){return this.paramPoint(.5)}isValidParameter(t){return 1-t>=-this.precision&&t>=-this.precision}isSame(t){return k(this.center,t.center)&&Math.abs(this.majorRadius-t.majorRadius)<this.precision&&Math.abs(this.minorRadius-t.minorRadius)<this.precision&&(Math.abs(this.tiltAngle-t.tiltAngle)<this.precision||Math.abs(Math.abs(this.tiltAngle-t.tiltAngle)-Math.PI)<this.precision)&&(k(this.firstPoint,t.firstPoint)&&this.clockwise===t.clockwise||k(this.firstPoint,t.lastPoint)&&this.clockwise!==t.clockwise)}pointTheta(t){const e=this.ellipseReferenceFrameTransform.transform(t),n=Math.atan2(e[1]/this.minorRadius,e[0]/this.majorRadius);return Bt(n)}thetaToParam(t){return he(this.firstAngle,Bt(t),this.clockwise)/this.deltaAngle}isPointOnEllipse(t){const[e,n]=this.focals,s=Z(t,e),r=Z(t,n);return Math.abs(2*this.majorRadius-s-r)<this.precision}isOnSegment(t){return this.isPointOnEllipse(t)?this.isValidParameter(this.thetaToParam(this.pointTheta(t))):!1}distanceFrom(t){let e;if(k(t,this.center)?e=G(this.center,nt(at(this.majorAxis),this.minorRadius)):e=this.reverseEllipseReferenceFrameTransform.transform(ar(this.majorRadius,this.minorRadius,this.ellipseReferenceFrameTransform.transform(t))),this.isValidParameter(this.thetaToParam(this.pointTheta(t))))return Z(t,e);if(Yi(t,this.majorAxis,this.center)){const n=Bt(2*Math.PI-this.pointTheta(t)),s=this.thetaToParam(n);if(this.isValidParameter(s))return Z(t,this.paramPoint(s))}return Math.min(Z(t,this.firstPoint),Z(t,this.lastPoint))}get ellipseReferenceFrameTransform(){return this._ellipseReferenceFrameTransform===void 0&&(this._ellipseReferenceFrameTransform=new pt().rotate(-this.tiltAngle).translate(-this.center[0],-this.center[1])),this._ellipseReferenceFrameTransform}get reverseEllipseReferenceFrameTransform(){return this._reverseEllipseReferenceFrameTransform===void 0&&(this._reverseEllipseReferenceFrameTransform=new pt().translate(this.center[0],this.center[1]).rotate(this.tiltAngle)),this._reverseEllipseReferenceFrameTransform}get rotateFromEllipseReferenceFrame(){return this._rotateFromEllipseReferenceFrame===void 0&&(this._rotateFromEllipseReferenceFrame=new pt().rotate(this.tiltAngle)),this._rotateFromEllipseReferenceFrame}get firstAngle(){return this._firstAngle===void 0&&(this._firstAngle=this.pointTheta(this.firstPoint)),this._firstAngle}get lastAngle(){return this._lastAngle===void 0&&(this._lastAngle=this.pointTheta(this.lastPoint)),this._lastAngle}get deltaAngle(){return this._deltaAngle===void 0&&(this._deltaAngle=he(this.firstAngle,this.lastAngle,this.clockwise)),this._deltaAngle}normalAt(t){const e=this.tangentAt(t);return this.clockwise?at(e):Zt(e)}gradientAt(t){const e=this.firstAngle+t*this.deltaAngle*(this.clockwise?-1:1),n=-this.majorRadius*this.deltaAngle*Math.sin(e),s=this.minorRadius*this.deltaAngle*Math.cos(e),r=this.clockwise?[-n,-s]:[n,s];return this.rotateFromEllipseReferenceFrame.transform(r)}tangentAt(t){const e=this.pointTheta(t),n=-this.majorRadius*Math.sin(e),s=this.minorRadius*Math.cos(e),r=this.clockwise?[-n,-s]:[n,s];return it(this.rotateFromEllipseReferenceFrame.transform(r))}get tangentAtFirstPoint(){const t=-this.majorRadius*Math.sin(this.firstAngle),e=this.minorRadius*Math.cos(this.firstAngle),n=this.clockwise?[-t,-e]:[t,e];return it(this.rotateFromEllipseReferenceFrame.transform(n))}get tangentAtLastPoint(){const t=-this.majorRadius*Math.sin(this.lastAngle),e=this.minorRadius*Math.cos(this.lastAngle),n=this.clockwise?[-t,-e]:[t,e];return it(this.rotateFromEllipseReferenceFrame.transform(n))}transform(t){const e=t.transformAngle(this.tiltAngle),n=t.scaleFactor();return new oe(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.center),this.majorRadius*n,this.minorRadius*n,e,t.keepsOrientation()?this.clockwise:!this.clockwise,{angleUnits:"rad"})}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=[0,1,...e.map(o=>this.pointToParam(o))],s=new Map(xt([n,[this.firstPoint,this.lastPoint,...e]]));n.sort((o,a)=>o-a);let r=null;return n.flatMap((o,a)=>{if(a===n.length-1)return[];const h=n[a+1];if(h-o<this.precision)return r===null&&(r=o),[];const l=r===null?o:r,c=new oe(s.get(l)||this.paramPoint(l),s.get(h)||this.paramPoint(h),this.center,this.majorRadius,this.minorRadius,this.tiltAngle,this.clockwise,{angleUnits:"rad"});return r=null,c})}};function rr(i,t,e,n,s,r,o){const{center:a,rx:h,ry:l}=or(i,t,e,n,s*Ft,!r,o);return Math.abs(h-l)<1e-9?new z(i,t,a,o):new rt(i,t,a,h,l,s,o)}function or([i,t],[e,n],s,r,o,a,h){if(s<0&&(s=-s),r<0&&(r=-r),s==0||r==0)throw Error("rx and ry can not be 0");const l=Math.sin(o),c=Math.cos(o),u=(i-e)/2,m=(t-n)/2,w=(i+e)/2,g=(t+n)/2,p=c*u+l*m,P=c*m-l*u,f=p*p/(s*s)+P*P/(r*r);f>1&&(s=s*Math.sqrt(f),r=r*Math.sqrt(f));const M=s*r,b=s*P,R=r*p,C=b*b+R*R;if(!C)throw Error("start point can not be same as end point");let V=Math.sqrt(Math.abs((M*M-C)/C));a==h&&(V=-V);const v=V*b/r,S=-V*R/s,j=c*v-l*S+w,d=l*v+c*S+g;return{center:[j,d],rx:s,ry:r}}function ar(i,t,e){const n=Math.abs(e[0]),s=Math.abs(e[1]);let r=.707,o=.707;const a=i,h=t;for(let l=0;l<3;l++){const c=a*r,u=h*o,m=(a*a-h*h)*r**3/a,w=(h*h-a*a)*o**3/h,g=c-m,p=u-w,P=n-m,f=s-w,M=Math.hypot(g,p),b=Math.hypot(P,f);r=Math.min(1,Math.max(0,(P*M/b+m)/a)),o=Math.min(1,Math.max(0,(f*M/b+w)/h));const R=Math.hypot(r,o);r/=R,o/=R}return[a*r*Math.sign(e[0]),h*o*Math.sign(e[1])]}let ot=class Qt extends Jt{constructor(t,e,n){super(t,e),_(this,"segmentType","QUADRATIC_BEZIER"),_(this,"controlPoint"),_(this,"_boundingBox",null),_(this,"_polynomialCoefficients",null),this.controlPoint=n}get midPoint(){return this.paramPoint(.5)}get boundingBox(){if(this._boundingBox===null){const t=e=>{const[n,s,r]=[this.firstPoint[e],this.controlPoint[e],this.lastPoint[e]],o=n-2*s+r;if(!o)return[];const a=(n-s)/o;return a>=-this.precision&&a<=1+this.precision?[a]:[]};this._boundingBox=Ve([this.firstPoint,...t(0).map(e=>this.paramPoint(e)),...t(1).map(e=>this.paramPoint(e)),this.lastPoint]).grow(this.precision)}return this._boundingBox}clone(){return new Qt(this.firstPoint,this.lastPoint,this.controlPoint)}reverse(){return new Qt(this.lastPoint,this.firstPoint,this.controlPoint)}isSame(t){return t.segmentType!=="QUADRATIC_BEZIER"?!1:k(this.firstPoint,t.firstPoint)&&k(this.lastPoint,t.lastPoint)&&k(this.controlPoint,t.controlPoint)}distanceFrom(t){const e=kn(n=>_t(this.paramPoint(n),t),this.precision);return e.argMin<-this.precision||e.argMin>1+this.precision?Math.min(Z(this.firstPoint,t),Z(this.lastPoint,t)):Math.sqrt(e.fMin)}isOnSegment(t){if(!this.boundingBox.contains(t))return!1;try{const e=this.pointToParam(t);return e>=-this.precision&&e<=1+this.precision}catch{return!1}}gradientAt(t){const e=n=>{const s=this.firstPoint[n],r=this.controlPoint[n],o=this.lastPoint[n];return 2*(t*(s-2*r+o)-s+r)};return[e(0),e(1)]}tangentAt(t){const e=this.pointToParam(t);return it(this.gradientAt(e))}get tangentAtFirstPoint(){return it(D(this.controlPoint,this.firstPoint))}get tangentAtLastPoint(){return it(D(this.controlPoint,this.lastPoint))}normalAt(t){const e=this.tangentAt(t);return at(e)}splitAtParameters(t,e=null){const n=[...t];n.sort((r,o)=>r-o);let s={originalParam:0,param:0,p0:this.firstPoint,p1:this.controlPoint};return n.flatMap((r,o)=>{if(r-s.originalParam<this.precision)return[];let a=!1;r>1-this.precision&&(a=!0);const h=(r-s.originalParam)/(1-s.originalParam),l=He([s.p0,s.p1,this.lastPoint],a?1:h),c=a?this.lastPoint:(e==null?void 0:e.get(r))??l[0][0],u=l[1][0],m=l[1][1],w=new Qt(s.p0,c,u);return s={param:h,originalParam:r,p0:c,p1:m},o===n.length-1&&!a?[w,new Qt(s.p0,this.lastPoint,s.p1)]:w})}splitAt(t){let e;if(Array.isArray(t)&&t.length===0)return[this];Array.isArray(t[0])?e=t:e=[t];const n=e.map(r=>this.pointToParam(r)),s=new Map(xt([n,e]));return this.splitAtParameters(n,s)}transform(t){return new Qt(t.transform(this.firstPoint),t.transform(this.lastPoint),t.transform(this.controlPoint))}paramPoint(t){const e=1-t,n=e*e,s=2*e*t,r=t*t;return[n*this.firstPoint[0]+s*this.controlPoint[0]+r*this.lastPoint[0],n*this.firstPoint[1]+s*this.controlPoint[1]+r*this.lastPoint[1]]}get polynomialCoefficients(){if(this._polynomialCoefficients===null){const t=e=>{const n=this.firstPoint[e],s=this.controlPoint[e],r=this.lastPoint[e],o=n-2*s+r,a=2*(s-n);return[n,a,o]};this._polynomialCoefficients=[t(0),t(1)]}return this._polynomialCoefficients}paramsAtY(t){const[e,n,s]=this.polynomialCoefficients[1];return be(e-t,n,s).filter(r=>r>=-this.precision&&r<=1+this.precision)}pointToParam(t){const e=this.paramsAtY(t[1]);if(e.length===0)throw new Error("Point is not on the curve!");const n=r=>Math.abs(this.paramPoint(r)[0]-t[0])<=this.precision,s=e.find(n);if(s===void 0)throw new Error("Point is not on the curve");return s}};var hr=Object.defineProperty,lr=(i,t,e)=>t in i?hr(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,ut=(i,t,e)=>lr(i,typeof t!="symbol"?t+"":t,e);function ur(i,t){const e=D(t,i.firstPoint),n=Ne(e,i.V)/i.squareLength;return i.paramPoint(n)}function xe(i,t,e){const n=e||i.precision,s=ur(i,t.center),r=Z(s,t.center);if(r>t.radius+n)return[];if(Math.abs(r-t.radius)<n){const u=s;return i.isOnSegment(u)&&t.isOnSegment(u)?[u]:[]}const o=[],a=Math.sqrt(t.radius*t.radius-r*r),h=i.tangentAtFirstPoint,l=G(s,nt(h,a));i.isOnSegment(l)&&t.isOnSegment(l)&&o.push(l);const c=G(s,nt(h,-a));return i.isOnSegment(c)&&t.isOnSegment(c)&&o.push(c),o}const cr=i=>{const{firstPoint:t,lastPoint:e,center:n,clockwise:s}=i;return new z(e,t,n,s,{ignoreChecks:!0})},fr=(i,t)=>{if(i.isSame(t))return[i];const e=Et([t.isOnSegment(i.firstPoint)?i.firstPoint:null,t.isOnSegment(i.lastPoint)?i.lastPoint:null,i.isOnSegment(t.firstPoint)?t.firstPoint:null,i.isOnSegment(t.lastPoint)?t.lastPoint:null].filter(n=>n!==null)).sort((n,s)=>i.pointToParam(n)-i.pointToParam(s));if(e.length===0)return[];if(e.length===1)return[];if(e.length===2)return i.isSame(cr(t))?[]:[new z(e[0],e[1],i.center,i.clockwise)];if(e.length===3){const n=k(e[0],t.lastPoint)||k(e[0],t.firstPoint)?1:0;return[new z(e[0+n],e[1+n],i.center,i.clockwise)]}else if(e.length===4)return[new z(e[0],e[1],i.center,i.clockwise),new z(e[2],e[3],i.center,i.clockwise)];throw new Error("Bug in the arc arc overlap algorithm")};function Dn(i,t,e=!1,n){const s=n||i.precision,r=Z(i.center,t.center),o=i.radius+t.radius;if(r>o+s)return[];const a=Math.abs(i.radius-t.radius);if(r<a-s)return[];if(r<s)return a>s?[]:e?fr(i,t):[];const h=it(D(t.center,i.center)),l=r>o-s;if(l||Math.abs(r-a)<s){const f=l||i.radius>t.radius?1:-1,M=G(i.center,nt(h,f*i.radius));return i.isOnSegment(M)&&t.isOnSegment(M)?[M]:[]}const c=i.radius*i.radius/(2*r)-t.radius*t.radius/(2*r)+r/2,u=G(i.center,nt(h,c)),m=Math.sqrt(i.radius*i.radius-c*c),w=at(h),g=G(u,nt(w,m)),p=G(u,nt(w,-m)),P=[];return i.isOnSegment(g)&&t.isOnSegment(g)&&P.push(g),i.isOnSegment(p)&&t.isOnSegment(p)&&P.push(p),P}function We(i,t,e=1e-9){const n=i.transform(t.ellipseReferenceFrameTransform),s=n.slope,r=n.yIntercept,o=t.majorRadius*t.majorRadius,a=t.minorRadius*t.minorRadius,h=t.majorRadius*t.minorRadius,l=n.slope*n.slope,c=n.yIntercept*n.yIntercept,u=f=>f.map(M=>t.reverseEllipseReferenceFrameTransform.transform(M)).filter(M=>i.isOnSegment(M)&&t.isOnSegment(M));if(!Number.isFinite(s)){const f=n.firstPoint[0];if(Math.abs(f)-t.majorRadius>e)return[];if(Math.abs(Math.abs(f)-t.majorRadius)<e)return u([[f,0]]);const M=t.minorRadius*Math.sqrt(1-f*f/o),b=[f,M],R=[f,-M];return u([b,R])}const m=o*l+a-c;if(m<-e)return[];const w=o*l+a;if(Math.abs(m)<e){const f=-(o*s*r)/w,M=a*r/w;return u([[f,M]])}const g=Math.sqrt(m),p=[-(o*s*r+h*g)/w,(a*r-h*s*g)/w],P=[-(o*s*r-h*g)/w,(a*r+h*s*g)/w];return u([p,P])}function Un(i,t){const e=Math.max(i.precision,t.precision),n=i.coefficients,s=n.x2,r=n.xy,o=n.y2,a=n.x,h=n.y,l=n.c,c=t.coefficients,u=c.x2,m=c.xy,w=c.y2,g=c.x,p=c.y,P=c.c,f={z0:l*s*g*g+s*s*P*P-a*s*g*P+u*u*l*l-2*s*P*u*l-a*g*u*l+u*a*a*P,z1:p*a*a*u-P*g*s*r-2*s*P*u*h-l*u*m*a+2*g*m*s*l+2*p*P*s*s+g*g*s*h-p*g*s*a-2*s*p*u*l-l*u*g*r+2*l*h*u*u-P*m*s*a-h*u*g*a+2*P*r*u*a,z2:p*p*s*s+2*w*P*s*s-h*u*g*r+P*u*r*r-h*u*m*a-P*m*s*r-2*s*p*u*h+2*g*m*s*h-w*g*s*a-2*s*w*u*l+m*m*s*l+2*p*r*u*a+h*h*u*u-o*u*g*a-p*m*s*a+2*l*o*u*u-l*u*m*r+w*a*a*u+g*g*s*o-p*g*s*r-2*s*P*u*o,z3:-2*s*u*o*p+p*u*r*r+2*w*r*u*a-o*u*m*a+m*m*s*h-p*m*s*r-2*s*w*u*h-h*u*m*r-w*m*s*a+2*p*w*s*s+2*h*o*u*u-o*u*g*r+2*g*m*s*o-w*g*s*r,z4:s*s*w*w-2*s*w*u*o+u*u*o*o-r*s*m*w-r*m*u*o+r*r*u*w+o*s*m*m},M=Xe([f.z0,f.z1,f.z2,f.z3,f.z4],e).flatMap(b=>{const R=s*m*b+s*g-u*r*b-u*a;if(R)return[[-(s*P+s*w*b*b-u*o*b*b+s*p*b-u*h*b-u*l)/R,b]];const C=r*b+a,V=-C/(2*s),v=o*b*b+h*b+l,S=C*C/(4*s*s)-v/s;if(Math.abs(S)<e)return[[V,b]];if(S>0){const j=Math.sqrt(S);return[[V+j,b],[V-j,b]]}return[]});return Et(M,e)}function Yn(i,t){return Un(i,t).filter(e=>i.isOnSegment(e)&&t.isOnSegment(e))}const mr=i=>{const{firstPoint:t,lastPoint:e,center:n,majorRadius:s,minorRadius:r,tiltAngle:o,clockwise:a}=i;return new rt(e,t,n,s,r,o,a,{ignoreChecks:!0,angleUnits:"rad"})},gr=(i,t)=>{if(i.isSame(t))return[i];const e=(s,r)=>new rt(s,r,i.center,i.majorRadius,i.minorRadius,i.tiltAngle,i.clockwise,{ignoreChecks:!0,angleUnits:"rad"}),n=Et([t.isOnSegment(i.firstPoint)?i.firstPoint:null,t.isOnSegment(i.lastPoint)?i.lastPoint:null,i.isOnSegment(t.firstPoint)?t.firstPoint:null,i.isOnSegment(t.lastPoint)?t.lastPoint:null].filter(s=>s!==null)).sort((s,r)=>i.pointToParam(s)-i.pointToParam(r));if(n.length===0)return[];if(n.length===1)return[];if(n.length===2)return i.isSame(mr(t))?[]:[e(n[0],n[1])];if(n.length===3){const s=k(n[0],t.lastPoint)||k(n[0],t.firstPoint)?1:0;return[e(n[0+s],n[1+s])]}else if(n.length===4)return[e(n[0],n[1]),e(n[2],n[3])];throw new Error("Bug in the ellipse arc ellipse arc overlap algorithm")};function pr(i,t,e=!1){const n=Math.max(i.precision,t.precision);return k(i.center,t.center)&&Math.abs(i.majorRadius-t.majorRadius)<n&&Math.abs(i.minorRadius-t.minorRadius)<n&&(Math.abs(i.tiltAngle-t.tiltAngle)<n||Math.abs(Math.abs(i.tiltAngle-t.tiltAngle)-Math.PI)<n)?e?gr(i,t):[]:Un(i,t).filter(s=>i.isOnSegment(s)&&t.isOnSegment(s))}function Xn(i,t){const[e,n]=i.firstPoint,[s,r]=i.lastPoint,o=new pt().rotate(-Math.atan2(r-n,s-e)).translate(-e,-n),a=o.clone().inverse(),h=t.transform(o);return h.paramsAtY(0).map(l=>h.paramPoint(l)).map(l=>a.transform(l)).filter(l=>i.isOnSegment(l))}const wr=(i,t=1e-9)=>{let e=i;return Math.abs(i)<t&&(e=0),e.toFixed(-Math.log10(t))};function Hn(i,t=1e-9){return Array.from(new Map(i.map(e=>[wr(e,t),e])).values())}const dr=(i,t)=>{const[[e,n,s,r],[o,a,h,l]]=t.polynomialCoefficients,c=i.coefficients,u=c.x2,m=c.xy,w=c.y2,g=c.x,p=c.y,P=c.c,f=e*e,M=n*n,b=s*s,R=r*r,C=o*o,V=a*a,v=h*h,S=l*l,j=P+g*e+u*f+p*o+m*e*o+w*C,d=g*n+2*u*e*n+m*n*o+p*a+m*e*a+2*w*o*a,x=u*M+g*s+2*u*e*s+m*s*o+m*n*a+w*V+p*h+m*e*h+2*w*o*h,A=2*u*n*s+g*r+2*u*e*r+m*r*o+m*s*a+m*n*h+2*w*a*h+p*l+m*e*l+2*w*o*l,y=u*b+2*u*n*r+m*r*a+m*s*h+w*v+m*n*l+2*w*a*l,$=2*u*s*r+m*r*h+m*s*l+2*w*h*l,I=u*R+m*r*l+w*S;return[j,d,x,A,y,$,I]};function Wn(i,t){const e=Math.max(i.precision,t.precision),n=dr(i,t),s=Xe(n,e).filter(r=>r>=-t.precision&&r<=1+t.precision);return Hn(s,e).map(r=>t.paramPoint(r)).filter(r=>i.isOnSegment(r))}const Mr=(i,t)=>{const[[e,n,s],[r,o,a]]=t.polynomialCoefficients,h=i.coefficients,l=h.x2,c=h.xy,u=h.y2,m=h.x,w=h.y,g=h.c,p=e*e,P=n*n,f=s*s,M=r*r,b=o*o,R=a*a,C=l*p+c*e*r+u*M+m*e+w*r+g,V=2*l*e*n+c*e*o+c*n*r+2*u*r*o+m*n+w*o,v=2*l*e*s+l*P+c*e*a+c*n*o+c*s*r+2*u*r*a+u*b+m*s+w*a,S=2*l*n*s+c*n*a+c*s*o+2*u*o*a,j=l*f+c*s*a+u*R;return[C,V,v,S,j]};function Qn(i,t){const e=Math.max(i.precision,t.precision),n=Mr(i,t),s=tr(...n).filter(r=>r>=-t.precision&&r<=1+t.precision);return Hn(s,e).map(r=>t.paramPoint(r)).filter(r=>i.isOnSegment(r))}function ct(i,{firstPoint:t,lastPoint:e},n=1e-9){const s=D(e,t);return Math.abs(s[0])<n?s[1]>0?t[0]-i[0]:i[0]-t[0]:Math.abs(s[1])<n?s[0]>0?i[1]-t[1]:t[1]-i[1]:Ct(s,D(i,t))/Di(s)}class Qe{constructor(t,e,n,s){this.firstPoint=t,this.lastPoint=e,this.negativeThickness=n,this.positiveThickness=s}get width(){return this.positiveThickness-this.negativeThickness}}const Pr=3/4,yr=4/9;function br(i){const t=ct(i.firstControlPoint,i),e=ct(i.lastControlPoint,i),n=t*e>0?Pr:yr;return new Qe(i.firstPoint,i.lastPoint,n*Math.min(0,t,e),n*Math.max(0,t,e))}function xr(i){const t=ct(i.controlPoint,i);return new Qe(i.firstPoint,i.lastPoint,Math.min(0,t/2),Math.max(0,t/2))}function vr(i){if(i instanceof ht)return br(i);if(i instanceof ot)return xr(i);throw new Error("Not implemented")}function Ar(i){const t=i.paramPoint(.5),e=at(D(t,i.firstPoint)),n=G(t,e),s={firstPoint:t,lastPoint:n},r=[ct(i.firstPoint,s),ct(i.lastPoint,s)];return i instanceof ht?r.push(ct(i.firstControlPoint,s),ct(i.lastControlPoint,s)):i instanceof ot&&r.push(ct(i.controlPoint,s)),new Qe(t,n,Math.min(...r),Math.max(...r))}function Gn(i,t){const e=[];for(let n=1;n<i.length;n++){const s=i[n];if(s[1]===t){e.push(s[0]);continue}const r=i[n-1],o=t-r[1],a=t-s[1];if(o*a<0){e.push(r[0]+(t-r[1])*(s[0]-r[0])/(s[1]-r[1]));continue}}return e}let ee=class{constructor(t,e){this.from=t,this.to=e}get size(){return this.from==="start"?this.to==="end"?1:this.to:this.to==="end"?1-this.from:Math.abs(this.from-this.to)}clipCurve(t){return this.from==="start"?this.to==="end"?t:t.splitAtParameters([this.to])[0]:this.to==="end"?t.splitAtParameters([this.from])[1]:t.splitAtParameters([this.from,this.to])[1]}};function Er(i,t){if(i instanceof ht)return new kr([ct(i.firstPoint,t),ct(i.firstControlPoint,t),ct(i.lastControlPoint,t),ct(i.lastPoint,t)]);if(i instanceof ot)return new Sr([ct(i.firstPoint,t),ct(i.controlPoint,t),ct(i.lastPoint,t)]);throw new Error("Not implemented")}class Sr{constructor(t){ut(this,"topHull",[]),ut(this,"bottomHull",[]),this.distances=t;const[e,n,s]=t,r=[0,e],o=[1/2,n],a=[1,s],h=s-e,l=e;n-(h*(1/2)+l)>0?(this.topHull=[r,o,a],this.bottomHull=[r,a]):(this.topHull=[r,a],this.bottomHull=[r,o,a])}get startDistance(){return this.distances[0]}get endDistance(){return this.distances[2]}}class kr{constructor(t){ut(this,"topHull",[]),ut(this,"bottomHull",[]),this.distances=t;const[e,n,s,r]=t,o=[0,e],a=[1/3,n],h=[2/3,s],l=[1,r],c=r-e,u=e,m=n-(c*(1/3)+u),w=s-(c*(2/3)+u);let g=null,p=null;if(m*w<0)g=[o,a,l],p=[o,h,l];else{const P=m/w;P>=2?(g=[o,a,l],p=[o,l]):P<=.5?(g=[o,h,l],p=[o,l]):(g=[o,a,h,l],p=[o,l])}m<0&&([g,p]=[p,g]),this.topHull=g,this.bottomHull=p}get startDistance(){return this.distances[0]}get endDistance(){return this.distances[3]}}function Zn(i,t){const e=Er(t,i),n=Gn(e.topHull,i.negativeThickness),s=Gn(e.bottomHull,i.positiveThickness),r=e.endDistance>=i.negativeThickness&&e.endDistance<=i.positiveThickness;if(!n.length&&!s.length)return r?new ee("start","end"):null;if(n.length===1&&s.length===1)return new ee(n[0],s[0]);if(n.length===2&&s.length===2)throw new Error("Bug in the clipping algorithm, unexpected number of crossing points");const o=n.length?n:s;return o.length===2?new ee(o[0],o[1]):r?new ee(o[0],"end"):new ee("start",o[0])}function Jn(i,t){const e=vr(i),n=Zn(e,t);if(!n)return null;const s=Ar(i),r=Zn(s,t);return r?n.size>r.size?r.clipCurve(t):n.clipCurve(t):null}const ve=i=>i instanceof ot?At(D(i.controlPoint,i.firstPoint))+At(D(i.controlPoint,i.lastPoint)):At(D(i.firstControlPoint,i.firstPoint))+At(D(i.lastControlPoint,i.firstControlPoint))+At(D(i.lastControlPoint,i.lastPoint));function jt(i,t,e=1e-9,{maxIterations:n=100}={}){const s=Math.max(e*e,Number.EPSILON*10);let r=i,o=t,a=ve(r),h=ve(o);for(let l=0;l<n;l++){const c=a>s?Jn(o,r):r;if(!c)return[];const u=ve(c),m=h>s?Jn(c,o):o;if(!m)return[];const w=ve(m);if(u<=s&&w<=s)return[c.boundingBox.intersection(m.boundingBox).center];if(k(c.firstPoint,c.lastPoint)&&m.isOnSegment(c.firstPoint))return[c.firstPoint];if(k(m.firstPoint,m.lastPoint)&&c.isOnSegment(m.firstPoint))return[m.firstPoint];if(u>.8*a&&w>.8*h)if(u/a>w/h){const[g,p]=c.splitAtParameters([.5]);return Et([...jt(g,m,e,{maxIterations:n-l}),...jt(p,m,e,{maxIterations:n-l})],e)}else{const[g,p]=m.splitAtParameters([.5]);return Et([...jt(c,g,e,{maxIterations:n-l}),...jt(c,p,e,{maxIterations:n-l})],e)}r=c,o=m,a=u,h=w}throw new Error("Bézier clip: Maximum number of iterations reached")}function Rr(i,t){const e=[];if([[i.firstPoint,t],[i.lastPoint,t],[t.firstPoint,i],[t.lastPoint,i]].forEach(([n,s])=>{s.isOnSegment(n)&&e.push(n)}),e.length<2)return null;if(e.length===2)return[i.splitAt(e)[1]];if(e.length===3)return k(e[0],i.firstPoint)&&k(e[1],i.lastPoint)?[i]:[t];if(e.length===4)return[i]}function Cr(i,t,e=!1){const n=Math.max(i.precision,t.precision);if(e){const s=Rr(i,t);if(s)return s}return jt(i,t,n)}function Tr(i,t){const e=[];if([[i.firstPoint,t],[i.lastPoint,t],[t.firstPoint,i],[t.lastPoint,i]].forEach(([n,s])=>{s.isOnSegment(n)&&e.push(n)}),e.length<2)return null;if(e.length===2)return[i.splitAt(e)[1]];if(e.length===3)return k(e[0],i.firstPoint)&&k(e[1],i.lastPoint)?[i]:[t];if(e.length===4)return[i]}function $r(i,t,e=!1){const n=Math.max(i.precision,t.precision);if(e){const s=Tr(i,t);if(s)return s}return jt(i,t,n)}function Ir(i,t,e){if(i instanceof N&&t instanceof N){const n=xn(i,t,!1,e);return n===null?[]:[n]}if(i instanceof N&&t instanceof z)return xe(i,t,e);if(i instanceof z&&t instanceof N)return xe(t,i,e);if(i instanceof z&&t instanceof z)return Dn(i,t,!1,e);throw new Error("Not implemented")}function ne(i,t,e){if(i instanceof N&&t instanceof N){const n=xn(i,t,!0,e);return n===null?{intersections:[],overlaps:[],count:0}:n instanceof N?{intersections:[],overlaps:[n],count:1}:{intersections:[n],overlaps:[],count:1}}if(!i.boundingBox.overlaps(t.boundingBox))return{intersections:[],overlaps:[],count:0};if(i instanceof N&&t instanceof z){const n=xe(i,t,e);return{intersections:n,overlaps:[],count:n.length}}if(i instanceof z&&t instanceof N){const n=xe(t,i,e);return{intersections:n,overlaps:[],count:n.length}}if(i instanceof z&&t instanceof z){const n=Dn(i,t,!0,e);return n.length?n[0]instanceof z?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}if(i instanceof N&&t instanceof rt){const n=We(i,t,e);return{intersections:n,overlaps:[],count:n.length}}if(t instanceof N&&i instanceof rt){const n=We(t,i,e);return{intersections:n,overlaps:[],count:n.length}}if(i instanceof z&&t instanceof rt){const n=Yn(i,t);return{intersections:n,overlaps:[],count:n.length}}if(t instanceof z&&i instanceof rt){const n=Yn(t,i);return{intersections:n,overlaps:[],count:n.length}}if(i instanceof rt&&t instanceof rt){const n=pr(i,t,!0);return n.length?n[0]instanceof rt?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}if(i instanceof N&&(t instanceof ht||t instanceof ot)){const n=Xn(i,t);return{intersections:n,overlaps:[],count:n.length}}if(t instanceof N&&(i instanceof ht||i instanceof ot)){const n=Xn(t,i);return{intersections:n,overlaps:[],count:n.length}}if((i instanceof z||i instanceof rt)&&t instanceof ot){const n=Qn(i,t);return{intersections:n,overlaps:[],count:n.length}}if((t instanceof z||t instanceof rt)&&i instanceof ot){const n=Qn(t,i);return{intersections:n,overlaps:[],count:n.length}}if((i instanceof z||i instanceof rt)&&t instanceof ht){const n=Wn(i,t);return{intersections:n,overlaps:[],count:n.length}}if((t instanceof z||t instanceof rt)&&i instanceof ht){const n=Wn(t,i);return{intersections:n,overlaps:[],count:n.length}}if(i instanceof ot&&t instanceof ot){const n=$r(i,t);return n.length?n[0]instanceof ot?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}if(i instanceof ot&&t instanceof ht||t instanceof ot&&i instanceof ht){const n=jt(i,t);return{intersections:n,overlaps:[],count:n.length}}if(i instanceof ht&&t instanceof ht){const n=Cr(i,t);return n.length?n[0]instanceof ht?{intersections:[],overlaps:n,count:n.length}:{intersections:n,overlaps:[],count:n.length}:{intersections:[],overlaps:[],count:0}}throw new Error("Not implemented")}function Kn(i){const t=[];for(let e=0;e<i;e++)for(let n=0;n<=e;n++)t.push([e,n]);return t}function*Ge(i){for(const[t,e]of Kn(i.length))t!==e&&(yield[i[t],i[e]])}class ti extends Lt{constructor(t,{ignoreChecks:e=!1}={}){super(),ut(this,"segments"),ut(this,"_boundingBox",null),e||ei(t),this.segments=t}get repr(){return this.segments.map(t=>t.repr).join(`
9
9
  `)+`
10
- `}get info(){return this.repr}get firstPoint(){return this.segments[0].firstPoint}get lastPoint(){return this.segments[this.segments.length-1].lastPoint}get segmentsCount(){return this.segments.length}onStroke(t){return this.segments.some(e=>e.isOnSegment(t))}intersects(t){return this.boundingBox.overlaps(t.boundingBox)?this.segments.some(e=>t.segments.some(n=>zt(e,n).count>0)):!1}overlappingSegments(t){return this.segments.flatMap(e=>t.segments.flatMap(n=>e.boundingBox.overlaps(n.boundingBox)?zt(e,n).overlaps:[]))}get boundingBox(){if(this._boundingBox===null){let t=this.segments[0].boundingBox;this.segments.slice(1).forEach(e=>{t=t.merge(e.boundingBox)}),this._boundingBox=t}return this._boundingBox}[Symbol.for("nodejs.util.inspect.custom")](){return this.repr}}function vr(s,t="Stroke"){pn(s.length).forEach(([e,n])=>{if(e===n)return;const r=s[e],o=s[n],i=zt(r,o),h=Math.max(r.precision,o.precision);if(i.count!==0){if(i.count===1&&!i.overlaps.length){const l=e-n,a=i.intersections[0];if(l===1&&y(r.firstPoint,a,h)||l===-1&&y(r.lastPoint,a,h)||l===s.length-1&&y(r.lastPoint,a,h)&&y(o.firstPoint,a,h)||-l===s.length-1&&y(r.firstPoint,a,h)&&y(o.lastPoint,a,h))return}if(!(i.count===2&&s.length===2&&(y(r.firstPoint,i.intersections[0],h)&&y(r.lastPoint,i.intersections[1],h)||y(r.firstPoint,i.intersections[1],h)&&y(r.lastPoint,i.intersections[0],h))))throw new Error(`${t} segments must not intersect, but segments ${r.info} and ${o.info} do at ${JSON.stringify(i.intersections)}`)}})}function dn(s,t="Stroke"){if(s.length===0)throw new Error(`${t} must have at least one segment`);at([s.slice(0,-1),s.slice(1)]).forEach(([e,n])=>{if(!y(e.lastPoint,n.firstPoint))throw new Error(`${t} segments must be connected, but ${e.info} and ${n.info} are not`)}),vr(s,t)}function Pn(s,t){return!!(s instanceof B&&t instanceof B&&we(s.V,t.V)||s instanceof T&&t instanceof T&&y(s.center,t.center)&&s.radius-t.radius<s.precision)}function Mn(s,t){if(s instanceof B&&t instanceof B)return new B(s.firstPoint,t.lastPoint);if(s instanceof T&&t instanceof T)return new T(s.firstPoint,t.lastPoint,s.center,s.clockwise);throw new Error("Not implemented")}function yn(s){let t=!1;const e=[];for(const n of s.segments){if(e.length===0){e.push(n);continue}const r=e[e.length-1];Pn(r,n)?(t=!0,e.pop(),e.push(Mn(r,n))):e.push(n)}if(y(s.firstPoint,s.lastPoint)&&Pn(e[0],e[e.length-1])){t=!0;const n=e.pop();e[0]=Mn(n,e[0])}return t?e:null}let Pt=class jt extends wn{constructor(){super(...arguments),this.strokeType="STRAND"}reverse(){const t=this.segments.map(e=>e.reverse());return t.reverse(),new jt(t,{ignoreChecks:!0})}clone(){return new jt(this.segments.map(t=>t.clone()),{ignoreChecks:!0})}extend(t){if(!y(this.lastPoint,t.firstPoint))throw console.error(this.repr,t.repr),new Error("Cannot extend strand: connection point is not the same");return new jt([...this.segments,...t.segments])}simplify(){const t=yn(this);return t?new jt(t,{ignoreChecks:!0}):this}transform(t){return new jt(this.segments.map(e=>e.transform(t)),{ignoreChecks:!0})}};const Ar=(s,t)=>{const e=Wt(t,{V:[1,0],firstPoint:s,precision:t.precision});if(e==="parallel")return 0;const{intersectionParam1:n,intersectionParam2:r}=e;if(!t.isValidParameter(n)||r<=-t.precision)return 0;if(Math.abs(n)<t.precision||Math.abs(n-1)<t.precision){const[,o]=t.midPoint;return s[1]-o<0?1:0}return 1};class xe{constructor(t){this._count=0,this.segment=t}update(t,e=!1){!e&&!this.segment.isOnSegment(t)||(y(t,this.segment.firstPoint)?this._count+=this.segment.tangentAtFirstPoint[1]>0?1:0:y(t,this.segment.lastPoint)?this._count+=this.segment.tangentAtLastPoint[1]>0?0:1:this._count+=1)}get count(){return this._count}}const Er=(s,t)=>{const e=t.precision,n=Math.abs(s[1]-t.center[1]);if(n>t.radius+e)return 0;const r=vt(s,t.center),o=t.radius*t.radius,i=e*e;if(Math.abs(r-o)<i&&t.isOnSegment(s))return 0;const h=r-o>i;if(h&&t.center[0]<s[0])return 0;const l=Math.sqrt(t.radius*t.radius-n*n),a=new xe(t);return a.update([t.center[0]+l,s[1]]),h&&a.update([t.center[0]-l,s[1]]),a.count},Sr=(s,t)=>{const e=t.boundingBox.xMax+t.boundingBox.width/2,n=new B(s,[e,s[1]]),r=new xe(t);return Me(n,t).forEach(o=>{r.update(o,!0)}),r.count},kr=(s,t)=>{const e=new xe(t);return t.paramsAtY(s[1]).map(n=>{try{return t.paramPoint(n)}catch{return null}}).filter(n=>n!==null).filter(n=>{const[r]=n;return r>=s[0]}).forEach(n=>{e.update(n,!0)}),e.count};function Cr(s,t){if(t instanceof B)return Ar(s,t);if(t instanceof T)return Er(s,t);if(t instanceof Z)return Sr(s,t);if(t instanceof K||t instanceof N)return kr(s,t);throw new Error("Not implemented")}class it extends wn{constructor(t,{ignoreChecks:e=!1}={}){super(t,{ignoreChecks:!0}),this.strokeType="LOOP",this._clockwise=null,e||Tr(t)}get clockwise(){if(this._clockwise===null){const t=this.segments.flatMap(n=>n instanceof B?[n.firstPoint]:[n.firstPoint,n.paramPoint(.5)]),e=t.map((n,r)=>{const o=t[(r+1)%t.length];return(o[0]-n[0])*(o[1]+n[1])}).reduce((n,r)=>n+r,0);this._clockwise=e>0}return this._clockwise}clone(){return new it(this.segments.map(t=>t.clone()),{ignoreChecks:!0})}reverse(){const t=this.segments.map(e=>e.reverse());return t.reverse(),new it(t,{ignoreChecks:!0})}transform(t){return new it(this.segments.map(e=>e.transform(t)),{ignoreChecks:!0})}contains(t){return this.onStroke(t)||!this.boundingBox.contains(t)?!1:this.segments.reduce((e,n)=>e+Cr(t,n),0)%2===1}simplify(){const t=yn(this);return t?new it(t,{ignoreChecks:!0}):this}}function Tr(s){if(dn(s,"Loop"),!y(s[0].firstPoint,s[s.length-1].lastPoint))throw new Error("Loop segment must be closed")}const Rr=[B,T,Z,N,K];function bn(s){return Rr.some(t=>s instanceof t)}function xn(s){if(s instanceof B)return{type:s.segmentType,firstPoint:s.firstPoint,lastPoint:s.lastPoint};if(s instanceof T)return{type:s.segmentType,firstPoint:s.firstPoint,lastPoint:s.lastPoint,center:s.center,clockwise:s.clockwise};if(s instanceof Z)return{type:s.segmentType,firstPoint:s.firstPoint,lastPoint:s.lastPoint,center:s.center,clockwise:s.clockwise,majorRadius:s.majorRadius,minorRadius:s.minorRadius,tiltAngle:s.tiltAngle};if(s instanceof N)return{type:s.segmentType,firstPoint:s.firstPoint,lastPoint:s.lastPoint,controlPoint:s.controlPoint};if(s instanceof K)return{type:s.segmentType,firstPoint:s.firstPoint,lastPoint:s.lastPoint,firstControlPoint:s.firstControlPoint,lastControlPoint:s.lastControlPoint};throw new Error("Unknown segment type")}function ve(s){return{type:"LOOP",segments:s.segments.map(xn)}}function vn(s){return{type:"FIGURE",contour:ve(s.contour),holes:s.holes.map(ve)}}function Fr(s){return{type:"DIAGRAM",figures:s.figures.map(vn)}}function An(s){if(s instanceof ht)return Fr(s);if(s instanceof Q)return vn(s);if(s instanceof it)return ve(s);if(bn(s))return xn(s);throw new Error("Unknown shape type")}class Ir{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(t,e){let n=this.length++;for(;n>0;){const r=n-1>>1,o=this.values[r];if(e>=o)break;this.ids[n]=this.ids[r],this.values[n]=o,n=r}this.ids[n]=t,this.values[n]=e}pop(){if(this.length===0)return;const t=this.ids[0];if(this.length--,this.length>0){const e=this.ids[0]=this.ids[this.length],n=this.values[0]=this.values[this.length],r=this.length>>1;let o=0;for(;o<r;){let i=(o<<1)+1;const h=i+1;let l=this.ids[i],a=this.values[i];const c=this.values[h];if(h<this.length&&c<a&&(i=h,l=this.ids[h],a=c),a>=n)break;this.ids[o]=l,this.values[o]=a,o=i}this.ids[o]=e,this.values[o]=n}return t}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}shrink(){this.ids.length=this.values.length=this.length}}const En=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],Ae=3;class Ee{static from(t){if(!t||t.byteLength===void 0||t.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");const[e,n]=new Uint8Array(t,0,2);if(e!==251)throw new Error("Data does not appear to be in a Flatbush format.");if(n>>4!==Ae)throw new Error(`Got v${n>>4} data when expected v${Ae}.`);const[r]=new Uint16Array(t,2,1),[o]=new Uint32Array(t,4,1);return new Ee(o,r,En[n&15],void 0,t)}constructor(t,e=16,n=Float64Array,r=ArrayBuffer,o){if(t===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(t)||t<=0)throw new Error(`Unexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+e,2),65535);let i=t,h=i;this._levelBounds=[i*4];do i=Math.ceil(i/this.nodeSize),h+=i,this._levelBounds.push(h*4);while(i!==1);this.ArrayType=n||Float64Array,this.IndexArrayType=h<16384?Uint16Array:Uint32Array;const l=En.indexOf(this.ArrayType),a=h*4*this.ArrayType.BYTES_PER_ELEMENT;if(l<0)throw new Error(`Unexpected typed array class: ${n}.`);o&&o.byteLength!==void 0&&!o.buffer?(this.data=o,this._boxes=new this.ArrayType(this.data,8,h*4),this._indices=new this.IndexArrayType(this.data,8+a,h),this._pos=h*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1]):(this.data=new r(8+a+h*this.IndexArrayType.BYTES_PER_ELEMENT),this._boxes=new this.ArrayType(this.data,8,h*4),this._indices=new this.IndexArrayType(this.data,8+a,h),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(this.data,0,2).set([251,(Ae<<4)+l]),new Uint16Array(this.data,2,1)[0]=e,new Uint32Array(this.data,4,1)[0]=t),this._queue=new Ir}add(t,e,n,r){const o=this._pos>>2,i=this._boxes;return this._indices[o]=o,i[this._pos++]=t,i[this._pos++]=e,i[this._pos++]=n,i[this._pos++]=r,t<this.minX&&(this.minX=t),e<this.minY&&(this.minY=e),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),o}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);const t=this._boxes;if(this.numItems<=this.nodeSize){t[this._pos++]=this.minX,t[this._pos++]=this.minY,t[this._pos++]=this.maxX,t[this._pos++]=this.maxY;return}const e=this.maxX-this.minX||1,n=this.maxY-this.minY||1,r=new Uint32Array(this.numItems),o=(1<<16)-1;for(let i=0,h=0;i<this.numItems;i++){const l=t[h++],a=t[h++],c=t[h++],u=t[h++],f=Math.floor(o*((l+c)/2-this.minX)/e),p=Math.floor(o*((a+u)/2-this.minY)/n);r[i]=_r(f,p)}Se(r,t,this._indices,0,this.numItems-1,this.nodeSize);for(let i=0,h=0;i<this._levelBounds.length-1;i++){const l=this._levelBounds[i];for(;h<l;){const a=h;let c=t[h++],u=t[h++],f=t[h++],p=t[h++];for(let g=1;g<this.nodeSize&&h<l;g++)c=Math.min(c,t[h++]),u=Math.min(u,t[h++]),f=Math.max(f,t[h++]),p=Math.max(p,t[h++]);this._indices[this._pos>>2]=a,t[this._pos++]=c,t[this._pos++]=u,t[this._pos++]=f,t[this._pos++]=p}}}search(t,e,n,r,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let i=this._boxes.length-4;const h=[],l=[];for(;i!==void 0;){const a=Math.min(i+this.nodeSize*4,kn(i,this._levelBounds));for(let c=i;c<a;c+=4){if(n<this._boxes[c]||r<this._boxes[c+1]||t>this._boxes[c+2]||e>this._boxes[c+3])continue;const u=this._indices[c>>2]|0;i>=this.numItems*4?h.push(u):(o===void 0||o(u))&&l.push(u)}i=h.pop()}return l}neighbors(t,e,n=1/0,r=1/0,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let i=this._boxes.length-4;const h=this._queue,l=[],a=r*r;for(;i!==void 0;){const c=Math.min(i+this.nodeSize*4,kn(i,this._levelBounds));for(let u=i;u<c;u+=4){const f=this._indices[u>>2]|0,p=Sn(t,this._boxes[u],this._boxes[u+2]),g=Sn(e,this._boxes[u+1],this._boxes[u+3]),w=p*p+g*g;i>=this.numItems*4?h.push(f<<1,w):(o===void 0||o(f))&&h.push((f<<1)+1,w)}for(;h.length&&h.peek()&1;)if(h.peekValue()>a||(l.push(h.pop()>>1),l.length===n))return h.clear(),l;i=h.pop()>>1}return h.clear(),l}}function Sn(s,t,e){return s<t?t-s:s<=e?0:s-e}function kn(s,t){let e=0,n=t.length-1;for(;e<n;){const r=e+n>>1;t[r]>s?n=r:e=r+1}return t[e]}function Se(s,t,e,n,r,o){if(Math.floor(n/o)>=Math.floor(r/o))return;const i=s[n+r>>1];let h=n-1,l=r+1;for(;;){do h++;while(s[h]<i);do l--;while(s[l]>i);if(h>=l)break;$r(s,t,e,h,l)}Se(s,t,e,n,l,o),Se(s,t,e,l+1,r,o)}function $r(s,t,e,n,r){const o=s[n];s[n]=s[r],s[r]=o;const i=4*n,h=4*r,l=t[i],a=t[i+1],c=t[i+2],u=t[i+3];t[i]=t[h],t[i+1]=t[h+1],t[i+2]=t[h+2],t[i+3]=t[h+3],t[h]=l,t[h+1]=a,t[h+2]=c,t[h+3]=u;const f=e[n];e[n]=e[r],e[r]=f}function _r(s,t){let e=s^t,n=65535^e,r=65535^(s|t),o=s&(t^65535),i=e|n>>1,h=e>>1^e,l=r>>1^n&o>>1^r,a=e&r>>1^o>>1^o;e=i,n=h,r=l,o=a,i=e&e>>2^n&n>>2,h=e&n>>2^n&(e^n)>>2,l^=e&r>>2^n&o>>2,a^=n&r>>2^(e^n)&o>>2,e=i,n=h,r=l,o=a,i=e&e>>4^n&n>>4,h=e&n>>4^n&(e^n)>>4,l^=e&r>>4^n&o>>4,a^=n&r>>4^(e^n)&o>>4,e=i,n=h,r=l,o=a,l^=e&r>>8^n&o>>8,a^=n&r>>8^(e^n)&o>>8,e=l^l>>1,n=a^a>>1;let c=s^t,u=n|65535^(c|e);return c=(c|c<<8)&16711935,c=(c|c<<4)&252645135,c=(c|c<<2)&858993459,c=(c|c<<1)&1431655765,u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,(u<<1|c)>>>0}function Cn(s,t=1e-7){if(s.length===0)return[];if(s.length===1)return[s];const e=new Ee(s.length);s.forEach(o=>{const[i,h]=o.firstPoint;e.add(i-t,h-t,i+t,h+t)}),e.finish();const n=[],r=new Set;return s.forEach((o,i)=>{if(r.has(i))return;const h=[o];let l=i;r.add(i);let a=s.length;for(;;){if(a--<0)throw new Error("Infinite loop detected");const c=h[h.length-1].lastPoint,[u,f]=c,p=e.search(u-t,f-t,u+t,f+t),g=d=>Math.abs((l-d)%s.length),w=p.filter(d=>!r.has(d)).map(d=>[s[d],d,g(d)]).sort(([,,d],[,,M])=>g(d)-g(M));if(w.length===0){n.push(h);break}const[P,m]=w[0];h.push(P),r.add(m),l=m}}),n}class Q extends At{constructor(t,e=[],{ignoreChecks:n=!1}={}){super(),n||Lr(t,e),this.contour=t,this.holes=e}get boundingBox(){return this.contour.boundingBox}get isFull(){return this.holes.length===0}get allLoops(){return[this.contour,...this.holes]}clone(){return new Q(this.contour.clone(),this.holes.map(t=>t.clone()))}transform(t){return new Q(this.contour.transform(t),this.holes.map(e=>e.transform(t)))}contains(t){return this.contour.contains(t)&&!this.holes.some(e=>e.contains(t))}intersects(t){return this.allLoops.some(e=>t.allLoops.some(n=>e.intersects(n)))}overlappingStrands(t){const e=t instanceof Q?t.allLoops:[t],n=this.allLoops.flatMap(r=>e.flatMap(o=>r.overlappingSegments(o)));return Cn(n).map(r=>new Pt(r))}}function Lr(s,t=[]){if(!s)throw new Error("Figure must have a contour");for(const[e,n]of be([s,...t]))if(e.intersects(n))throw new Error("Loops in a figure must not intersect");if(t.some(e=>!s.contains(e.firstPoint)&&!s.onStroke(e.firstPoint)))throw new Error("Holes must be inside the contour");for(const[e,n]of be(t))if(e.contains(n.firstPoint))throw console.error(An(e),An(n)),new Error("Holes must not be inside other holes")}const Br=s=>{const t=s.map((r,o)=>s.slice(o+1).map((i,h)=>[h+o+1,i]).filter(([,i])=>r.boundingBox.overlaps(i.boundingBox)).map(([i])=>i)),e=[],n=Array(t.length);return t.forEach((r,o)=>{let i=n[o];i||(i=[],e.push(i)),i.push(s[o]),r.length&&r.forEach(h=>{n[h]=i})}),e},Tn=s=>s.map((t,e)=>{const n=t.segments[0].midPoint,r=s.filter((o,i)=>e===i?!1:o.contains(n));return{loop:t,isIn:r}}),jr=(s,t)=>s.flatMap(({loop:e})=>ke(t.filter(({loop:n,isIn:r})=>n===e||r.indexOf(e)!==-1))),qr=(s,t)=>{const e=t.filter(({isIn:r})=>r.length<=1),n=ke(Tn(s.map(({loop:r})=>r)));return[e,...n]},ke=s=>{if(!s.length)return[];const t=s.filter(({isIn:n})=>!n.length),e=s.filter(({isIn:n})=>n.length>1);return t.length===1&&e.length===0?[s]:t.length>1?jr(t,s):qr(e,s)};function Ut(s){return Br(s).map(Tn).flatMap(ke).map(t=>{if(t.length===1)return new Q(t[0].loop);t.sort((r,o)=>r.isIn.length-o.isIn.length);const[e,...n]=t.map(({loop:r})=>r);return new Q(e,n)})}function Or(s,t){const e=[];for(const n of s)for(const r of t)e.push([n,r]);return e}function*Ce(s,t,e){const n=i=>t.some(h=>y(h,i.lastPoint)),r=i=>e.some(h=>i.isSame(h));let o=[];for(const i of s)n(i)?(o.push(i),yield new Pt(o,{ignoreChecks:!0}),o=[]):r(i)?(o.length&&(yield new Pt(o,{ignoreChecks:!0}),o=[]),yield new Pt([i],{ignoreChecks:!0})):o.push(i);o.length&&(yield new Pt(o,{ignoreChecks:!0}))}const Rn=(s,t)=>{const e=s.findIndex(r=>y(t,r.firstPoint)),n=s.slice(0,e);return s.slice(e).concat(n)},Fn=(s,t)=>{let e=s;const n=i=>y(i.firstPoint,t.firstPoint)&&y(i.lastPoint,t.lastPoint);let r=s.findIndex(n);if(r===-1){const i=s.map(h=>h.reverse());if(i.reverse(),r=i.findIndex(n),r===-1)throw console.error(i.map(h=>h.repr),t.repr),new Error("Failed to rotate to segment start");e=i}const o=e.slice(0,r);return e.slice(r).concat(o)};function Nr(s,t,e){return s.filter(n=>{const r=t.filter(i=>y(i.firstPoint,n)||y(i.lastPoint,n));if(r.length%2)throw new Error("Bug in the intersection algo on non crossing point");const o=r.map(i=>e.contains(i.midPoint));return!(o.every(i=>i)||!o.some(i=>i))})}function Vr(s,t,e){let n=[];const r=[],o=new Array(s.segments.length).fill(0).map(()=>[]),i=new Array(t.segments.length).fill(0).map(()=>[]);if(s.segments.forEach((f,p)=>{t.segments.forEach((g,w)=>{const{intersections:P,overlaps:m}=zt(f,g,e);n.push(...P),o[p].push(...P),i[w].push(...P),r.push(...m);const d=m.flatMap(M=>[M.firstPoint,M.lastPoint]);n.push(...d),o[p].push(...d),i[w].push(...d)})}),n=mt(n,e),!n.length||n.length===1)return null;const h=([f,p])=>p.length?f.splitAt(p):[f];let l=at([s.segments,o]).flatMap(h),a=at([t.segments,i]).flatMap(h);if(n=Nr(n,l,t),!n.length&&!r.length)return null;if(r.length){const f=r[0];l=Fn(l,f),a=Fn(a,f)}else{const f=n[0];l=Rn(l,f),a=Rn(a,f)}let c=Array.from(Ce(l,n,r)),u=Array.from(Ce(a,n,r));return(!y(u[0].lastPoint,c[0].lastPoint)||r.length>0&&u[0].segmentsCount!==1)&&(u=u.map(f=>f.reverse()).reverse(),y(u[0].lastPoint,c[0].lastPoint)||(c=c.map(f=>f.reverse()).reverse())),at([c,u]).map(([f,p])=>f.segmentsCount===1&&r.some(g=>f.segments[0].isSame(g))?[f,"same"]:[f,p])}function In(s){let t=s[0];for(const e of s.slice(1))t=t.extend(e);if(!y(t.firstPoint,t.lastPoint))throw console.error(H(t.firstPoint),H(t.lastPoint)),new Error("Bug in the intersection algo on non closing strand");return new it(t.segments)}function zr(s,t){const e=at([t.slice(0,-1),t.slice(1)]).map(([r,o])=>In(s.slice(r,o)));let n=s.slice(t[t.length-1]);return t[0]!==0&&(n=n.concat(s.slice(0,t[0]))),e.push(In(n)),e}function Ur(s){if(!s.length)return[];const t=s.map(r=>r.firstPoint);let e=s.map(r=>r.lastPoint);e=e.slice(-1).concat(e.slice(0,-1));const n=at([t,e]).flatMap(([r,o],i)=>y(r,o)?[]:i);try{return zr(s,n)}catch{return Cn(s.flatMap(r=>r.segments)).filter(r=>r.length>1).filter(r=>y(r[0].firstPoint,r.at(-1).lastPoint)).map(r=>new it(r))}}const $n=(s,t)=>{if(s.length===0)return[t];const e=s.at(-1);return y(e.lastPoint,t.firstPoint)?s.slice(0,-1).concat([e.extend(t)]):y(e.lastPoint,t.lastPoint)?s.slice(0,-1).concat([e.extend(t.reverse())]):s.concat([t])},Yr=(s,t)=>s.length===0?[t]:y(s[0].firstPoint,t.lastPoint)?[t.extend(s[0])].concat(s.slice(1)):[t].concat(s);function Te(s,t,{firstInside:e,secondInside:n}){const r=Vr(s,t);if(!r){const l=s.segments[0].midPoint,a=t.contains(l),c=t.segments[0].midPoint,u=s.contains(c);return{identical:!1,firstCurveInSecond:a,secondCurveInFirst:u}}if(r.every(([,l])=>l==="same"))return{identical:!0};let o=null,i=null;const h=r.flatMap(([l,a])=>{let c=[],u=0;if(a==="same")return i===1?(i=1,l):i===2||i===0?(i=null,[]):i===null?(o?o=o.extend(l):o=l,[]):(console.error("weird situation"),[]);const f=l.segments[0].midPoint,p=t.contains(f);(e==="keep"&&p||e==="remove"&&!p)&&(u+=1,c=$n(c,l));const g=a.segments[0].midPoint,w=s.contains(g);if(n==="keep"&&w||n==="remove"&&!w){const P=a;u+=1,u===2&&c.length?(c=$n(c,P),o=null):c=[P]}return i===null&&u===1&&o&&(c=Yr(c,o)),u===1&&(i=u,o=null),c.length?c:(o=null,[])});return Ur(h)}const Dr=(s,t)=>{const e=Te(s,t,{firstInside:"remove",secondInside:"remove"});return Array.isArray(e)?e:e.identical?[s]:e.firstCurveInSecond?[t]:e.secondCurveInFirst?[s]:[s,t]},re=(s,t)=>{const e=Te(s,t,{firstInside:"remove",secondInside:"keep"});return Array.isArray(e)?e:e.identical?[]:e.firstCurveInSecond?[]:e.secondCurveInFirst?[s,t]:[s]},Re=(s,t)=>{const e=Te(s,t,{firstInside:"keep",secondInside:"keep"});return Array.isArray(e)?e:e.identical?[s]:e.firstCurveInSecond?[s]:e.secondCurveInFirst?[t]:[]};function Xr(s){const t=new Map,e=[];return s.forEach((n,r)=>{let o;t.has(r)?o=t.get(r):(o={current:[n],fusedWith:new Set([r])},e.push(o)),s.slice(r+1).forEach((i,h)=>{const l=o.current,a=r+h+1;if(o.fusedWith.has(a))return;let c=[i],u=!1;if(t.has(a)&&(c=t.get(a).current,u=!0),!l.some(p=>c.some(g=>p.intersects(g))))return;let f;l.length>1||c.length>1?f=Yt(l,c):f=_n(l[0],c[0]),o.fusedWith.add(a),o.current=f,u||t.set(a,o)})}),e.flatMap(({current:n})=>n)}function _n(s,t){const e=Dr(s.contour,t.contour),n=t.holes.flatMap(i=>re(i,s.contour)),r=s.holes.flatMap(i=>re(i,t.contour)),o=Or(s.holes,t.holes).flatMap(([i,h])=>Re(i,h));return Ut([...e,...n,...r,...o])}function oe(s,t){if(s.isFull&&t.isFull)return Ut(re(s.contour,t.contour));if(s.isFull){const n=re(s.contour,t.contour),r=t.holes.flatMap(o=>Re(o,s.contour));return Ut([...n,...r])}else if(t.isFull&&!s.contour.intersects(t.contour))if(s.contour.contains(t.contour.firstPoint)){const n=Yt(s.holes.map(r=>new Q(r)),[t]);return Ut([s.contour,...n.flatMap(r=>r.allLoops)])}else return[s];let e=oe(new Q(s.contour),t);return s.holes.forEach(n=>{e=e.flatMap(r=>oe(r,new Q(n)))}),e}function Hr(s,t){const e=Re(s.contour,t.contour);if(!e.length)return[];let n=Ut(e);return n=$t(n,s.holes.map(r=>new Q(r))),$t(n,t.holes.map(r=>new Q(r)))}function Yt(s,t){if(!s.length)return t;if(!t.length)return s;if(s.length===1&&t.length>1||t.length===1&&s.length>1)return Xr([...s,...t]);if(s.length>1&&t.length>1){let e=Yt([s[0]],t);return s.slice(1).forEach(n=>{e=Yt([n],e)}),e}return s.length===1&&t.length===1?_n(s[0],t[0]):[]}function $t(s,t){if(!s.length)return[];if(!t.length)return s;if(s.length===1&&t.length===1)return oe(s[0],t[0]);if(s.length>1)return s.flatMap(n=>$t([n],t));let e=oe(s[0],t[0]);return t.slice(1).forEach(n=>{e=$t(e,[n])}),e}function Fe(s,t){return!s.length||!t.length?[]:s.length===1&&t.length===1?Hr(s[0],t[0]):s.length>1?s.flatMap(e=>Fe([e],t)):t.flatMap(e=>Fe(s,[e]))}class ht extends At{constructor(t=[],{ignoreChecks:e=!1}={}){super(),this._boundingBox=null,e||Wr(t),this.figures=t}get isEmpty(){return this.figures.length===0}get boundingBox(){if(this.isEmpty)return new qt;if(this._boundingBox===null){let t=this.figures[0].boundingBox;for(const e of this.figures.slice(1))t=t.merge(e.boundingBox);this._boundingBox=t}return this._boundingBox}clone(){return new ht(this.figures.map(t=>t.clone()))}transform(t){return new ht(this.figures.map(e=>e.transform(t)))}contains(t){return this.figures.some(e=>e.contains(t))}intersects(t){return this.figures.some(e=>t.figures.some(n=>e.intersects(n)))}overlappingStrands(t){return this.figures.flatMap(e=>t instanceof ht?t.figures.flatMap(n=>e.overlappingStrands(n)):e.overlappingStrands(t))}fuse(t){return new ht(Yt(this.figures,t.figures))}cut(t){return new ht($t(this.figures,t.figures))}intersect(t){return new ht(Fe(this.figures,t.figures))}}function Wr(s){for(const[t,e]of be(s))if(t.intersects(e))throw new Error("Diagram figures must not intersect")}let Ie=class{constructor(t,e){this.firstPoint=t,this.lastPoint=e}};function Ln(s,t){if(s instanceof B)return Jr(s,t);if(s instanceof T)return Zr(s,t);throw new Error("Not implemented")}function Jr(s,t){const{firstPoint:e,lastPoint:n}=s,r=s.normalVector;return new B(V(e,W(r,t)),V(n,W(r,t)))}function Zr(s,t){const e=V(s.firstPoint,W(G(s.tangentAtFirstPoint),t)),n=V(s.lastPoint,W(G(s.tangentAtLastPoint),t)),r=t*(s.clockwise?1:-1);return s.radius+r<s.precision?new Ie(e,n):new T(e,n,s.center,s.clockwise)}function Bn(s,t,e){const n=dt(s.tangentAtLastPoint,t.tangentAtFirstPoint);if(Math.abs(n)<1e-10)return null;const r=n>0?1:-1,o=Math.abs(e)*r,i=Ln(s,o),h=Ln(t,o);if(i instanceof Ie||h instanceof Ie)return null;let l;try{l=xr(i,h,1e-9).at(-1)}catch{return null}if(!l)return null;const a=l,c=(p,g)=>{const w=g.tangentAt(a),P=Ot(w),m=V(a,W(P,o));return p.splitAt(m)},[u]=c(s,i),[,f]=c(t,h);return{first:u,second:f,center:a}}function jn(s,t,e){const n=Bn(s,t,e);if(!n)return console.warn("Cannot fillet between segments",s.repr,t.repr),[s,t];const{first:r,second:o}=n;return[r,Ye(r.lastPoint,o.firstPoint,r.tangentAtLastPoint),o]}function qn(s,t,e){const n=Bn(s,t,e);if(!n)return console.warn("Cannot chamfer between segments",s.repr,t.repr),[s,t];const{first:r,second:o}=n;return[r,new B(r.lastPoint,o.firstPoint),o]}const Gr=s=>{let t;s?typeof s=="number"||Array.isArray(s)&&s.length===2?t={endTangent:s}:t={endTangent:0,...s}:t={endTangent:[1,0]};const{endTangent:e,startFactor:n=1,endFactor:r=1,startTangent:o}=t;let i;typeof e=="number"?i=gt(1,e*xt):i=e;let h;return typeof o=="number"?h=gt(1,o*xt):h=o,{endTangent:i,startFactor:n,endFactor:r,startTangent:h}};function On(s,{ignoreChecks:t=!1}={}){return new ht([new Q(new it([...s],{ignoreChecks:t}))])}let Kr=class{constructor(t=[0,0]){this.pointer=t,this.firstPoint=t,this.pendingSegments=[],this._nextCorner=null}movePointerTo(t){if(this.pendingSegments.length)throw new Error("You can only move the pointer if there is no segment defined");return this.pointer=t,this.firstPoint=t,this}saveSegment(t){if(y(t.firstPoint,t.lastPoint))throw new Error(`Segment has no length, ${t.repr}`);if(!this._nextCorner)return this.pendingSegments.push(t),this;const e=this.pendingSegments.pop();if(!e)throw new Error("bug in the custom corner algorithm");const n=this._nextCorner.mode==="chamfer"?qn:jn;return this.pendingSegments.push(...n(e,t,this._nextCorner.radius)),this._nextCorner=null,this}lineTo(t){const e=new B(this.pointer,t);return this.pointer=t,this.saveSegment(e)}line(t,e){return this.lineTo([this.pointer[0]+t,this.pointer[1]+e])}vLine(t){return this.line(0,t)}hLine(t){return this.line(t,0)}vLineTo(t){return this.lineTo([this.pointer[0],t])}hLineTo(t){return this.lineTo([t,this.pointer[1]])}polarLineTo([t,e]){const n=e*xt,r=gt(t,n);return this.lineTo(r)}polarLine(t,e){const n=e*xt,[r,o]=gt(t,n);return this.line(r,o)}tangentLine(t){const e=this.pendingSegments.at(-1);if(!e)throw new Error("You need a previous segment to sketch a tangent line");const[n,r]=e.tangentAtLastPoint;return this.line(n*t,r*t)}threePointsArcTo(t,e){return this.saveSegment(ls(this.pointer,e,t)),this.pointer=t,this}threePointsArc(t,e,n,r){const[o,i]=this.pointer;return this.threePointsArcTo([o+t,i+e],[o+n,i+r])}sagittaArcTo(t,e){if(!e)return this.lineTo(t);const n=new B(this.pointer,t),r=G(n.tangentAtFirstPoint),o=V(n.midPoint,W(r,e));return this.threePointsArcTo(t,o)}sagittaArc(t,e,n){return this.sagittaArcTo([t+this.pointer[0],e+this.pointer[1]],n)}vSagittaArc(t,e){return this.sagittaArc(0,t,e)}hSagittaArc(t,e){return this.sagittaArc(t,0,e)}bulgeArcTo(t,e){if(!e)return this.lineTo(t);const n=z(this.pointer,t)/2,r=-e*n;return this.sagittaArcTo(t,r)}bulgeArc(t,e,n){return this.bulgeArcTo([t+this.pointer[0],e+this.pointer[1]],n)}vBulgeArc(t,e){return this.bulgeArc(0,t,e)}hBulgeArc(t,e){return this.bulgeArc(t,0,e)}tangentArcTo(t,e){const n=this.pendingSegments.at(-1);if(!n)throw new Error("You need a previous curve to sketch a tangent arc");return this.saveSegment(Ye(this.pointer,t,e??n.tangentAtLastPoint)),this.pointer=t,this}tangentArc(t,e,n){const[r,o]=this.pointer;return this.tangentArcTo([t+r,e+o],n)}ellipseTo(t,e,n,r,o,i){return this.saveSegment(tr(this.pointer,t,e,n,r,o,i)),this.pointer=t,this}ellipse(t,e,n,r,o,i,h){return this.ellipseTo([t+this.pointer[0],e+this.pointer[1]],n,r,o,i,h)}halfEllipseTo(t,e){const[n,r]=ze(q(t,this.pointer));return this.ellipseTo(t,n/2,Math.abs(e),r*ge,!0,e>0)}halfEllipse(t,e,n){return this.halfEllipseTo([t+this.pointer[0],e+this.pointer[1]],n)}cubicBezierCurveTo(t,e,n){return this.saveSegment(new K(this.pointer,t,e,n)),this.pointer=t,this}quadraticBezierCurveTo(t,e){return this.saveSegment(new N(this.pointer,t,e)),this.pointer=t,this}smoothCurveTo(t,e){const{endTangent:n,startTangent:r,startFactor:o,endFactor:i}=Gr(e),h=this.pendingSegments.length?this.pendingSegments[this.pendingSegments.length-1]:null,l=z(this.pointer,t)/3;let a;r?a=r:h?a=h.tangentAtLastPoint:a=[1,0],a=J(a);const c=[this.pointer[0]+a[0]*o*l,this.pointer[1]+a[1]*o*l];let u=n;u=J(u);const f=[t[0]-u[0]*i*l,t[1]-u[1]*i*l];return this.cubicBezierCurveTo(t,c,f)}smoothCurve(t,e,n){return this.smoothCurveTo([t+this.pointer[0],e+this.pointer[1]],n)}customCorner(t,e="fillet"){if(!this.pendingSegments.length)throw new Error("You need a segment defined to fillet the angle");return t?(this._nextCorner={mode:e,radius:t},this):this}_customCornerLastWithFirst(t,e="fillet"){if(!t)return;const n=this.pendingSegments.pop(),r=this.pendingSegments.shift();if(!n||!r)throw new Error("Not enough curves to close and fillet");const o=e==="chamfer"?qn:jn;this.pendingSegments.push(...o(n,r,t))}close(t=!1){if(!this.pendingSegments.length)throw new Error("No segments to close");const e=this.pendingSegments[0],n=this.pendingSegments.at(-1);return y(e.firstPoint,n.lastPoint)||this.lineTo(e.firstPoint),this._nextCorner!==null&&(this._customCornerLastWithFirst(this._nextCorner.radius,this._nextCorner.mode),this._nextCorner=null),On(this.pendingSegments,{ignoreChecks:t})}closeWithMirror(t=!1){if(!this.pendingSegments.length)throw new Error("No segments to close");const e=this.pendingSegments[0],n=this.pendingSegments.at(-1),r=q(n.lastPoint,e.firstPoint),o=new tt().mirrorLine(r,e.firstPoint),i=this.pendingSegments.map(h=>h.transform(o).reverse());return i.reverse(),On([...this.pendingSegments,...i],{ignoreChecks:t})}asStrand(){return new Pt([...this.pendingSegments])}get isClosed(){var t;return y(this.pointer,(t=this.pendingSegments[0])==null?void 0:t.firstPoint)}};function Nn(s=[0,0]){return new Kr(s)}function Vn(s){if(s instanceof Q)return[s];if(s instanceof it)return[new Q(s)];if(s instanceof ht)return s.figures;throw new Error("Unknown shape")}function zn(s,t,e=1e-9){let n=[];const r=[],o=new Array(t.segments.length).fill(0).map(()=>[]);t.segments.forEach((h,l)=>{s.segments.forEach(a=>{const{intersections:c,overlaps:u}=zt(h,a,e);n.push(...c),o[l].push(...c),r.push(...u);const f=u.flatMap(p=>[p.firstPoint,p.lastPoint]);n.push(...f),o[l].push(...f)})}),n=mt(n,e);const i=at([t.segments,o]).flatMap(([h,l])=>l.length?h.splitAt(l):[h]);return Array.from(Ce(i,n,r))}function Un(s,t,e=!1){return zn(t,s).filter(n=>{const r=n.segments[0].midPoint;return t.onStroke(r)?!e:!t.contains(r)})}function Qr(s,t,e=!1){return zn(t,s).filter(n=>{const r=n.segments[0].midPoint;return t.onStroke(r)?!e:t.contains(r)})}function Yn(s,t,e=!1){const n=Un(s,t.contour,e),r=t.holes.flatMap(o=>Qr(s,o,e));return[...n,...r]}function to(s,t){return new ht($t(Vn(s),Vn(t)))}function $e(s,t,e=!0){if(t instanceof it)return Un(s,t,e);if(t instanceof Q)return Yn(s,t,e);let n=[new Pt([...s.segments])];return t.figures.forEach(r=>{n=n.flatMap(o=>Yn(o,r,e))}),n}function Mt([s,t]){return`${s} ${t}`}function _e(s){if(s instanceof B)return`L ${Mt(s.lastPoint)}`;if(s instanceof T)return`A ${s.radius} ${s.radius} 0 ${s.angularLength>Math.PI?"1":"0"} ${s.clockwise?"0":"1"} ${Mt(s.lastPoint)}`;if(s instanceof Z)return`A ${s.majorRadius} ${s.minorRadius} ${s.tiltAngle*ge} ${s.deltaAngle>Math.PI?"1":"0"} ${s.clockwise?"0":"1"} ${Mt(s.lastPoint)}`;if(s instanceof N)return`Q ${[Mt(s.controlPoint),Mt(s.lastPoint)].join(" ")}`;if(s instanceof K)return`C ${[Mt(s.firstControlPoint),Mt(s.lastControlPoint),Mt(s.lastPoint)].join(" ")}`;throw new Error("Unknown segment type")}function Dn(s){const t=`M ${s.firstPoint.join(" ")}`,e=s.segments.map(_e).join(" ");return`${t} ${e} Z`}function Xn(s){return`<path d="${s.allLoops.map(Dn).join(" ")}" />`}function eo(s){return`<g>
11
- ${s.figures.map(Xn).join(`
10
+ `}get info(){return this.repr}get firstPoint(){return this.segments[0].firstPoint}get lastPoint(){return this.segments[this.segments.length-1].lastPoint}get segmentsCount(){return this.segments.length}onStroke(t){return this.segments.some(e=>e.isOnSegment(t))}intersects(t){return this.boundingBox.overlaps(t.boundingBox)?this.segments.some(e=>t.segments.some(n=>ne(e,n).count>0)):!1}overlappingSegments(t){return this.segments.flatMap(e=>t.segments.flatMap(n=>e.boundingBox.overlaps(n.boundingBox)?ne(e,n).overlaps:[]))}get boundingBox(){if(this._boundingBox===null){let t=this.segments[0].boundingBox;this.segments.slice(1).forEach(e=>{t=t.merge(e.boundingBox)}),this._boundingBox=t}return this._boundingBox}[Symbol.for("nodejs.util.inspect.custom")](){return this.repr}}function Fr(i,t="Stroke"){Kn(i.length).forEach(([e,n])=>{if(e===n)return;const s=i[e],r=i[n],o=ne(s,r),a=Math.max(s.precision,r.precision);if(o.count!==0){if(o.count===1&&!o.overlaps.length){const h=e-n,l=o.intersections[0];if(h===1&&k(s.firstPoint,l,a)||h===-1&&k(s.lastPoint,l,a)||h===i.length-1&&k(s.lastPoint,l,a)&&k(r.firstPoint,l,a)||-h===i.length-1&&k(s.firstPoint,l,a)&&k(r.lastPoint,l,a))return}if(!(o.count===2&&i.length===2&&(k(s.firstPoint,o.intersections[0],a)&&k(s.lastPoint,o.intersections[1],a)||k(s.firstPoint,o.intersections[1],a)&&k(s.lastPoint,o.intersections[0],a))))throw new Error(`${t} segments must not intersect, but segments ${s.info} and ${r.info} do at ${JSON.stringify(o.intersections)}`)}})}function ei(i,t="Stroke"){if(i.length===0)throw new Error(`${t} must have at least one segment`);xt([i.slice(0,-1),i.slice(1)]).forEach(([e,n])=>{if(!k(e.lastPoint,n.firstPoint))throw new Error(`${t} segments must be connected, but ${e.info} and ${n.info} are not`)}),Fr(i,t)}function ni(i,t){return!!(i instanceof N&&t instanceof N&&qe(i.V,t.V)||i instanceof z&&t instanceof z&&k(i.center,t.center)&&i.radius-t.radius<i.precision)}function ii(i,t){if(i instanceof N&&t instanceof N)return new N(i.firstPoint,t.lastPoint);if(i instanceof z&&t instanceof z)return new z(i.firstPoint,t.lastPoint,i.center,i.clockwise);throw new Error("Not implemented")}function si(i){let t=!1;const e=[];for(const n of i.segments){if(e.length===0){e.push(n);continue}const s=e[e.length-1];ni(s,n)?(t=!0,e.pop(),e.push(ii(s,n))):e.push(n)}if(k(i.firstPoint,i.lastPoint)&&ni(e[0],e[e.length-1])){t=!0;const n=e.pop();e[0]=ii(n,e[0])}return t?e:null}class mt extends ti{constructor(){super(...arguments),ut(this,"strokeType","STRAND")}reverse(){const t=this.segments.map(e=>e.reverse());return t.reverse(),new mt(t,{ignoreChecks:!0})}clone(){return new mt(this.segments.map(t=>t.clone()),{ignoreChecks:!0})}extend(t){if(!k(this.lastPoint,t.firstPoint))throw console.error(this.repr,t.repr),new Error("Cannot extend strand: connection point is not the same");return new mt([...this.segments,...t.segments])}simplify(){const t=si(this);return t?new mt(t,{ignoreChecks:!0}):this}transform(t){return new mt(this.segments.map(e=>e.transform(t)),{ignoreChecks:!0})}}const _r=(i,t)=>{const e=le(t,{V:[1,0],firstPoint:i,precision:t.precision});if(e==="parallel")return 0;const{intersectionParam1:n,intersectionParam2:s}=e;if(!t.isValidParameter(n)||s<=-t.precision)return 0;if(Math.abs(n)<t.precision||Math.abs(n-1)<t.precision){const[,r]=t.midPoint;return i[1]-r<0?1:0}return 1};class Ze{constructor(t){ut(this,"_count",0),ut(this,"segment"),this.segment=t}update(t,e=!1){!e&&!this.segment.isOnSegment(t)||(k(t,this.segment.firstPoint)?this._count+=this.segment.tangentAtFirstPoint[1]>0?1:0:k(t,this.segment.lastPoint)?this._count+=this.segment.tangentAtLastPoint[1]>0?0:1:this._count+=1)}get count(){return this._count}}const Lr=(i,t)=>{const e=t.precision,n=Math.abs(i[1]-t.center[1]);if(n>t.radius+e)return 0;const s=_t(i,t.center),r=t.radius*t.radius,o=e*e;if(Math.abs(s-r)<o&&t.isOnSegment(i))return 0;const a=s-r>o;if(a&&t.center[0]<i[0])return 0;const h=Math.sqrt(t.radius*t.radius-n*n),l=new Ze(t);return l.update([t.center[0]+h,i[1]]),a&&l.update([t.center[0]-h,i[1]]),l.count},Br=(i,t)=>{const e=t.boundingBox.xMax+t.boundingBox.width/2,n=new N(i,[e,i[1]]),s=new Ze(t);return We(n,t).forEach(r=>{s.update(r,!0)}),s.count},Vr=(i,t)=>{const e=new Ze(t);return t.paramsAtY(i[1]).map(n=>{try{return t.paramPoint(n)}catch{return null}}).filter(n=>n!==null).filter(n=>{const[s]=n;return s>=i[0]}).forEach(n=>{e.update(n,!0)}),e.count};function jr(i,t){if(t instanceof N)return _r(i,t);if(t instanceof z)return Lr(i,t);if(t instanceof rt)return Br(i,t);if(t instanceof ht||t instanceof ot)return Vr(i,t);throw new Error("Not implemented")}class yt extends ti{constructor(t,{ignoreChecks:e=!1}={}){super(t,{ignoreChecks:!0}),ut(this,"strokeType","LOOP"),ut(this,"_clockwise",null),e||Nr(t)}get clockwise(){if(this._clockwise===null){const t=this.segments.flatMap(n=>n instanceof N?[n.firstPoint]:[n.firstPoint,n.paramPoint(.5)]),e=t.map((n,s)=>{const r=t[(s+1)%t.length];return(r[0]-n[0])*(r[1]+n[1])}).reduce((n,s)=>n+s,0);this._clockwise=e>0}return this._clockwise}clone(){return new yt(this.segments.map(t=>t.clone()),{ignoreChecks:!0})}reverse(){const t=this.segments.map(e=>e.reverse());return t.reverse(),new yt(t,{ignoreChecks:!0})}transform(t){return new yt(this.segments.map(e=>e.transform(t)),{ignoreChecks:!0})}contains(t){return this.onStroke(t)||!this.boundingBox.contains(t)?!1:this.segments.reduce((e,n)=>e+jr(t,n),0)%2===1}simplify(){const t=si(this);return t?new yt(t,{ignoreChecks:!0}):this}}function Nr(i){if(ei(i,"Loop"),!k(i[0].firstPoint,i[i.length-1].lastPoint))throw new Error("Loop segment must be closed")}const qr=[N,z,rt,ot,ht];function ri(i){return qr.some(t=>i instanceof t)}function oi(i){if(i instanceof N)return{type:i.segmentType,firstPoint:i.firstPoint,lastPoint:i.lastPoint};if(i instanceof z)return{type:i.segmentType,firstPoint:i.firstPoint,lastPoint:i.lastPoint,center:i.center,clockwise:i.clockwise};if(i instanceof rt)return{type:i.segmentType,firstPoint:i.firstPoint,lastPoint:i.lastPoint,center:i.center,clockwise:i.clockwise,majorRadius:i.majorRadius,minorRadius:i.minorRadius,tiltAngle:i.tiltAngle};if(i instanceof ot)return{type:i.segmentType,firstPoint:i.firstPoint,lastPoint:i.lastPoint,controlPoint:i.controlPoint};if(i instanceof ht)return{type:i.segmentType,firstPoint:i.firstPoint,lastPoint:i.lastPoint,firstControlPoint:i.firstControlPoint,lastControlPoint:i.lastControlPoint};throw new Error("Unknown segment type")}function Je(i){return{type:"LOOP",segments:i.segments.map(oi)}}function ai(i){return{type:"FIGURE",contour:Je(i.contour),holes:i.holes.map(Je)}}function Or(i){return{type:"DIAGRAM",figures:i.figures.map(ai)}}function hi(i){if(i instanceof bt)return Or(i);if(i instanceof dt)return ai(i);if(i instanceof yt)return Je(i);if(ri(i))return oi(i);throw new Error("Unknown shape type")}class zr{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(t,e){let n=this.length++;for(;n>0;){const s=n-1>>1,r=this.values[s];if(e>=r)break;this.ids[n]=this.ids[s],this.values[n]=r,n=s}this.ids[n]=t,this.values[n]=e}pop(){if(this.length===0)return;const t=this.ids[0];if(this.length--,this.length>0){const e=this.ids[0]=this.ids[this.length],n=this.values[0]=this.values[this.length],s=this.length>>1;let r=0;for(;r<s;){let o=(r<<1)+1;const a=o+1;let h=this.ids[o],l=this.values[o];const c=this.values[a];if(a<this.length&&c<l&&(o=a,h=this.ids[a],l=c),l>=n)break;this.ids[r]=h,this.values[r]=l,r=o}this.ids[r]=e,this.values[r]=n}return t}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}shrink(){this.ids.length=this.values.length=this.length}}const li=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],Ke=3;class tn{static from(t,e=0){if(e%8!==0)throw new Error("byteOffset must be 8-byte aligned.");if(!t||t.byteLength===void 0||t.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");const[n,s]=new Uint8Array(t,e+0,2);if(n!==251)throw new Error("Data does not appear to be in a Flatbush format.");const r=s>>4;if(r!==Ke)throw new Error(`Got v${r} data when expected v${Ke}.`);const o=li[s&15];if(!o)throw new Error("Unrecognized array type.");const[a]=new Uint16Array(t,e+2,1),[h]=new Uint32Array(t,e+4,1);return new tn(h,a,o,void 0,t,e)}constructor(t,e=16,n=Float64Array,s=ArrayBuffer,r,o=0){if(t===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(t)||t<=0)throw new Error(`Unexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+e,2),65535),this.byteOffset=o;let a=t,h=a;this._levelBounds=[a*4];do a=Math.ceil(a/this.nodeSize),h+=a,this._levelBounds.push(h*4);while(a!==1);this.ArrayType=n,this.IndexArrayType=h<16384?Uint16Array:Uint32Array;const l=li.indexOf(this.ArrayType),c=h*4*this.ArrayType.BYTES_PER_ELEMENT;if(l<0)throw new Error(`Unexpected typed array class: ${n}.`);r&&r.byteLength!==void 0&&!r.buffer?(this.data=r,this._boxes=new this.ArrayType(this.data,o+8,h*4),this._indices=new this.IndexArrayType(this.data,o+8+c,h),this._pos=h*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1]):(this.data=new s(8+c+h*this.IndexArrayType.BYTES_PER_ELEMENT),this._boxes=new this.ArrayType(this.data,8,h*4),this._indices=new this.IndexArrayType(this.data,8+c,h),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(this.data,0,2).set([251,(Ke<<4)+l]),new Uint16Array(this.data,2,1)[0]=e,new Uint32Array(this.data,4,1)[0]=t),this._queue=new zr}add(t,e,n=t,s=e){const r=this._pos>>2,o=this._boxes;return this._indices[r]=r,o[this._pos++]=t,o[this._pos++]=e,o[this._pos++]=n,o[this._pos++]=s,t<this.minX&&(this.minX=t),e<this.minY&&(this.minY=e),n>this.maxX&&(this.maxX=n),s>this.maxY&&(this.maxY=s),r}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);const t=this._boxes;if(this.numItems<=this.nodeSize){t[this._pos++]=this.minX,t[this._pos++]=this.minY,t[this._pos++]=this.maxX,t[this._pos++]=this.maxY;return}const e=this.maxX-this.minX||1,n=this.maxY-this.minY||1,s=new Uint32Array(this.numItems),r=65535;for(let o=0,a=0;o<this.numItems;o++){const h=t[a++],l=t[a++],c=t[a++],u=t[a++],m=Math.floor(r*((h+c)/2-this.minX)/e),w=Math.floor(r*((l+u)/2-this.minY)/n);s[o]=Ur(m,w)}en(s,t,this._indices,0,this.numItems-1,this.nodeSize);for(let o=0,a=0;o<this._levelBounds.length-1;o++){const h=this._levelBounds[o];for(;a<h;){const l=a;let c=t[a++],u=t[a++],m=t[a++],w=t[a++];for(let g=1;g<this.nodeSize&&a<h;g++)c=Math.min(c,t[a++]),u=Math.min(u,t[a++]),m=Math.max(m,t[a++]),w=Math.max(w,t[a++]);this._indices[this._pos>>2]=l,t[this._pos++]=c,t[this._pos++]=u,t[this._pos++]=m,t[this._pos++]=w}}}search(t,e,n,s,r){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let o=this._boxes.length-4;const a=[],h=[];for(;o!==void 0;){const l=Math.min(o+this.nodeSize*4,ci(o,this._levelBounds));for(let c=o;c<l;c+=4){if(n<this._boxes[c]||s<this._boxes[c+1]||t>this._boxes[c+2]||e>this._boxes[c+3])continue;const u=this._indices[c>>2]|0;o>=this.numItems*4?a.push(u):(r===void 0||r(u))&&h.push(u)}o=a.pop()}return h}neighbors(t,e,n=1/0,s=1/0,r){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let o=this._boxes.length-4;const a=this._queue,h=[],l=s*s;t:for(;o!==void 0;){const c=Math.min(o+this.nodeSize*4,ci(o,this._levelBounds));for(let u=o;u<c;u+=4){const m=this._indices[u>>2]|0,w=ui(t,this._boxes[u],this._boxes[u+2]),g=ui(e,this._boxes[u+1],this._boxes[u+3]),p=w*w+g*g;p>l||(o>=this.numItems*4?a.push(m<<1,p):(r===void 0||r(m))&&a.push((m<<1)+1,p))}for(;a.length&&a.peek()&1;)if(a.peekValue()>l||(h.push(a.pop()>>1),h.length===n))break t;o=a.length?a.pop()>>1:void 0}return a.clear(),h}}function ui(i,t,e){return i<t?t-i:i<=e?0:i-e}function ci(i,t){let e=0,n=t.length-1;for(;e<n;){const s=e+n>>1;t[s]>i?n=s:e=s+1}return t[e]}function en(i,t,e,n,s,r){if(Math.floor(n/r)>=Math.floor(s/r))return;const o=i[n+s>>1];let a=n-1,h=s+1;for(;;){do a++;while(i[a]<o);do h--;while(i[h]>o);if(a>=h)break;Dr(i,t,e,a,h)}en(i,t,e,n,h,r),en(i,t,e,h+1,s,r)}function Dr(i,t,e,n,s){const r=i[n];i[n]=i[s],i[s]=r;const o=4*n,a=4*s,h=t[o],l=t[o+1],c=t[o+2],u=t[o+3];t[o]=t[a],t[o+1]=t[a+1],t[o+2]=t[a+2],t[o+3]=t[a+3],t[a]=h,t[a+1]=l,t[a+2]=c,t[a+3]=u;const m=e[n];e[n]=e[s],e[s]=m}function Ur(i,t){let e=i^t,n=65535^e,s=65535^(i|t),r=i&(t^65535),o=e|n>>1,a=e>>1^e,h=s>>1^n&r>>1^s,l=e&s>>1^r>>1^r;e=o,n=a,s=h,r=l,o=e&e>>2^n&n>>2,a=e&n>>2^n&(e^n)>>2,h^=e&s>>2^n&r>>2,l^=n&s>>2^(e^n)&r>>2,e=o,n=a,s=h,r=l,o=e&e>>4^n&n>>4,a=e&n>>4^n&(e^n)>>4,h^=e&s>>4^n&r>>4,l^=n&s>>4^(e^n)&r>>4,e=o,n=a,s=h,r=l,h^=e&s>>8^n&r>>8,l^=n&s>>8^(e^n)&r>>8,e=h^h>>1,n=l^l>>1;let c=i^t,u=n|65535^(c|e);return c=(c|c<<8)&16711935,c=(c|c<<4)&252645135,c=(c|c<<2)&858993459,c=(c|c<<1)&1431655765,u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,(u<<1|c)>>>0}function fi(i,t=1e-7){if(i.length===0)return[];if(i.length===1)return[i];const e=new tn(i.length);i.forEach(r=>{const[o,a]=r.firstPoint;e.add(o-t,a-t,o+t,a+t)}),e.finish();const n=[],s=new Set;return i.forEach((r,o)=>{if(s.has(o))return;const a=[r];let h=o;s.add(o);let l=i.length;for(;;){if(l--<0)throw new Error("Infinite loop detected");const c=a[a.length-1].lastPoint,[u,m]=c,w=e.search(u-t,m-t,u+t,m+t),g=M=>Math.abs((h-M)%i.length),p=w.filter(M=>!s.has(M)).map(M=>[i[M],M,g(M)]).sort(([,,M],[,,b])=>g(M)-g(b));if(p.length===0){n.push(a);break}const[P,f]=p[0];a.push(P),s.add(f),h=f}}),n}let dt=class _e extends Lt{constructor(t,e=[],{ignoreChecks:n=!1}={}){super(),ut(this,"contour"),ut(this,"holes"),n||Yr(t,e),this.contour=t,this.holes=e}get boundingBox(){return this.contour.boundingBox}get isFull(){return this.holes.length===0}get allLoops(){return[this.contour,...this.holes]}clone(){return new _e(this.contour.clone(),this.holes.map(t=>t.clone()))}transform(t){return new _e(this.contour.transform(t),this.holes.map(e=>e.transform(t)))}contains(t){return this.contour.contains(t)&&!this.holes.some(e=>e.contains(t))}intersects(t){return this.allLoops.some(e=>t.allLoops.some(n=>e.intersects(n)))}overlappingStrands(t){const e=t instanceof _e?t.allLoops:[t],n=this.allLoops.flatMap(s=>e.flatMap(r=>s.overlappingSegments(r)));return fi(n).map(s=>new mt(s))}};function Yr(i,t=[]){if(!i)throw new Error("Figure must have a contour");for(const[e,n]of Ge([i,...t]))if(e.intersects(n))throw new Error("Loops in a figure must not intersect");if(t.some(e=>!i.contains(e.firstPoint)&&!i.onStroke(e.firstPoint)))throw new Error("Holes must be inside the contour");for(const[e,n]of Ge(t))if(e.contains(n.firstPoint))throw console.error(hi(e),hi(n)),new Error("Holes must not be inside other holes")}const Xr=i=>{const t=i.map((s,r)=>i.slice(r+1).map((o,a)=>[a+r+1,o]).filter(([,o])=>s.boundingBox.overlaps(o.boundingBox)).map(([o])=>o)),e=[],n=Array(t.length);return t.forEach((s,r)=>{let o=n[r];o||(o=[],e.push(o)),o.push(i[r]),s.length&&s.forEach(a=>{n[a]=o})}),e},mi=i=>i.map((t,e)=>{const n=t.segments[0].midPoint,s=i.filter((r,o)=>e===o?!1:r.contains(n));return{loop:t,isIn:s}}),Hr=(i,t)=>i.flatMap(({loop:e})=>nn(t.filter(({loop:n,isIn:s})=>n===e||s.indexOf(e)!==-1))),Wr=(i,t)=>{const e=t.filter(({isIn:s})=>s.length<=1),n=nn(mi(i.map(({loop:s})=>s)));return[e,...n]},nn=i=>{if(!i.length)return[];const t=i.filter(({isIn:n})=>!n.length),e=i.filter(({isIn:n})=>n.length>1);return t.length===1&&e.length===0?[i]:t.length>1?Hr(t,i):Wr(e,i)};function ie(i){return Xr(i).map(mi).flatMap(nn).map(t=>{if(t.length===1)return new dt(t[0].loop);t.sort((s,r)=>s.isIn.length-r.isIn.length);const[e,...n]=t.map(({loop:s})=>s);return new dt(e,n)})}function Qr(i,t){const e=[];for(const n of i)for(const s of t)e.push([n,s]);return e}function*sn(i,t,e){const n=o=>t.some(a=>k(a,o.lastPoint)),s=o=>e.some(a=>o.isSame(a));let r=[];for(const o of i)n(o)?(r.push(o),yield new mt(r,{ignoreChecks:!0}),r=[]):s(o)?(r.length&&(yield new mt(r,{ignoreChecks:!0}),r=[]),yield new mt([o],{ignoreChecks:!0})):r.push(o);r.length&&(yield new mt(r,{ignoreChecks:!0}))}const gi=(i,t)=>{const e=i.findIndex(s=>k(t,s.firstPoint)),n=i.slice(0,e);return i.slice(e).concat(n)},pi=(i,t)=>{let e=i;const n=o=>k(o.firstPoint,t.firstPoint)&&k(o.lastPoint,t.lastPoint);let s=i.findIndex(n);if(s===-1){const o=i.map(a=>a.reverse());if(o.reverse(),s=o.findIndex(n),s===-1)throw console.error(o.map(a=>a.repr),t.repr),new Error("Failed to rotate to segment start");e=o}const r=e.slice(0,s);return e.slice(s).concat(r)};function Gr(i,t,e){return i.filter(n=>{const s=t.filter(o=>k(o.firstPoint,n)||k(o.lastPoint,n));if(s.length%2)throw new Error("Bug in the intersection algo on non crossing point");const r=s.map(o=>e.contains(o.midPoint));return!(r.every(o=>o)||!r.some(o=>o))})}function Zr(i,t,e){let n=[];const s=[],r=new Array(i.segments.length).fill(0).map(()=>[]),o=new Array(t.segments.length).fill(0).map(()=>[]);if(i.segments.forEach((m,w)=>{t.segments.forEach((g,p)=>{const{intersections:P,overlaps:f}=ne(m,g,e);n.push(...P),r[w].push(...P),o[p].push(...P),s.push(...f);const M=f.flatMap(b=>[b.firstPoint,b.lastPoint]);n.push(...M),r[w].push(...M),o[p].push(...M)})}),n=Et(n,e),!n.length||n.length===1)return null;const a=([m,w])=>w.length?m.splitAt(w):[m];let h=xt([i.segments,r]).flatMap(a),l=xt([t.segments,o]).flatMap(a);if(n=Gr(n,h,t),!n.length&&!s.length)return null;if(s.length){const m=s[0];h=pi(h,m),l=pi(l,m)}else{const m=n[0];h=gi(h,m),l=gi(l,m)}let c=Array.from(sn(h,n,s)),u=Array.from(sn(l,n,s));return(!k(u[0].lastPoint,c[0].lastPoint)||s.length>0&&u[0].segmentsCount!==1)&&(u=u.map(m=>m.reverse()).reverse(),k(u[0].lastPoint,c[0].lastPoint)||(c=c.map(m=>m.reverse()).reverse())),xt([c,u]).map(([m,w])=>m.segmentsCount===1&&s.some(g=>m.segments[0].isSame(g))?[m,"same"]:[m,w])}function wi(i){let t=i[0];for(const e of i.slice(1))t=t.extend(e);if(!k(t.firstPoint,t.lastPoint))throw console.error(et(t.firstPoint),et(t.lastPoint)),new Error("Bug in the intersection algo on non closing strand");return new yt(t.segments)}function Jr(i,t){const e=xt([t.slice(0,-1),t.slice(1)]).map(([s,r])=>wi(i.slice(s,r)));let n=i.slice(t[t.length-1]);return t[0]!==0&&(n=n.concat(i.slice(0,t[0]))),e.push(wi(n)),e}function Kr(i){if(!i.length)return[];const t=i.map(s=>s.firstPoint);let e=i.map(s=>s.lastPoint);e=e.slice(-1).concat(e.slice(0,-1));const n=xt([t,e]).flatMap(([s,r],o)=>k(s,r)?[]:o);try{return Jr(i,n)}catch{return fi(i.flatMap(s=>s.segments)).filter(s=>s.length>1).filter(s=>k(s[0].firstPoint,s.at(-1).lastPoint)).map(s=>new yt(s))}}const di=(i,t)=>{if(i.length===0)return[t];const e=i.at(-1);return k(e.lastPoint,t.firstPoint)?i.slice(0,-1).concat([e.extend(t)]):k(e.lastPoint,t.lastPoint)?i.slice(0,-1).concat([e.extend(t.reverse())]):i.concat([t])},to=(i,t)=>i.length===0?[t]:k(i[0].firstPoint,t.lastPoint)?[t.extend(i[0])].concat(i.slice(1)):[t].concat(i);function rn(i,t,{firstInside:e,secondInside:n}){const s=Zr(i,t);if(!s){const h=i.segments[0].midPoint,l=t.contains(h),c=t.segments[0].midPoint,u=i.contains(c);return{identical:!1,firstCurveInSecond:l,secondCurveInFirst:u}}if(s.every(([,h])=>h==="same"))return{identical:!0};let r=null,o=null;const a=s.flatMap(([h,l])=>{let c=[],u=0;if(l==="same")return o===1?(o=1,h):o===2||o===0?(o=null,[]):o===null?(r?r=r.extend(h):r=h,[]):(console.error("weird situation"),[]);const m=h.segments[0].midPoint,w=t.contains(m);(e==="keep"&&w||e==="remove"&&!w)&&(u+=1,c=di(c,h));const g=l.segments[0].midPoint,p=i.contains(g);if(n==="keep"&&p||n==="remove"&&!p){const P=l;u+=1,u===2&&c.length?(c=di(c,P),r=null):c=[P]}return o===null&&u===1&&r&&(c=to(c,r)),u===1&&(o=u,r=null),c.length?c:(r=null,[])});return Kr(a)}const eo=(i,t)=>{const e=rn(i,t,{firstInside:"remove",secondInside:"remove"});return Array.isArray(e)?e:e.identical?[i]:e.firstCurveInSecond?[t]:e.secondCurveInFirst?[i]:[i,t]},Ae=(i,t)=>{const e=rn(i,t,{firstInside:"remove",secondInside:"keep"});return Array.isArray(e)?e:e.identical?[]:e.firstCurveInSecond?[]:e.secondCurveInFirst?[i,t]:[i]},on=(i,t)=>{const e=rn(i,t,{firstInside:"keep",secondInside:"keep"});return Array.isArray(e)?e:e.identical?[i]:e.firstCurveInSecond?[i]:e.secondCurveInFirst?[t]:[]};function no(i){const t=new Map,e=[];return i.forEach((n,s)=>{let r;t.has(s)?r=t.get(s):(r={current:[n],fusedWith:new Set([s])},e.push(r)),i.slice(s+1).forEach((o,a)=>{const h=r.current,l=s+a+1;if(r.fusedWith.has(l))return;let c=[o],u=!1;if(t.has(l)&&(c=t.get(l).current,u=!0),!h.some(w=>c.some(g=>w.intersects(g))))return;let m;h.length>1||c.length>1?m=se(h,c):m=Mi(h[0],c[0]),r.fusedWith.add(l),r.current=m,u||t.set(l,r)})}),e.flatMap(({current:n})=>n)}function Mi(i,t){const e=eo(i.contour,t.contour),n=t.holes.flatMap(o=>Ae(o,i.contour)),s=i.holes.flatMap(o=>Ae(o,t.contour)),r=Qr(i.holes,t.holes).flatMap(([o,a])=>on(o,a));return ie([...e,...n,...s,...r])}function Ee(i,t){if(i.isFull&&t.isFull)return ie(Ae(i.contour,t.contour));if(i.isFull){const n=Ae(i.contour,t.contour),s=t.holes.flatMap(r=>on(r,i.contour));return ie([...n,...s])}else if(t.isFull&&!i.contour.intersects(t.contour))if(i.contour.contains(t.contour.firstPoint)){const n=se(i.holes.map(s=>new dt(s)),[t]);return ie([i.contour,...n.flatMap(s=>s.allLoops)])}else return[i];let e=Ee(new dt(i.contour),t);return i.holes.forEach(n=>{e=e.flatMap(s=>Ee(s,new dt(n)))}),e}function io(i,t){const e=on(i.contour,t.contour);if(!e.length)return[];let n=ie(e);return n=Yt(n,i.holes.map(s=>new dt(s))),Yt(n,t.holes.map(s=>new dt(s)))}function se(i,t){if(!i.length)return t;if(!t.length)return i;if(i.length===1&&t.length>1||t.length===1&&i.length>1)return no([...i,...t]);if(i.length>1&&t.length>1){let e=se([i[0]],t);return i.slice(1).forEach(n=>{e=se([n],e)}),e}return i.length===1&&t.length===1?Mi(i[0],t[0]):[]}function Yt(i,t){if(!i.length)return[];if(!t.length)return i;if(i.length===1&&t.length===1)return Ee(i[0],t[0]);if(i.length>1)return i.flatMap(n=>Yt([n],t));let e=Ee(i[0],t[0]);return t.slice(1).forEach(n=>{e=Yt(e,[n])}),e}function an(i,t){return!i.length||!t.length?[]:i.length===1&&t.length===1?io(i[0],t[0]):i.length>1?i.flatMap(e=>an([e],t)):t.flatMap(e=>an(i,[e]))}class bt extends Lt{constructor(t=[],{ignoreChecks:e=!1}={}){super(),ut(this,"figures"),ut(this,"_boundingBox",null),e||so(t),this.figures=t}get isEmpty(){return this.figures.length===0}get boundingBox(){if(this.isEmpty)return new Gt;if(this._boundingBox===null){let t=this.figures[0].boundingBox;for(const e of this.figures.slice(1))t=t.merge(e.boundingBox);this._boundingBox=t}return this._boundingBox}clone(){return new bt(this.figures.map(t=>t.clone()))}transform(t){return new bt(this.figures.map(e=>e.transform(t)))}contains(t){return this.figures.some(e=>e.contains(t))}intersects(t){return this.figures.some(e=>t.figures.some(n=>e.intersects(n)))}overlappingStrands(t){return this.figures.flatMap(e=>t instanceof bt?t.figures.flatMap(n=>e.overlappingStrands(n)):e.overlappingStrands(t))}fuse(t){return new bt(se(this.figures,t.figures))}cut(t){return new bt(Yt(this.figures,t.figures))}intersect(t){return new bt(an(this.figures,t.figures))}}function so(i){for(const[t,e]of Ge(i))if(t.intersects(e))throw new Error("Diagram figures must not intersect")}var ro=Object.defineProperty,oo=(i,t,e)=>t in i?ro(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,Se=(i,t,e)=>oo(i,typeof t!="symbol"?t+"":t,e);class hn{constructor(t,e){this.firstPoint=t,this.lastPoint=e}}function Pi(i,t){if(i instanceof N)return ao(i,t);if(i instanceof z)return ho(i,t);throw new Error("Not implemented")}function ao(i,t){const{firstPoint:e,lastPoint:n}=i,s=i.normalVector;return new N(G(e,nt(s,t)),G(n,nt(s,t)))}function ho(i,t){const e=G(i.firstPoint,nt(at(i.tangentAtFirstPoint),t)),n=G(i.lastPoint,nt(at(i.tangentAtLastPoint),t)),s=t*(i.clockwise?1:-1);return i.radius+s<i.precision?new hn(e,n):new z(e,n,i.center,i.clockwise)}function yi(i,t,e){const n=Ct(i.tangentAtLastPoint,t.tangentAtFirstPoint);if(Math.abs(n)<1e-10)return null;const s=n>0?1:-1,r=Math.abs(e)*s,o=Pi(i,r),a=Pi(t,r);if(o instanceof hn||a instanceof hn)return null;let h;try{h=Ir(o,a,1e-9).at(-1)}catch{return null}if(!h)return null;const l=h,c=(w,g)=>{const p=g.tangentAt(l),P=Zt(p),f=G(l,nt(P,r));return w.splitAt(f)},[u]=c(i,o),[,m]=c(t,a);return{first:u,second:m,center:l}}function bi(i,t,e){const n=yi(i,t,e);if(!n)return console.warn("Cannot fillet between segments",i.repr,t.repr),[i,t];const{first:s,second:r}=n;return[s,vn(s.lastPoint,r.firstPoint,s.tangentAtLastPoint),r]}function xi(i,t,e){const n=yi(i,t,e);if(!n)return console.warn("Cannot chamfer between segments",i.repr,t.repr),[i,t];const{first:s,second:r}=n;return[s,new N(s.lastPoint,r.firstPoint),r]}const lo=i=>{let t;i?typeof i=="number"||Array.isArray(i)&&i.length===2?t={endTangent:i}:t={endTangent:0,...i}:t={endTangent:[1,0]};const{endTangent:e,startFactor:n=1,endFactor:s=1,startTangent:r}=t;let o;typeof e=="number"?o=St(1,e*Ft):o=e;let a;return typeof r=="number"?a=St(1,r*Ft):a=r,{endTangent:o,startFactor:n,endFactor:s,startTangent:a}};function vi(i,{ignoreChecks:t=!1}={}){return new bt([new dt(new yt([...i],{ignoreChecks:t}))])}class uo{constructor(t=[0,0]){Se(this,"pointer"),Se(this,"firstPoint"),Se(this,"pendingSegments"),Se(this,"_nextCorner"),this.pointer=t,this.firstPoint=t,this.pendingSegments=[],this._nextCorner=null}movePointerTo(t){if(this.pendingSegments.length)throw new Error("You can only move the pointer if there is no segment defined");return this.pointer=t,this.firstPoint=t,this}saveSegment(t){if(k(t.firstPoint,t.lastPoint))throw new Error(`Segment has no length, ${t.repr}`);if(!this._nextCorner)return this.pendingSegments.push(t),this;const e=this.pendingSegments.pop();if(!e)throw new Error("bug in the custom corner algorithm");const n=this._nextCorner.mode==="chamfer"?xi:bi;return this.pendingSegments.push(...n(e,t,this._nextCorner.radius)),this._nextCorner=null,this}lineTo(t){const e=new N(this.pointer,t);return this.pointer=t,this.saveSegment(e)}line(t,e){return this.lineTo([this.pointer[0]+t,this.pointer[1]+e])}vLine(t){return this.line(0,t)}hLine(t){return this.line(t,0)}vLineTo(t){return this.lineTo([this.pointer[0],t])}hLineTo(t){return this.lineTo([t,this.pointer[1]])}polarLineTo([t,e]){const n=e*Ft,s=St(t,n);return this.lineTo(s)}polarLine(t,e){const n=e*Ft,[s,r]=St(t,n);return this.line(s,r)}tangentLine(t){const e=this.pendingSegments.at(-1);if(!e)throw new Error("You need a previous segment to sketch a tangent line");const[n,s]=e.tangentAtLastPoint;return this.line(n*t,s*t)}threePointsArcTo(t,e){return this.saveSegment(Qi(this.pointer,e,t)),this.pointer=t,this}threePointsArc(t,e,n,s){const[r,o]=this.pointer;return this.threePointsArcTo([r+t,o+e],[r+n,o+s])}sagittaArcTo(t,e){if(!e)return this.lineTo(t);const n=new N(this.pointer,t),s=at(n.tangentAtFirstPoint),r=G(n.midPoint,nt(s,e));return this.threePointsArcTo(t,r)}sagittaArc(t,e,n){return this.sagittaArcTo([t+this.pointer[0],e+this.pointer[1]],n)}vSagittaArc(t,e){return this.sagittaArc(0,t,e)}hSagittaArc(t,e){return this.sagittaArc(t,0,e)}bulgeArcTo(t,e){if(!e)return this.lineTo(t);const n=Z(this.pointer,t)/2,s=-e*n;return this.sagittaArcTo(t,s)}bulgeArc(t,e,n){return this.bulgeArcTo([t+this.pointer[0],e+this.pointer[1]],n)}vBulgeArc(t,e){return this.bulgeArc(0,t,e)}hBulgeArc(t,e){return this.bulgeArc(t,0,e)}tangentArcTo(t,e){const n=this.pendingSegments.at(-1);if(!n)throw new Error("You need a previous curve to sketch a tangent arc");return this.saveSegment(vn(this.pointer,t,e??n.tangentAtLastPoint)),this.pointer=t,this}tangentArc(t,e,n){const[s,r]=this.pointer;return this.tangentArcTo([t+s,e+r],n)}ellipseTo(t,e,n,s,r,o){return this.saveSegment(rr(this.pointer,t,e,n,s,r,o)),this.pointer=t,this}ellipse(t,e,n,s,r,o,a){return this.ellipseTo([t+this.pointer[0],e+this.pointer[1]],n,s,r,o,a)}halfEllipseTo(t,e){const[n,s]=bn(D(t,this.pointer));return this.ellipseTo(t,n/2,Math.abs(e),s*je,!0,e>0)}halfEllipse(t,e,n){return this.halfEllipseTo([t+this.pointer[0],e+this.pointer[1]],n)}cubicBezierCurveTo(t,e,n){return this.saveSegment(new ht(this.pointer,t,e,n)),this.pointer=t,this}quadraticBezierCurveTo(t,e){return this.saveSegment(new ot(this.pointer,t,e)),this.pointer=t,this}smoothCurveTo(t,e){const{endTangent:n,startTangent:s,startFactor:r,endFactor:o}=lo(e),a=this.pendingSegments.length?this.pendingSegments[this.pendingSegments.length-1]:null,h=Z(this.pointer,t)/3;let l;s?l=s:a?l=a.tangentAtLastPoint:l=[1,0],l=it(l);const c=[this.pointer[0]+l[0]*r*h,this.pointer[1]+l[1]*r*h];let u=n;u=it(u);const m=[t[0]-u[0]*o*h,t[1]-u[1]*o*h];return this.cubicBezierCurveTo(t,c,m)}smoothCurve(t,e,n){return this.smoothCurveTo([t+this.pointer[0],e+this.pointer[1]],n)}customCorner(t,e="fillet"){if(!this.pendingSegments.length)throw new Error("You need a segment defined to fillet the angle");return t?(this._nextCorner={mode:e,radius:t},this):this}_customCornerLastWithFirst(t,e="fillet"){if(!t)return;const n=this.pendingSegments.pop(),s=this.pendingSegments.shift();if(!n||!s)throw new Error("Not enough curves to close and fillet");const r=e==="chamfer"?xi:bi;this.pendingSegments.push(...r(n,s,t))}close(t=!1){if(!this.pendingSegments.length)throw new Error("No segments to close");const e=this.pendingSegments[0],n=this.pendingSegments.at(-1);return k(e.firstPoint,n.lastPoint)||this.lineTo(e.firstPoint),this._nextCorner!==null&&(this._customCornerLastWithFirst(this._nextCorner.radius,this._nextCorner.mode),this._nextCorner=null),vi(this.pendingSegments,{ignoreChecks:t})}closeWithMirror(t=!1){if(!this.pendingSegments.length)throw new Error("No segments to close");const e=this.pendingSegments[0],n=this.pendingSegments.at(-1),s=D(n.lastPoint,e.firstPoint),r=new pt().mirrorLine(s,e.firstPoint),o=this.pendingSegments.map(a=>a.transform(r).reverse());return o.reverse(),vi([...this.pendingSegments,...o],{ignoreChecks:t})}asStrand(){return new mt([...this.pendingSegments])}get isClosed(){var t;return k(this.pointer,(t=this.pendingSegments[0])==null?void 0:t.firstPoint)}}function Ai(i=[0,0]){return new uo(i)}function Tt([i,t]){return`${i} ${t}`}function ln(i){if(i instanceof N)return`L ${Tt(i.lastPoint)}`;if(i instanceof z)return`A ${i.radius} ${i.radius} 0 ${i.angularLength>Math.PI?"1":"0"} ${i.clockwise?"0":"1"} ${Tt(i.lastPoint)}`;if(i instanceof rt)return`A ${i.majorRadius} ${i.minorRadius} ${i.tiltAngle*je} ${i.deltaAngle>Math.PI?"1":"0"} ${i.clockwise?"0":"1"} ${Tt(i.lastPoint)}`;if(i instanceof ot)return`Q ${[Tt(i.controlPoint),Tt(i.lastPoint)].join(" ")}`;if(i instanceof ht)return`C ${[Tt(i.firstControlPoint),Tt(i.lastControlPoint),Tt(i.lastPoint)].join(" ")}`;throw new Error("Unknown segment type")}function Ei(i){const t=`M ${i.firstPoint.join(" ")}`,e=i.segments.map(ln).join(" ");return`${t} ${e} Z`}function Si(i){return`<path d="${i.allLoops.map(Ei).join(" ")}" />`}function co(i){return`<g>
11
+ ${i.figures.map(Si).join(`
12
12
  `)}
13
- </g>`}function no(s){const t=`M ${s.firstPoint.join(" ")}`,e=s.segments.map(_e).join(" ");return`${t} ${e}`}function so(s,t=1){const e=s.xMin-t,n=s.yMin-t;return`${e} ${n} ${s.width+2*t} ${s.height+2*t}`}function Hn(s,t,e=1,n){const r=so(t,e),o=n?`width="${t.width+2*e}${n}" height="${t.height+2*e}${n}"`:"";return`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
14
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${r}" fill="none" stroke="black" stroke-width="0.2%" vector-effect="non-scaling-stroke" ${o}>
15
- ${s}
16
- </svg>`}function Wn(s){if(s instanceof ht)return eo(s);if(s instanceof Q)return Xn(s);if(s instanceof it)return`<path d="${Dn(s)}" />`;if(s instanceof Pt)return`<path d="${no(s)}" />`;if(bn(s))return`<path d="${`M ${s.firstPoint.join(" ")}`} ${_e(s)}" />`;throw new Error("Unknown shape type")}const Jn=s=>"shape"in s?s.shape:s,Zn=(s,t)=>{if(!("shape"in s))return t;const{color:e}=s;return e?`<g stroke="${e}">${t}</g>`:t},Gn=s=>new qt(s.xMin,-s.yMax,s.xMax,-s.yMin);function ro(s,{margin:t=1,unit:e=null,viewBox:n}={}){if(Array.isArray(s)){const o=s.map(l=>Jn(l).mirror()),i=o.map((l,a)=>Zn(s[a],Wn(l))).join(`
17
- `),h=o.slice(1).reduce((l,a)=>l.merge(a.boundingBox),o[0].boundingBox);return Hn(i,n?Gn(n):h,t,e)}const r=Jn(s).mirror();return Hn(Zn(s,Wn(r)),n?Gn(n):r.boundingBox,t,e)}class _t extends At{constructor(t,{cutLines:e=[],foldLines:n=[],foldLinesForwards:r=[],foldLinesBackwards:o=[]}={}){super(),this.body=t,this.cutLines=[...e],this.foldLinesBackwards=[...n,...o],this.foldLinesForwards=[...r]}get foldLines(){return[...this.foldLinesForwards,...this.foldLinesBackwards]}clone(){return new _t(this.body,{cutLines:[...this.cutLines],foldLinesForwards:[...this.foldLinesForwards],foldLinesBackwards:[...this.foldLinesBackwards]})}addCutLine(t){return this.cutLines.push(t),this}addFoldLine(t,e="backwards"){e==="forwards"?this.foldLinesForwards.push(t):this.foldLinesBackwards.push(t)}fuseFold(t,e="backwards"){const n=t instanceof _t?t.body:t,r=this.body.overlappingStrands(n);return e==="forwards"?this.foldLinesForwards.push(...r):this.foldLinesBackwards.push(...r),this.fuseBody(t),this}fuseBody(t){let e;return t instanceof _t?(e=t.body,this.cutLines.push(...t.cutLines),this.foldLinesForwards.push(...t.foldLinesForwards),this.foldLinesBackwards.push(...t.foldLinesBackwards)):e=t,this.body=this.body.fuse(e),this}cutShape(t){return this.body=to(this.body,t),this.cutLines=this.cutLines.flatMap(e=>$e(e,t,!0)),this.eraseFolds(t),this}eraseFolds(t){this.foldLinesBackwards=this.foldLinesBackwards.flatMap(e=>$e(e,t,!0)),this.foldLinesForwards=this.foldLinesForwards.flatMap(e=>$e(e,t,!0))}transform(t){return new _t(this.body.transform(t),{cutLines:this.cutLines.map(n=>n.transform(t)),foldLinesForwards:this.foldLinesForwards.map(n=>n.transform(t)),foldLinesBackwards:this.foldLinesBackwards.map(n=>n.transform(t))})}asSVG(){const t=[];return this.body&&t.push({shape:this.body,color:"red"}),this.cutLines.length&&this.cutLines.map(e=>t.push({shape:e,color:"red"})),this.foldLinesBackwards.length&&this.foldLinesBackwards.map(e=>t.push({shape:e,color:"green"})),this.foldLinesForwards.length&&this.foldLinesForwards.map(e=>t.push({shape:e,color:"blue"})),ro(t,{unit:"mm"})}}function Le(s,t,{fillet:e=1,contraction:n=1,contractionMode:r="rounded",contractionLeft:o,contractionRight:i,leftContractionMode:h,rightContractionMode:l}={}){const a=o??n,c=i??n,u=Nn([-s/2,0]).hLine(s);return c?(l??r)==="rounded"?(u.tangentArc(-c,c,[-1,0]),u.vLine(t-c)):u.line(-c,t):u.vLine(t),u.customCorner(e),u.hLine(-s+a+c),u.customCorner(e),a?(h??r)==="rounded"?(u.vLine(-t+a),u.tangentArcTo([-s/2,0])):u.lineTo([-s/2,0]):u.vLine(-t),u.close()}function Kn(s,t,e={}){return Le(s,t,e)}function Qn(s,t,e={}){return Le(s,t,e).mirror("x")}function Be(s,t,{contractionTop:e,contractionBottom:n,topContractionMode:r,bottomContractionMode:o,...i}={}){return Le(s,t,{contractionLeft:e,contractionRight:n,leftContractionMode:r,rightContractionMode:o,...i}).rotate(90)}function ts(s,t,e={}){return Be(s,t,e).mirror("y")}const oo={right:ts,left:Be,top:Kn,bottom:Qn},es=(s,t)=>Nn([-s/2,0]).line(t,-t).hLine(s-2*t).line(t,t);class ie extends At{constructor(t,e=.2){if(super(),typeof t!="number"){this.cut=t.cut,this.unfold=t.unfold,this.bump=t.bump;return}const n=es(t,e*2.5);this.cut=n.asStrand(),this.unfold=n.close(),this.bump=es(t-5*e,5*e).close().mirror("x")}clone(){return new ie(this)}transform(t){return new ie({cut:this.cut.transform(t),unfold:this.unfold.transform(t),bump:this.bump.transform(t)})}makeCut(t){t.eraseFolds(this.unfold),t.addCutLine(this.cut)}fuseBump(t){t.fuseBody(this.bump)}}class he extends At{constructor(t){super(),this.points=t,this.points=t}transform(t){return new he(this.points.map(t.transform))}distribute(t){return this.points.map(e=>t.translateTo(e))}cloneDistribute(t){return this.points.map(e=>t.clone().translateTo(e))}}function io(s,t,e=3,n=0){if(s<=t*2)throw new Error("totalWidth must be greater than twice the objectWidth");const r=Math.max(Math.floor((s-2*n)/(t*(e+1))),2),i=(s-2*n-r*t)/(r-1),h=[];for(let l=0;l<r;l++)h.push(n+l*(t+i)-s/2+t/2);return new he(h.map(l=>[l,0]))}function ho(s,t,e="x"){const n=s*(t-1),r=[];for(let o=0;o<t;o++)r.push(o*s-n/2);return new he(r.map(o=>e.toLowerCase()==="x"?[o,0]:[0,o]))}rt.Dieline=_t,rt.FoldLockBump=ie,rt.bottomFlap=Qn,rt.drawFlaps=oo,rt.leftFlap=Be,rt.linearDistribution=io,rt.linearSpread=ho,rt.rightFlap=ts,rt.topFlap=Kn,Object.defineProperty(rt,Symbol.toStringTag,{value:"Module"})});
13
+ </g>`}function fo(i){const t=`M ${i.firstPoint.join(" ")}`,e=i.segments.map(ln).join(" ");return`${t} ${e}`}function mo(i,t=1){const e=i.xMin-t,n=i.yMin-t;return`${e} ${n} ${i.width+2*t} ${i.height+2*t}`}function ki(i,t,e=1,n){const s=mo(t,e),r=n?`width="${t.width+2*e}${n}" height="${t.height+2*e}${n}"`:"";return`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
14
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${s}" fill="none" stroke="black" stroke-width="0.2%" vector-effect="non-scaling-stroke" ${r}>
15
+ ${i}
16
+ </svg>`}function Ri(i){if(i instanceof dt)return[i];if(i instanceof yt)return[new dt(i)];if(i instanceof bt)return i.figures;throw new Error("Unknown shape")}function Ci(i,t,e=1e-9){let n=[];const s=[],r=new Array(t.segments.length).fill(0).map(()=>[]);t.segments.forEach((a,h)=>{i.segments.forEach(l=>{const{intersections:c,overlaps:u}=ne(a,l,e);n.push(...c),r[h].push(...c),s.push(...u);const m=u.flatMap(w=>[w.firstPoint,w.lastPoint]);n.push(...m),r[h].push(...m)})}),n=Et(n,e);const o=xt([t.segments,r]).flatMap(([a,h])=>h.length?a.splitAt(h):[a]);return Array.from(sn(o,n,s))}function Ti(i,t,e=!1){return Ci(t,i).filter(n=>{const s=n.segments[0].midPoint;return t.onStroke(s)?!e:!t.contains(s)})}function go(i,t,e=!1){return Ci(t,i).filter(n=>{const s=n.segments[0].midPoint;return t.onStroke(s)?!e:t.contains(s)})}function $i(i,t,e=!1){const n=Ti(i,t.contour,e),s=t.holes.flatMap(r=>go(i,r,e));return[...n,...s]}function po(i,t){return new bt(Yt(Ri(i),Ri(t)))}function un(i,t,e=!0){if(t instanceof yt)return Ti(i,t,e);if(t instanceof dt)return $i(i,t,e);let n=[new mt([...i.segments])];return t.figures.forEach(s=>{n=n.flatMap(r=>$i(r,s,e))}),n}function Ii(i){if(i instanceof bt)return co(i);if(i instanceof dt)return Si(i);if(i instanceof yt)return`<path d="${Ei(i)}" />`;if(i instanceof mt)return`<path d="${fo(i)}" />`;if(ri(i))return`<path d="${`M ${i.firstPoint.join(" ")}`} ${ln(i)}" />`;throw new Error("Unknown shape type")}const Fi=i=>"shape"in i?i.shape:i,_i=(i,t)=>{if(!("shape"in i))return t;const{color:e}=i;return e?`<g stroke="${e}">${t}</g>`:t},Li=i=>new Gt(i.xMin,-i.yMax,i.xMax,-i.yMin);function wo(i,{margin:t=1,unit:e=null,viewBox:n}={}){if(Array.isArray(i)){const r=i.map(h=>Fi(h).mirror()),o=r.map((h,l)=>_i(i[l],Ii(h))).join(`
17
+ `),a=r.slice(1).reduce((h,l)=>h.merge(l.boundingBox),r[0].boundingBox);return ki(o,n?Li(n):a,t,e)}const s=Fi(i).mirror();return ki(_i(i,Ii(s)),n?Li(n):s.boundingBox,t,e)}class Xt extends Lt{constructor(e,{cutLines:n=[],foldLines:s=[],foldLinesForwards:r=[],foldLinesBackwards:o=[]}={}){super();$t(this,"body");$t(this,"cutLines");$t(this,"foldLinesBackwards");$t(this,"foldLinesForwards");this.body=e,this.cutLines=[...n],this.foldLinesBackwards=[...s,...o],this.foldLinesForwards=[...r]}get foldLines(){return[...this.foldLinesForwards,...this.foldLinesBackwards]}clone(){return new Xt(this.body,{cutLines:[...this.cutLines],foldLinesForwards:[...this.foldLinesForwards],foldLinesBackwards:[...this.foldLinesBackwards]})}addCutLine(e){return this.cutLines.push(e),this}addFoldLine(e,n="backwards"){n==="forwards"?this.foldLinesForwards.push(e):this.foldLinesBackwards.push(e)}fuseFold(e,n="backwards"){const s=e instanceof Xt?e.body:e,r=this.body.overlappingStrands(s);return n==="forwards"?this.foldLinesForwards.push(...r):this.foldLinesBackwards.push(...r),this.fuseBody(e),this}fuseBody(e){let n;return e instanceof Xt?(n=e.body,this.cutLines.push(...e.cutLines),this.foldLinesForwards.push(...e.foldLinesForwards),this.foldLinesBackwards.push(...e.foldLinesBackwards)):n=e,this.body=this.body.fuse(n),this}cutShape(e){return this.body=po(this.body,e),this.cutLines=this.cutLines.flatMap(n=>un(n,e,!0)),this.eraseFolds(e),this}eraseFolds(e){this.foldLinesBackwards=this.foldLinesBackwards.flatMap(n=>un(n,e,!0)),this.foldLinesForwards=this.foldLinesForwards.flatMap(n=>un(n,e,!0))}transform(e){return new Xt(this.body.transform(e),{cutLines:this.cutLines.map(s=>s.transform(e)),foldLinesForwards:this.foldLinesForwards.map(s=>s.transform(e)),foldLinesBackwards:this.foldLinesBackwards.map(s=>s.transform(e))})}asSVG(){const e=[];return this.body&&e.push({shape:this.body,color:"red"}),this.cutLines.length&&this.cutLines.map(n=>e.push({shape:n,color:"red"})),this.foldLinesBackwards.length&&this.foldLinesBackwards.map(n=>e.push({shape:n,color:"green"})),this.foldLinesForwards.length&&this.foldLinesForwards.map(n=>e.push({shape:n,color:"blue"})),wo(e,{unit:"mm"})}}function cn(i,t,{fillet:e=1,contraction:n=1,contractionMode:s="rounded",contractionLeft:r,contractionRight:o,leftContractionMode:a,rightContractionMode:h}={}){const l=r??n,c=o??n,u=Ai([-i/2,0]).hLine(i);return c?(h??s)==="rounded"?(u.tangentArc(-c,c,[-1,0]),u.vLine(t-c)):u.line(-c,t):u.vLine(t),u.customCorner(e),u.hLine(-i+l+c),u.customCorner(e),l?(a??s)==="rounded"?(u.vLine(-t+l),u.tangentArcTo([-i/2,0])):u.lineTo([-i/2,0]):u.vLine(-t),u.close()}function Bi(i,t,e={}){return cn(i,t,e)}function Vi(i,t,e={}){return cn(i,t,e).mirror("x")}function fn(i,t,{contractionTop:e,contractionBottom:n,topContractionMode:s,bottomContractionMode:r,...o}={}){return cn(i,t,{contractionLeft:e,contractionRight:n,leftContractionMode:s,rightContractionMode:r,...o}).rotate(90)}function ji(i,t,e={}){return fn(i,t,e).mirror("y")}const Mo={right:ji,left:fn,top:Bi,bottom:Vi},Ni=(i,t)=>Ai([-i/2,0]).line(t,-t).hLine(i-2*t).line(t,t);class ke extends Lt{constructor(e,n=.2){super();$t(this,"cut");$t(this,"unfold");$t(this,"bump");if(typeof e!="number"){this.cut=e.cut,this.unfold=e.unfold,this.bump=e.bump;return}const s=Ni(e,n*2.5);this.cut=s.asStrand(),this.unfold=s.close(),this.bump=Ni(e-5*n,5*n).close().mirror("x")}clone(){return new ke(this)}transform(e){return new ke({cut:this.cut.transform(e),unfold:this.unfold.transform(e),bump:this.bump.transform(e)})}makeCut(e){e.eraseFolds(this.unfold),e.addCutLine(this.cut)}fuseBump(e){e.fuseBody(this.bump)}}class Re extends Lt{constructor(t){super(),this.points=t,this.points=t}transform(t){return new Re(this.points.map(t.transform))}distribute(t){return this.points.map(e=>t.translateTo(e))}cloneDistribute(t){return this.points.map(e=>t.clone().translateTo(e))}}function Po(i,t,e=3,n=0){if(i<=t*2)throw new Error("totalWidth must be greater than twice the objectWidth");const s=Math.max(Math.floor((i-2*n)/(t*(e+1))),2),o=(i-2*n-s*t)/(s-1),a=[];for(let h=0;h<s;h++)a.push(n+h*(t+o)-i/2+t/2);return new Re(a.map(h=>[h,0]))}function yo(i,t,e="x"){const n=i*(t-1),s=[];for(let r=0;r<t;r++)s.push(r*i-n/2);return new Re(s.map(r=>e.toLowerCase()==="x"?[r,0]:[0,r]))}tt.Dieline=Xt,tt.FoldLockBump=ke,tt.bottomFlap=Vi,tt.drawFlaps=Mo,tt.leftFlap=fn,tt.linearDistribution=Po,tt.linearSpread=yo,tt.rightFlap=ji,tt.topFlap=Bi,Object.defineProperty(tt,Symbol.toStringTag,{value:"Module"})});
18
18
  //# sourceMappingURL=dielines.umd.cjs.map