@mylasertools/kerfscript 0.0.0-stage → 0.2.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.
- package/CHANGELOG.md +60 -0
- package/CLA.md +76 -0
- package/COMMERCIAL-LICENSE.md +63 -0
- package/LANGUAGE.md +398 -0
- package/LICENSE +661 -0
- package/README.md +187 -2
- package/THIRD-PARTY-NOTICES.md +124 -0
- package/TRADEMARKS.md +45 -0
- package/dist/ast.d.cts +160 -0
- package/dist/ast.d.ts +160 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +19416 -0
- package/dist/customizer.d.cts +19 -0
- package/dist/customizer.d.ts +19 -0
- package/dist/evaluator.d.cts +129 -0
- package/dist/evaluator.d.ts +129 -0
- package/dist/export/dxf.d.cts +3 -0
- package/dist/export/dxf.d.ts +3 -0
- package/dist/export/svg.d.cts +15 -0
- package/dist/export/svg.d.ts +15 -0
- package/dist/functions.d.cts +4 -0
- package/dist/functions.d.ts +4 -0
- package/dist/geometry.d.cts +44 -0
- package/dist/geometry.d.ts +44 -0
- package/dist/index.cjs +44 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +44 -0
- package/dist/joinery.d.cts +7 -0
- package/dist/joinery.d.ts +7 -0
- package/dist/lexer.d.cts +28 -0
- package/dist/lexer.d.ts +28 -0
- package/dist/parser.d.cts +6 -0
- package/dist/parser.d.ts +6 -0
- package/dist/paths.d.cts +28 -0
- package/dist/paths.d.ts +28 -0
- package/dist/render.d.cts +58 -0
- package/dist/render.d.ts +58 -0
- package/dist/stdlib.d.cts +1 -0
- package/dist/stdlib.d.ts +1 -0
- package/dist/text.d.cts +36 -0
- package/dist/text.d.ts +36 -0
- package/dist/values.d.cts +25 -0
- package/dist/values.d.ts +25 -0
- package/docs/cli.md +76 -0
- package/docs/compatibility.md +64 -0
- package/docs/customizer.md +74 -0
- package/docs/getting-started.md +115 -0
- package/docs/javascript.md +153 -0
- package/docs/kerf.md +67 -0
- package/docs/layers.md +108 -0
- package/docs/openscad.md +71 -0
- package/docs/parts-and-sheets.md +82 -0
- package/docs/versions.md +33 -0
- package/package.json +86 -4
package/dist/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*! @mylasertools/kerfscript | (c) MyLaserTools | AGPL-3.0-only or commercial licence, see COMMERCIAL-LICENSE.md. Includes Clipper2 (BSL-1.0), opentype.js, tiny-inflate and string.prototype.codepointat (MIT), see THIRD-PARTY-NOTICES.md. */
|
|
2
|
+
var eo=Object.defineProperty;var to=(r,e,t)=>e in r?eo(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ro=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var b=(r,e,t)=>to(r,typeof e!="symbol"?e+"":e,t);var cs=ro((jc,hs)=>{hs.exports={}});var Be=r=>typeof r=="object"&&r!==null&&!Array.isArray(r)&&r.type==="range",_e=r=>typeof r=="object"&&r!==null&&!Array.isArray(r)&&r.type==="function",Nn=r=>typeof r=="number";function Qt(r,e){let t=[];if(r.step===0||(r.step>0?r.start>r.end:r.start<r.end))return t;let n=Math.floor((r.end-r.start)/r.step+1e-9)+1;if(n>e)throw new Error(`Range has ${n} steps, more than the limit of ${e}`);for(let s=0;s<n;s++)t.push(r.start+s*r.step);return t}function Se(r){return r===void 0||r===!1||r===0||r===""?!1:Array.isArray(r)?r.length>0:typeof r=="number"?!Number.isNaN(r):!0}function ot(r,e){return Array.isArray(r)&&Array.isArray(e)?r.length===e.length&&r.every((t,n)=>ot(t,e[n])):Be(r)&&Be(e)?r.start===e.start&&r.step===e.step&&r.end===e.end:r===e}function Pe(r){return r===void 0?"undef":Array.isArray(r)?"list":Be(r)?"range":_e(r)?"function":typeof r}function Le(r){return r===void 0?"undef":typeof r=="string"?JSON.stringify(r):typeof r=="number"?Jt(r):Array.isArray(r)?`[${r.map(Le).join(", ")}]`:Be(r)?`[${Jt(r.start)}:${Jt(r.step)}:${Jt(r.end)}]`:_e(r)?`function(${r.params.map(e=>e.name).join(", ")})`:String(r)}function er(r){return typeof r=="string"?r:Le(r)}function Jt(r){return Number.isInteger(r)?String(r):String(Number(r.toPrecision(10)))}var at=Math.PI/180;function $(r,e){if(typeof r!="number")throw new Error(`${e}() needs a number, got ${Pe(r)}`);return r}function Ge(r,e){if(Array.isArray(r))return r;if(Be(r))return Qt(r,1e6);if(typeof r=="string")return[...r];throw new Error(`${e}() needs a list, got ${Pe(r)}`)}var we=(r,e)=>t=>typeof t[0]=="number"?Nr(e(t[0])):void 0;function Nr(r){let e=Math.round(r);return Math.abs(r-e)<1e-12?e:r}function no(r){let e=Math.floor(r)>>>0||2654435769;return()=>{e=e+1831565813>>>0;let t=e;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function Bn(r,e,t){let n=r.length===1&&Array.isArray(r[0])?r[0]:r;if(n.length)return e(n.map(s=>$(s,t)))}var Gn={abs:we("abs",Math.abs),sign:we("sign",Math.sign),floor:we("floor",Math.floor),ceil:we("ceil",Math.ceil),round:we("round",r=>r<0?-Math.round(-r):Math.round(r)),sqrt:we("sqrt",Math.sqrt),exp:we("exp",Math.exp),ln:we("ln",Math.log),log:r=>r.length===2?Math.log($(r[1],"log"))/Math.log($(r[0],"log")):Nr(Math.log10($(r[0],"log"))),sin:we("sin",r=>Math.sin(r*at)),cos:we("cos",r=>Math.cos(r*at)),tan:we("tan",r=>Math.tan(r*at)),asin:we("asin",r=>Math.asin(r)/at),acos:we("acos",r=>Math.acos(r)/at),atan:we("atan",r=>Math.atan(r)/at),atan2:r=>Nr(Math.atan2($(r[0],"atan2"),$(r[1],"atan2"))/at),pow:r=>Math.pow($(r[0],"pow"),$(r[1],"pow")),min:r=>Bn(r,e=>e.reduce((t,n)=>n<t?n:t,1/0),"min"),max:r=>Bn(r,e=>e.reduce((t,n)=>n>t?n:t,-1/0),"max"),clamp:r=>Math.min(Math.max($(r[0],"clamp"),$(r[1],"clamp")),$(r[2],"clamp")),lerp:r=>{let e=$(r[2],"lerp");if(Array.isArray(r[0])&&Array.isArray(r[1])){let t=r[1];return r[0].map((n,s)=>$(n,"lerp")+($(t[s],"lerp")-$(n,"lerp"))*e)}return $(r[0],"lerp")+($(r[1],"lerp")-$(r[0],"lerp"))*e},norm:r=>Math.sqrt(Ge(r[0],"norm").reduce((e,t)=>e+$(t,"norm")**2,0)),cross:r=>{let e=Ge(r[0],"cross").map(n=>$(n,"cross")),t=Ge(r[1],"cross").map(n=>$(n,"cross"));return e.length===2?e[0]*t[1]-e[1]*t[0]:[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]},len:r=>typeof r[0]=="string"?[...r[0]].length:Array.isArray(r[0])?r[0].length:void 0,concat:r=>r.flatMap(e=>Array.isArray(e)?e:[e]),reverse:r=>typeof r[0]=="string"?[...r[0]].reverse().join(""):[...Ge(r[0],"reverse")].reverse(),sum:r=>Ge(r[0],"sum").reduce((e,t)=>e+$(t,"sum"),0),slice:r=>{let t=(typeof r[0]=="string"?[...r[0]]:Ge(r[0],"slice")).slice($(r[1]??0,"slice"),r[2]===void 0?void 0:$(r[2],"slice"));return typeof r[0]=="string"?t.join(""):t},str:r=>r.map(er).join(""),chr:r=>r.flatMap(e=>Array.isArray(e)?e:[e]).map(e=>String.fromCodePoint($(e,"chr"))).join(""),ord:r=>typeof r[0]=="string"&&r[0].length?r[0].codePointAt(0):void 0,upper:r=>typeof r[0]=="string"?r[0].toUpperCase():void 0,lower:r=>typeof r[0]=="string"?r[0].toLowerCase():void 0,split:r=>typeof r[0]=="string"?r[0].split(typeof r[1]=="string"?r[1]:" "):void 0,join:r=>Ge(r[0],"join").map(er).join(typeof r[1]=="string"?r[1]:""),search:r=>{let t=(typeof r[1]=="string"?[...r[1]]:Ge(r[1],"search")).findIndex(n=>ot(n,r[0]));return t<0?void 0:t},contains:r=>typeof r[0]=="string"?r[0].includes(er(r[1])):Ge(r[0],"contains").some(e=>ot(e,r[1])),lookup:r=>{let e=$(r[0],"lookup"),t=Ge(r[1],"lookup");if(!t.length)return;let n=t.map(s=>[$(s[0],"lookup"),$(s[1],"lookup")]).sort((s,i)=>s[0]-i[0]);if(e<=n[0][0])return n[0][1];for(let s=1;s<n.length;s++)if(e<=n[s][0]){let[i,o]=n[s-1],[a,u]=n[s];return o+(e-i)/(a-i)*(u-o)}return n[n.length-1][1]},rands:r=>{let e=$(r[0],"rands"),t=$(r[1],"rands"),n=$(r[2],"rands"),s=no(r[3]===void 0?1:$(r[3],"rands"));return Array.from({length:Math.min(Math.max(0,Math.floor(n)),1e6)},()=>e+(t-e)*s())},is_num:r=>Nn(r[0])&&!Number.isNaN(r[0]),is_string:r=>typeof r[0]=="string",is_bool:r=>typeof r[0]=="boolean",is_list:r=>Array.isArray(r[0]),is_undef:r=>r[0]===void 0,is_function:r=>_e(r[0]),type_of:r=>Pe(r[0])};var j;(function(r){r[r.NoClip=0]="NoClip",r[r.Intersection=1]="Intersection",r[r.Union=2]="Union",r[r.Difference=3]="Difference",r[r.Xor=4]="Xor"})(j||(j={}));var me;(function(r){r[r.Subject=0]="Subject",r[r.Clip=1]="Clip"})(me||(me={}));var V;(function(r){r[r.EvenOdd=0]="EvenOdd",r[r.NonZero=1]="NonZero",r[r.Positive=2]="Positive",r[r.Negative=3]="Negative"})(V||(V={}));var q;(function(r){r[r.IsOn=0]="IsOn",r[r.IsInside=1]="IsInside",r[r.IsOutside=2]="IsOutside"})(q||(q={}));var xt=Number.MAX_SAFE_INTEGER,oe=Math.floor(Math.sqrt(xt));function tr(r,e){return!Number.isSafeInteger(r)||!Number.isSafeInteger(e)?!1:r===0||e===0?!0:Math.abs(r)<=xt/Math.abs(e)}function Hn(r,e){return Math.abs(r)+Math.abs(e)<=xt}function Br(r,e,t,n){if(tr(r,e)&&tr(t,n)){let s=r*e,i=t*n;if(Hn(s,i))return s-i}return Number.isSafeInteger(r)&&Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?Number(BigInt(r)*BigInt(e)-BigInt(t)*BigInt(n)):r*e-t*n}function Gr(r,e,t,n){if(tr(r,e)&&tr(t,n)){let s=r*e,i=t*n;if(Hn(s,i))return s+i}return Number.isSafeInteger(r)&&Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?Number(BigInt(r)*BigInt(e)+BigInt(t)*BigInt(n)):r*e+t*n}var Hr=BigInt(0),rr=BigInt(2),so=BigInt(4),io=BigInt(64),oo=BigInt("0xFFFFFFFFFFFFFFFF"),Xr=BigInt("9223372036854775807"),Ct=Number(Xr/so),zn=Number(Xr),Vn=1e-12,ao=.1,zr=Math.floor(oe/2),uo=Math.floor(Math.sqrt(Math.sqrt(xt/4)));function lo(r){if(!Number.isFinite(r))throw new RangeError("Scale must be a finite number");let e=Math.abs(r);return e===0?Number.POSITIVE_INFINITY:xt/e}function fo(r,e,t){if(!Number.isFinite(r)||Math.abs(r)>e)throw new RangeError(`Scaled coordinate exceeds Number.MAX_SAFE_INTEGER in ${t}`)}function ho(r,e){if(!Number.isFinite(r)||Math.abs(r)>xt)throw new RangeError(`Coordinate exceeds Number.MAX_SAFE_INTEGER in ${e}`)}function co(r,e,t){let n=e.x-r.x,s=t.y-e.y,i=e.y-r.y,o=t.x-e.x;return Math.abs(n)<oe&&Math.abs(s)<oe&&Math.abs(i)<oe&&Math.abs(o)<oe?n*s-i*o:Br(n,s,i,o)}function Ie(r,e,t){let n=e.x-r.x,s=t.y-e.y,i=e.y-r.y,o=t.x-e.x;if(Math.abs(n)<oe&&Math.abs(s)<oe&&Math.abs(i)<oe&&Math.abs(o)<oe){let l=n*s,f=i*o;return l>f?1:l<f?-1:0}if(!Number.isSafeInteger(n)||!Number.isSafeInteger(s)||!Number.isSafeInteger(i)||!Number.isSafeInteger(o)){let l=n*s,f=i*o;return l>f?1:l<f?-1:0}let a=BigInt(n)*BigInt(s),u=BigInt(i)*BigInt(o);return a===u?0:a>u?1:-1}function po(r){if(r<-8||r>8)throw new Error("Error: Precision is out of range.")}function go(r){return Math.abs(r)<=Vn}function vo(r){return r<0?-1:r>0?1:0}function mo(r,e){let t=BigInt(r),n=BigInt(e),s=t*n;return{lo64:s&oo,hi64:s>>io}}function Xn(r,e,t,n){let s=Math.abs(r),i=Math.abs(e),o=Math.abs(t),a=Math.abs(n);if(s<oe&&i<oe&&o<oe&&a<oe)return r*e===t*n;let u=(r<0?-1:r>0?1:0)*(e<0?-1:e>0?1:0),l=(t<0?-1:t>0?1:0)*(n<0?-1:n>0?1:0);if(u!==l)return!1;if(u===0)return!0;if(!Number.isSafeInteger(s)||!Number.isSafeInteger(i)||!Number.isSafeInteger(o)||!Number.isSafeInteger(a))return r*e===t*n;let f=BigInt(s),c=BigInt(i),h=BigInt(o),p=BigInt(a);return f*c===h*p}function xo(r,e,t){let n=e.x-r.x,s=t.y-e.y,i=e.y-r.y,o=t.x-e.x;return Xn(n,s,i,o)}function yo(r,e,t){let n=e.x-r.x,s=t.x-e.x,i=e.y-r.y,o=t.y-e.y;return Math.abs(n)<oe&&Math.abs(s)<oe&&Math.abs(i)<oe&&Math.abs(o)<oe?n*s+i*o:Gr(n,s,i,o)}function bo(r,e,t){let n=e.x-r.x,s=t.x-e.x,i=e.y-r.y,o=t.y-e.y;if(Math.abs(n)<oe&&Math.abs(s)<oe&&Math.abs(i)<oe&&Math.abs(o)<oe){let u=n*s+i*o;return u>0?1:u<0?-1:0}if(!Number.isSafeInteger(n)||!Number.isSafeInteger(s)||!Number.isSafeInteger(i)||!Number.isSafeInteger(o)){let u=n*s+i*o;return u>0?1:u<0?-1:0}let a=BigInt(n)*BigInt(s)+BigInt(i)*BigInt(o);return a===Hr?0:a>Hr?1:-1}function So(r){let e=r.length;if(e<3)return 0;let t=!0;for(let i=0;i<e&&t;i++){let o=r[i];(Math.abs(o.x)>=zr||Math.abs(o.y)>=zr)&&(t=!1)}let n=r[e-1];if(t){let i=0;for(let o of r)i+=(n.y+o.y)*(n.x-o.x),n=o;return i*.5}let s=Hr;for(let i of r){let o=n.y+i.y,a=n.x-i.x;if(Number.isSafeInteger(o)&&Number.isSafeInteger(a))s+=BigInt(o)*BigInt(a);else if(Number.isSafeInteger(n.y)&&Number.isSafeInteger(i.y)&&Number.isSafeInteger(n.x)&&Number.isSafeInteger(i.x)){let u=BigInt(n.y)+BigInt(i.y),l=BigInt(n.x)-BigInt(i.x);s+=u*l}else s+=BigInt(Math.round(o*a));n=i}return Number(s)*.5}function wo(r,e){return r.y*e.x-e.y*r.x}function ko(r,e){return r.x*e.x+r.y*e.y}function Eo(r){let e=Math.round(r);return r===e-.5&&(e&1)!==0?e-1:e}function Po(r){return r>=Ct||r<=-Ct?zn:Math.round(r)}function Lo(r,e,t,n){let s=e.y-r.y,i=e.x-r.x,o=n.y-t.y,a=n.x-t.x,u=Br(s,a,o,i);if(u===0)return null;let l=Br(r.x-t.x,o,r.y-t.y,a)/u;return l<=0?{x:r.x,y:r.y,z:r.z||0}:l>=1?{x:e.x,y:e.y,z:e.z||0}:{x:Math.trunc(r.x+l*i),y:Math.trunc(r.y+l*s),z:0}}function Io(r,e,t,n){let s=e.y-r.y,i=e.x-r.x,o=n.y-t.y,a=n.x-t.x,u=s*a-o*i;if(u===0)return{success:!1,ip:{x:0,y:0,z:0}};let l=((r.x-t.x)*o-(r.y-t.y)*a)/u,f;return l<=0?f={...r,z:0}:l>=1?f={...e,z:0}:f={x:r.x+l*i,y:r.y+l*s,z:0},{success:!0,ip:f}}function To(r,e,t,n,s=!1){if(!s){let l=Ie(r,t,n),f=Ie(e,t,n),c=Ie(t,r,e),h=Ie(n,r,e);return l!==0&&f!==0&&l!==f&&c!==0&&h!==0&&c!==h}let i=Ie(r,t,n),o=Ie(e,t,n);if(i!==0&&i===o)return!1;let a=Ie(t,r,e),u=Ie(n,r,e);return a!==0&&a===u?!1:i!==0||o!==0||a!==0||u!==0}function qn(r){if(r.length===0)return{left:0,top:0,right:0,bottom:0};let e={left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER};for(let t of r)t.x<e.left&&(e.left=t.x),t.x>e.right&&(e.right=t.x),t.y<e.top&&(e.top=t.y),t.y>e.bottom&&(e.bottom=t.y);return e.left===Number.MAX_SAFE_INTEGER?{left:0,top:0,right:0,bottom:0}:e}function Co(r,e,t){if(e.x===t.x&&e.y===t.y)return{x:e.x,y:e.y,z:0};let n=t.x-e.x,s=t.y-e.y,i=Gr(r.x-e.x,n,r.y-e.y,s)/Gr(n,n,s,s),o=i<0?0:i>1?1:i;return{x:Math.round(e.x+o*n),y:Math.round(e.y+o*s),z:0}}function Vr(r,e){let t=e.length,n=0;if(t<3)return q.IsOutside;for(;n<t&&e[n].y===r.y;)n++;if(n===t)return q.IsOutside;let s=e[n].y<r.y,i=s,o=0,a=n+1,u=t;for(;;){if(a===u){if(u===0||n===0)break;u=n,a=0}if(s)for(;a<u&&e[a].y<r.y;)a++;else for(;a<u&&e[a].y>r.y;)a++;if(a===u)continue;let f=e[a],c=a>0?e[a-1]:e[t-1];if(f.y===r.y){if(f.x===r.x||f.y===c.y&&r.x<c.x!=r.x<f.x)return q.IsOn;if(a++,a===n)break;continue}if(!(r.x<f.x&&r.x<c.x))if(r.x>c.x&&r.x>f.x)o=1-o;else{let h=Ie(c,f,r);if(h===0)return q.IsOn;h<0===s&&(o=1-o)}s=!s,a++}if(s===i)return o===0?q.IsOutside:q.IsInside;a===t&&(a=0);let l=a===0?Ie(e[t-1],e[0],r):Ie(e[a-1],e[a],r);return l===0?q.IsOn:(l<0===s&&(o=1-o),o===0?q.IsOutside:q.IsInside)}function Mo(r,e){let t=q.IsOn;for(let a of r)switch(Vr(a,e)){case q.IsOutside:if(t===q.IsOutside)return!1;t=q.IsOutside;break;case q.IsInside:if(t===q.IsInside)return!0;t=q.IsInside;break;default:break}let n=qn(r),s,i;return Number.isSafeInteger(n.left)&&Number.isSafeInteger(n.right)&&Math.abs(n.left)+Math.abs(n.right)>Number.MAX_SAFE_INTEGER?(s=Number((BigInt(n.left)+BigInt(n.right))/rr),i=Number((BigInt(n.top)+BigInt(n.bottom))/rr)):(s=Math.round((n.left+n.right)/2),i=Math.round((n.top+n.bottom)/2)),Vr({x:s,y:i},e)!==q.IsOutside}var z={MaxInt64:Xr,MaxCoord:Ct,max_coord:Ct,min_coord:-Ct,Invalid64:zn,floatingPointTolerance:Vn,defaultMinimumEdgeLength:ao,maxCoordForSafeAreaProduct:zr,maxCoordForSafeCrossSq:uo,maxSafeCoordinateForScale:lo,checkSafeScaleValue:fo,ensureSafeInteger:ho,crossProduct:co,crossProductSign:Ie,checkPrecision:po,isAlmostZero:go,triSign:vo,multiplyUInt64:mo,productsAreEqual:Xn,isCollinear:xo,dotProduct:yo,dotProductSign:bo,area:So,crossProductD:wo,dotProductD:ko,roundToEven:Eo,checkCastInt64:Po,getLineIntersectPt:Lo,getLineIntersectPtD:Io,segsIntersect:To,getBounds:qn,getClosestPtOnSegment:Co,pointInPolygon:Vr,path2ContainsPath1:Mo},He={create(r=0,e=0,t=0){return{x:Math.round(r),y:Math.round(e),z:t}},fromPointD(r){return z.ensureSafeInteger(r.x,"Point64Utils.fromPointD"),z.ensureSafeInteger(r.y,"Point64Utils.fromPointD"),{x:Math.round(r.x),y:Math.round(r.y),z:r.z||0}},scale(r,e){return{x:Math.round(r.x*e),y:Math.round(r.y*e),z:r.z||0}},equals(r,e){return r.x===e.x&&r.y===e.y},add(r,e){if(Number.isSafeInteger(r.x)&&Number.isSafeInteger(e.x)&&Number.isSafeInteger(r.y)&&Number.isSafeInteger(e.y)){let t=r.x+e.x,n=r.y+e.y;return Number.isSafeInteger(t)&&Number.isSafeInteger(n)?{x:t,y:n,z:0}:{x:Number(BigInt(r.x)+BigInt(e.x)),y:Number(BigInt(r.y)+BigInt(e.y)),z:0}}return{x:r.x+e.x,y:r.y+e.y,z:0}},subtract(r,e){return{x:r.x-e.x,y:r.y-e.y,z:0}},toString(r){return r.z!==void 0&&r.z!==0?`${r.x},${r.y},${r.z} `:`${r.x},${r.y} `}},nr={create(r=0,e=0,t=0){return{x:r,y:e,z:t}},fromPoint64(r){return{x:r.x,y:r.y,z:r.z||0}},scale(r,e){return{x:r.x*e,y:r.y*e,z:r.z||0}},equals(r,e){return z.isAlmostZero(r.x-e.x)&&z.isAlmostZero(r.y-e.y)},negate(r){r.x=-r.x,r.y=-r.y},toString(r,e=2){return r.z!==void 0&&r.z!==0?`${r.x.toFixed(e)},${r.y.toFixed(e)},${r.z}`:`${r.x.toFixed(e)},${r.y.toFixed(e)}`}},ut={create(r=0,e=0,t=0,n=0){return{left:r,top:e,right:t,bottom:n}},createInvalid(){return{left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER}},width(r){return r.right-r.left},height(r){return r.bottom-r.top},isEmpty(r){return r.bottom<=r.top||r.right<=r.left},isValid(r){return r.left<Number.MAX_SAFE_INTEGER},midPoint(r){if(Number.isSafeInteger(r.left)&&Number.isSafeInteger(r.right)&&Math.abs(r.left)+Math.abs(r.right)>Number.MAX_SAFE_INTEGER){let e=Number((BigInt(r.left)+BigInt(r.right))/rr),t=Number((BigInt(r.top)+BigInt(r.bottom))/rr);return{x:e,y:t}}return{x:Math.round((r.left+r.right)/2),y:Math.round((r.top+r.bottom)/2)}},contains(r,e){return e.x>r.left&&e.x<r.right&&e.y>r.top&&e.y<r.bottom},containsRect(r,e){return e.left>=r.left&&e.right<=r.right&&e.top>=r.top&&e.bottom<=r.bottom},intersects(r,e){return Math.max(r.left,e.left)<=Math.min(r.right,e.right)&&Math.max(r.top,e.top)<=Math.min(r.bottom,e.bottom)},asPath(r){return[{x:r.left,y:r.top,z:0},{x:r.right,y:r.top,z:0},{x:r.right,y:r.bottom,z:0},{x:r.left,y:r.bottom,z:0}]}},qr={create(r=0,e=0,t=0,n=0){return{left:r,top:e,right:t,bottom:n}},createInvalid(){return{left:Number.MAX_VALUE,top:Number.MAX_VALUE,right:-Number.MAX_VALUE,bottom:-Number.MAX_VALUE}},width(r){return r.right-r.left},height(r){return r.bottom-r.top},isEmpty(r){return r.bottom<=r.top||r.right<=r.left},midPoint(r){return{x:(r.left+r.right)/2,y:(r.top+r.bottom)/2}},contains(r,e){return e.x>r.left&&e.x<r.right&&e.y>r.top&&e.y<r.bottom},containsRect(r,e){return e.left>=r.left&&e.right<=r.right&&e.top>=r.top&&e.bottom<=r.bottom},intersects(r,e){return Math.max(r.left,e.left)<Math.min(r.right,e.right)&&Math.max(r.top,e.top)<Math.min(r.bottom,e.bottom)},asPath(r){return[{x:r.left,y:r.top,z:0},{x:r.right,y:r.top,z:0},{x:r.right,y:r.bottom,z:0},{x:r.left,y:r.bottom,z:0}]}};var Wn=Object.freeze(ut.createInvalid()),$n=Object.freeze(qr.createInvalid());var Mt=BigInt(0),Oo=BigInt(2),Zn=BigInt(4),Z;(function(r){r[r.None=0]="None",r[r.OpenStart=1]="OpenStart",r[r.OpenEnd=2]="OpenEnd",r[r.LocalMax=4]="LocalMax",r[r.LocalMin=8]="LocalMin"})(Z||(Z={}));var Wr=class{constructor(){b(this,"data",[])}push(e){this.data.push(e),this.siftUp(this.data.length-1)}pop(){if(this.data.length===0)return null;let e=this.data[0],t=this.data.pop();return this.data.length>0&&(this.data[0]=t,this.siftDown(0)),e}clear(){this.data.length=0}siftUp(e){let t=this.data[e];for(;e>0;){let n=e-1>>1;if(this.data[n]>=t)break;this.data[e]=this.data[n],e=n}this.data[e]=t}siftDown(e){let t=this.data.length,n=this.data[e];for(;;){let s=(e<<1)+1;if(s>=t)break;let i=s+1,o=s;if(i<t&&this.data[i]>this.data[s]&&(o=i),this.data[o]<=n)break;this.data[e]=this.data[o],e=o}this.data[e]=n}},Ot=class{constructor(e,t,n){b(this,"pt");b(this,"next",null);b(this,"prev",null);b(this,"flags");this.pt=e,this.flags=t,this.prev=n}},Ft=class{constructor(e,t,n=!1){b(this,"vertex");b(this,"polytype");b(this,"isOpen");this.vertex=e,this.polytype=t,this.isOpen=n}equals(e){return e!==null&&this.vertex===e.vertex}};function _n(r,e,t){return{pt:r,edge1:e,edge2:t}}var We=class{constructor(e,t){b(this,"pt");b(this,"next");b(this,"prev");b(this,"outrec");b(this,"horz");this.pt=e,this.outrec=t,this.next=this,this.prev=this,this.horz=null}},xe;(function(r){r[r.None=0]="None",r[r.Left=1]="Left",r[r.Right=2]="Right"})(xe||(xe={}));var $r;(function(r){r[r.Bottom=0]="Bottom",r[r.Middle=1]="Middle",r[r.Top=2]="Top"})($r||($r={}));var sr=class{constructor(){b(this,"idx",0);b(this,"owner",null);b(this,"frontEdge",null);b(this,"backEdge",null);b(this,"pts",null);b(this,"polypath",null);b(this,"bounds",{left:0,top:0,right:0,bottom:0});b(this,"path",[]);b(this,"isOpen",!1);b(this,"splits",null);b(this,"recursiveSplit",null)}},ir=class{constructor(e){b(this,"leftOp");b(this,"rightOp");b(this,"leftToRight");this.leftOp=e,this.rightOp=null,this.leftToRight=!0}},At=class{constructor(e,t){b(this,"op1");b(this,"op2");this.op1=e,this.op2=t}};function Fo(r,e){return r.rightOp===null?e.rightOp===null?0:1:e.rightOp===null?-1:r.leftOp.pt.x-e.leftOp.pt.x}function Ao(r,e){return r.pt.y!==e.pt.y?r.pt.y>e.pt.y?-1:1:r.pt.x!==e.pt.x?r.pt.x<e.pt.x?-1:1:r.edge1.curX!==e.edge1.curX?r.edge1.curX<e.edge1.curX?-1:1:r.edge2.curX<e.edge2.curX?-1:r.edge2.curX>e.edge2.curX?1:0}var Dt=class{constructor(){b(this,"bot",{x:0,y:0});b(this,"top",{x:0,y:0});b(this,"curX",0);b(this,"dx",0);b(this,"windDx",0);b(this,"windCount",0);b(this,"windCount2",0);b(this,"outrec",null);b(this,"prevInAEL",null);b(this,"nextInAEL",null);b(this,"prevInSEL",null);b(this,"nextInSEL",null);b(this,"jump",null);b(this,"vertexTop",null);b(this,"localMin",null);b(this,"isLeftBound",!1);b(this,"joinWith",xe.None)}},yt={addLocMin(r,e,t,n){if((r.flags&Z.LocalMin)!==Z.None)return;r.flags|=Z.LocalMin;let s=new Ft(r,e,t);n.push(s)},addPathsToVertexList(r,e,t,n,s){for(let i=0,o=r.length;i<o;i++){let a=r[i],u=null,l=null,f=null;for(let g=0,m=a.length;g<m;g++){let x=a[g];if(u===null)u=new Ot(x,Z.None,null),s.push(u),l=u,f=x;else if(!(f.x===x.x&&f.y===x.y)){let y=new Ot(x,Z.None,l);l.next=y,l=y,f=x}}if(l?.prev==null||(!t&&l.pt.x===u.pt.x&&l.pt.y===u.pt.y&&(l=l.prev),l.next=u,u.prev=l,!t&&l.next===l))continue;let c;if(t){let g=u.next;for(;g!==u&&g.pt.y===u.pt.y;)g=g.next;c=g.pt.y<=u.pt.y,c?(u.flags=Z.OpenStart,yt.addLocMin(u,e,!0,n)):u.flags=Z.OpenStart|Z.LocalMax}else{for(l=u.prev;l!==u&&l.pt.y===u.pt.y;)l=l.prev;if(l===u)continue;c=l.pt.y>u.pt.y}let h=c;l=u;let p=u.next;for(;p!==u;)p.pt.y>l.pt.y&&c?(l.flags|=Z.LocalMax,c=!1):p.pt.y<l.pt.y&&!c&&(c=!0,yt.addLocMin(l,e,t,n)),l=p,p=p.next;t?(l.flags|=Z.OpenEnd,c?l.flags|=Z.LocalMax:yt.addLocMin(l,e,t,n)):c!==h&&(h?yt.addLocMin(l,e,!1,n):l.flags|=Z.LocalMax)}}};var or=class{constructor(e=null){b(this,"parent");b(this,"children",[]);this.parent=e}get isHole(){return this.getIsHole()}getLevel(){let e=0,t=this.parent;for(;t!==null;)++e,t=t.parent;return e}get level(){return this.getLevel()}getIsHole(){let e=this.getLevel();return e!==0&&(e&1)===0}get count(){return this.children.length}clear(){this.children.length=0}toStringInternal(e,t){let n="",s=" ".repeat(t),i=this.children.length===1?"":"s";(t&1)===0?n+=`${s}+- hole (${e}) contains ${this.children.length} nested polygon${i}.
|
|
3
|
+
`:n+=`${s}+- polygon (${e}) contains ${this.children.length} hole${i}.
|
|
4
|
+
`;for(let o=0;o<this.count;o++)this.children[o].count>0&&(n+=this.children[o].toStringInternal(o,t+1));return n}toString(){if(this.level>0)return"";let e=this.children.length===1?"":"s",t=`Polytree with ${this.children.length} polygon${e}.
|
|
5
|
+
`;for(let n=0;n<this.count;n++)this.children[n].count>0&&(t+=this.children[n].toStringInternal(n,1));return t+`
|
|
6
|
+
`}},ar=class r extends or{constructor(t=null){super(t);b(this,"polygon",null)}get poly(){return this.polygon}addChild(t){let n=new r(this);return n.polygon=t,this.children.push(n),n}child(t){if(t<0||t>=this.children.length)throw new Error("Index out of range");return this.children[t]}area(){let t=this.polygon===null?0:Zr.area(this.polygon);for(let n of this.children)t+=n.area();return t}};var Ut=class extends ar{};var d=class d{constructor(){b(this,"cliptype",j.NoClip);b(this,"fillrule",V.EvenOdd);b(this,"actives",null);b(this,"sel",null);b(this,"minimaList",[]);b(this,"intersectList",[]);b(this,"vertexList",[]);b(this,"outrecList",[]);b(this,"scanlineHeap",new Wr);b(this,"scanlineSet",new Set);b(this,"scanlineArr",[]);b(this,"useScanlineArray",!1);b(this,"horzSegList",[]);b(this,"horzJoinList",[]);b(this,"currentLocMin",0);b(this,"currentBotY",0);b(this,"curXValidAtTop",!1);b(this,"isSortedMinimaList",!1);b(this,"hasOpenPaths",!1);b(this,"usingPolytree",!1);b(this,"succeeded",!1);b(this,"zCallbackInternal");b(this,"preserveCollinear",!0);b(this,"reverseSolution",!1)}getZCallback(){}xyEqual(e,t){return e.x===t.x&&e.y===t.y}setZ(e,t,n){let s=this.zCallbackInternal;s&&(d.getPolyType(e)===me.Subject?(this.xyEqual(n,e.bot)?n.z=e.bot.z??0:this.xyEqual(n,e.top)?n.z=e.top.z??0:this.xyEqual(n,t.bot)?n.z=t.bot.z??0:this.xyEqual(n,t.top)?n.z=t.top.z??0:n.z=0,s(e.bot,e.top,t.bot,t.top,n)):(this.xyEqual(n,t.bot)?n.z=t.bot.z??0:this.xyEqual(n,t.top)?n.z=t.top.z??0:this.xyEqual(n,e.bot)?n.z=e.bot.z??0:this.xyEqual(n,e.top)?n.z=e.top.z??0:n.z=0,s(t.bot,t.top,e.bot,e.top,n)))}static isOdd(e){return(e&1)!==0}static isHotEdge(e){return e.outrec!=null}static isOpen(e){return d.openPathsEnabled&&e.localMin.isOpen}static isOpenEnd(e){return d.openPathsEnabled&&e.localMin.isOpen&&d.isOpenEndVertex(e.vertexTop)}static isOpenEndVertex(e){return(e.flags&(Z.OpenStart|Z.OpenEnd))!==Z.None}static getPrevHotEdge(e){let t=e.prevInAEL;if(!d.openPathsEnabled){for(;t!==null&&!d.isHotEdge(t);)t=t.prevInAEL;return t}for(;t!==null&&(t.localMin.isOpen||!d.isHotEdge(t));)t=t.prevInAEL;return t}static isFront(e){return e===e.outrec.frontEdge}static getDx(e,t){let n=t.y-e.y;return n!==0?(t.x-e.x)/n:t.x>e.x?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY}static topX(e,t){return t===e.top.y||e.top.x===e.bot.x?e.top.x:t===e.bot.y?e.bot.x:z.roundToEven(e.bot.x+e.dx*(t-e.bot.y))}static isHorizontal(e){return e.dx===Number.NEGATIVE_INFINITY||e.dx===Number.POSITIVE_INFINITY}static isHeadingRightHorz(e){return e.dx===Number.NEGATIVE_INFINITY}static isHeadingLeftHorz(e){return e.dx===Number.POSITIVE_INFINITY}static getPolyType(e){return e.localMin.polytype}static isSamePolyType(e,t){return e.localMin.polytype===t.localMin.polytype}static setDx(e){e.dx=d.getDx(e.bot,e.top)}static nextVertex(e){return e.windDx>0?e.vertexTop.next:e.vertexTop.prev}static prevPrevVertex(e){return e.windDx>0?e.vertexTop.prev.prev:e.vertexTop.next.next}static isMaximaVertex(e){return(e.flags&Z.LocalMax)!==Z.None}static isMaximaEdge(e){return(e.vertexTop.flags&Z.LocalMax)!==Z.None}static getMaximaPair(e){let t=e.nextInAEL;for(;t!==null;){if(t.vertexTop===e.vertexTop)return t;t=t.nextInAEL}return null}boundingBoxesOverlap(e,t,n,s){let i=e.x<t.x?e.x:t.x;if((n.x>s.x?n.x:s.x)<i)return!1;let a=e.x>t.x?e.x:t.x,u=n.x<s.x?n.x:s.x;if(a<u)return!1;let l=e.y<t.y?e.y:t.y;if((n.y>s.y?n.y:s.y)<l)return!1;let c=e.y>t.y?e.y:t.y,h=n.y<s.y?n.y:s.y;return c>=h}clearSolutionOnly(){for(;this.actives!==null;)this.deleteFromAEL(this.actives);this.scanlineHeap.clear(),this.scanlineSet.clear(),this.scanlineArr.length=0,this.disposeIntersectNodes(),this.outrecList.length=0,this.horzSegList.length=0,this.horzJoinList.length=0}clear(){this.clearSolutionOnly(),this.minimaList.length=0,this.vertexList.length=0,this.currentLocMin=0,this.isSortedMinimaList=!1,this.hasOpenPaths=!1}reset(){this.isSortedMinimaList||(this.minimaList.sort((e,t)=>t.vertex.pt.y-e.vertex.pt.y),this.isSortedMinimaList=!0),this.scanlineHeap.clear(),this.scanlineSet.clear(),this.scanlineArr.length=0,this.useScanlineArray=this.minimaList.length<=16;for(let e=this.minimaList.length-1;e>=0;e--)this.insertScanline(this.minimaList[e].vertex.pt.y);this.currentBotY=0,this.currentLocMin=0,this.actives=null,this.sel=null,this.curXValidAtTop=!1,this.succeeded=!0}upgradeScanlineStructureFromArray(){let e=this.scanlineArr;for(let t=0,n=e.length;t<n;t++){let s=e[t];this.scanlineSet.add(s),this.scanlineHeap.push(s)}e.length=0,this.useScanlineArray=!1}insertScanline(e){if(this.useScanlineArray){let t=this.scanlineArr;for(let n=0,s=t.length;n<s;n++)if(t[n]===e)return;t.push(e),t.length>64&&this.upgradeScanlineStructureFromArray();return}this.scanlineSet.has(e)||(this.scanlineSet.add(e),this.scanlineHeap.push(e))}popScanline(){if(this.useScanlineArray){let t=this.scanlineArr,n=t.length;if(n===0)return null;let s=0,i=t[0];for(let o=1;o<n;o++){let a=t[o];a>i&&(i=a,s=o)}return t[s]=t[n-1],t.pop(),i}let e=this.scanlineHeap.pop();return e===null?null:(this.scanlineSet.delete(e),e)}hasLocMinAtY(e){return this.currentLocMin<this.minimaList.length&&this.minimaList[this.currentLocMin].vertex.pt.y===e}popLocalMinima(){return this.minimaList[this.currentLocMin++]}addPath(e,t,n=!1){let s=[e];this.addPaths(s,t,n)}addPaths(e,t,n=!1){n&&(this.hasOpenPaths=!0),this.isSortedMinimaList=!1,yt.addPathsToVertexList(e,t,n,this.minimaList,this.vertexList)}addReuseableData(e){if(e.minimaList.length!==0){this.isSortedMinimaList=!1;for(let t of e.minimaList)this.minimaList.push(new Ft(t.vertex,t.polytype,t.isOpen)),t.isOpen&&(this.hasOpenPaths=!0)}}deleteFromAEL(e){let t=e.prevInAEL,n=e.nextInAEL;t===null&&n===null&&e!==this.actives||(t!==null?t.nextInAEL=n:this.actives=n,n!==null&&(n.prevInAEL=t))}getBounds(){let e={left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER};for(let t of this.vertexList){let n=t;do n.pt.x<e.left&&(e.left=n.pt.x),n.pt.x>e.right&&(e.right=n.pt.x),n.pt.y<e.top&&(e.top=n.pt.y),n.pt.y>e.bottom&&(e.bottom=n.pt.y),n=n.next;while(n!==t)}return ut.isEmpty(e)?{left:0,top:0,right:0,bottom:0}:e}executeInternal(e,t){if(e===j.NoClip)return;d.openPathsEnabled=this.hasOpenPaths,this.zCallbackInternal=this.getZCallback(),this.fillrule=t,this.cliptype=e,this.reset();let n=this.popScanline();if(n!==null){for(;this.succeeded;){this.insertLocalMinimaIntoAEL(n);let s;for(;(s=this.popHorz())!==null;)this.doHorizontal(s);this.horzSegList.length>0&&(this.convertHorzSegsToJoins(),this.horzSegList.length=0),this.currentBotY=n;let i=this.popScanline();if(i===null)break;for(n=i,this.doIntersections(n),this.doTopOfScanbeam(n);(s=this.popHorz())!==null;)this.doHorizontal(s)}this.succeeded&&this.processHorzJoins()}}insertLocalMinimaIntoAEL(e){for(;this.hasLocMinAtY(e);){let t=this.popLocalMinima(),n;(t.vertex.flags&Z.OpenStart)!==Z.None?n=null:(n=new Dt,n.bot=t.vertex.pt,n.curX=t.vertex.pt.x,n.windDx=-1,n.vertexTop=t.vertex.prev,n.top=t.vertex.prev.pt,n.outrec=null,n.localMin=t,d.setDx(n));let s;if((t.vertex.flags&Z.OpenEnd)!==Z.None?s=null:(s=new Dt,s.bot=t.vertex.pt,s.curX=t.vertex.pt.x,s.windDx=1,s.vertexTop=t.vertex.next,s.top=t.vertex.next.pt,s.outrec=null,s.localMin=t,d.setDx(s)),n!==null&&s!==null){if(d.isHorizontal(n)){if(d.isHeadingRightHorz(n)){let o=n;n=s,s=o}}else if(d.isHorizontal(s)){if(d.isHeadingLeftHorz(s)){let o=n;n=s,s=o}}else if(n.dx<s.dx){let o=n;n=s,s=o}}else n===null&&(n=s,s=null);let i;if(n.isLeftBound=!0,this.insertLeftEdge(n),d.openPathsEnabled?d.isOpen(n)?(this.setWindCountForOpenPathEdge(n),i=this.isContributingOpen(n)):(this.setWindCountForClosedPathEdge(n),i=this.isContributingClosed(n)):(this.setWindCountForClosedPathEdge(n),i=this.isContributingClosed(n)),s!==null){for(s.windCount=n.windCount,s.windCount2=n.windCount2,this.insertRightEdge(n,s),i&&(this.addLocalMinPoly(n,s,n.bot,!0),d.isHorizontal(n)||this.checkJoinLeft(n,n.bot));s.nextInAEL!==null&&this.isValidAelOrder(s.nextInAEL,s);)this.intersectEdges(s,s.nextInAEL,s.bot),this.swapPositionsInAEL(s,s.nextInAEL);d.isHorizontal(s)?this.pushHorz(s):(this.checkJoinRight(s,s.bot),this.insertScanline(s.top.y))}else i&&d.openPathsEnabled&&this.startOpenPath(n,n.bot);d.isHorizontal(n)?this.pushHorz(n):this.insertScanline(n.top.y)}}pushHorz(e){e.nextInSEL=this.sel,this.sel=e}popHorz(){let e=this.sel;return e===null?null:(this.sel=this.sel.nextInSEL,e)}doHorizontal(e){if(!d.openPathsEnabled){this.doHorizontalClosed(e);return}let t=d.isOpen(e),n=e.bot.y,s=t?this.getCurrYMaximaVertexOpen(e):this.getCurrYMaximaVertex(e),{isLeftToRight:i,leftX:o,rightX:a}=this.resetHorzDirection(e,s),u=o,l=a;if(d.isHotEdge(e)){let f=this.addOutPt(e,{x:e.curX,y:n});this.addToHorzSegList(f)}for(;;){let f=i?e.nextInAEL:e.prevInAEL;for(;f!==null;){if(f.vertexTop===s){if(d.isHotEdge(e)&&this.isJoined(f)&&this.split(f,f.top),d.isHotEdge(e)){for(;e.vertexTop!==s;)this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);i?this.addLocalMaxPoly(e,f,e.top):this.addLocalMaxPoly(f,e,e.top)}this.deleteFromAEL(f),this.deleteFromAEL(e);return}if(s!==e.vertexTop||d.isOpenEnd(e)){if(i&&f.curX>l||!i&&f.curX<u)break;if(f.curX===e.top.x&&!d.isHorizontal(f)){let p=d.nextVertex(e).pt;if(d.isOpen(f)&&!d.isSamePolyType(f,e)&&!d.isHotEdge(f)){if(i&&d.topX(f,p.y)>p.x||!i&&d.topX(f,p.y)<p.x)break}else if(i&&d.topX(f,p.y)>=p.x||!i&&d.topX(f,p.y)<=p.x)break}}let h={x:f.curX,y:n};i?(this.intersectEdges(e,f,h),this.swapPositionsInAEL(e,f),this.checkJoinLeft(f,h),e.curX=f.curX,f=e.nextInAEL):(this.intersectEdges(f,e,h),this.swapPositionsInAEL(f,e),this.checkJoinRight(f,h),e.curX=f.curX,f=e.prevInAEL),d.isHotEdge(e)&&this.addToHorzSegList(this.getLastOp(e))}if(t&&d.isOpenEnd(e)){d.isHotEdge(e)&&(this.addOutPt(e,e.top),d.isFront(e)?e.outrec.frontEdge=null:e.outrec.backEdge=null,e.outrec=null),this.deleteFromAEL(e);return}if(d.nextVertex(e).pt.y!==e.top.y)break;d.isHotEdge(e)&&this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);let c=this.resetHorzDirection(e,s);u=c.leftX,l=c.rightX}if(d.isHotEdge(e)){let f=this.addOutPt(e,e.top);this.addToHorzSegList(f)}this.updateEdgeIntoAEL(e)}doHorizontalClosed(e){let t=e.bot.y,n=this.getCurrYMaximaVertex(e),{isLeftToRight:s,leftX:i,rightX:o}=this.resetHorzDirection(e,n),a=i,u=o;if(d.isHotEdge(e)){let l=this.addOutPt(e,{x:e.curX,y:t});this.addToHorzSegList(l)}for(;;){let l=s?e.nextInAEL:e.prevInAEL;for(;l!==null;){if(l.vertexTop===n){if(d.isHotEdge(e)&&this.isJoined(l)&&this.split(l,l.top),d.isHotEdge(e)){for(;e.vertexTop!==n;)this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);s?this.addLocalMaxPoly(e,l,e.top):this.addLocalMaxPoly(l,e,e.top)}this.deleteFromAEL(l),this.deleteFromAEL(e);return}if(n!==e.vertexTop){if(s&&l.curX>u||!s&&l.curX<a)break;if(l.curX===e.top.x&&!d.isHorizontal(l)){let h=d.nextVertex(e).pt,p=d.topX(l,h.y);if(s&&p>=h.x||!s&&p<=h.x)break}}let c={x:l.curX,y:t};s?(this.intersectEdges(e,l,c),this.swapPositionsInAEL(e,l),this.checkJoinLeft(l,c),e.curX=l.curX,l=e.nextInAEL):(this.intersectEdges(l,e,c),this.swapPositionsInAEL(l,e),this.checkJoinRight(l,c),e.curX=l.curX,l=e.prevInAEL),d.isHotEdge(e)&&this.addToHorzSegList(this.getLastOp(e))}if(d.nextVertex(e).pt.y!==e.top.y)break;d.isHotEdge(e)&&this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);let f=this.resetHorzDirection(e,n);a=f.leftX,u=f.rightX}if(d.isHotEdge(e)){let l=this.addOutPt(e,e.top);this.addToHorzSegList(l)}this.updateEdgeIntoAEL(e)}convertHorzSegsToJoins(){let e=this.horzSegList,t=0;for(let n=0,s=e.length;n<s;n++){let i=e[n];this.updateHorzSegment(i)&&(e[t++]=i)}if(!(t<2)){e.length=t,this.horzSegList.sort(Fo);for(let n=0;n<t-1;n++){let s=this.horzSegList[n];for(let i=n+1;i<t;i++){let o=this.horzSegList[i];if(o.leftOp.pt.x>=s.rightOp.pt.x||o.leftToRight===s.leftToRight||o.rightOp.pt.x<=s.leftOp.pt.x)continue;let a=s.leftOp.pt.y;if(s.leftToRight){for(;s.leftOp.next.pt.y===a&&s.leftOp.next.pt.x<=o.leftOp.pt.x;)s.leftOp=s.leftOp.next;for(;o.leftOp.prev.pt.y===a&&o.leftOp.prev.pt.x<=s.leftOp.pt.x;)o.leftOp=o.leftOp.prev;let u=new At(this.duplicateOp(s.leftOp,!0),this.duplicateOp(o.leftOp,!1));this.horzJoinList.push(u)}else{for(;s.leftOp.prev.pt.y===a&&s.leftOp.prev.pt.x<=o.leftOp.pt.x;)s.leftOp=s.leftOp.prev;for(;o.leftOp.next.pt.y===a&&o.leftOp.next.pt.x<=s.leftOp.pt.x;)o.leftOp=o.leftOp.next;let u=new At(this.duplicateOp(o.leftOp,!0),this.duplicateOp(s.leftOp,!1));this.horzJoinList.push(u)}}}}}updateHorzSegment(e){let t=e.leftOp,n=this.getRealOutRec(t.outrec),s=n.frontEdge!==null,i=t.pt.y,o=t,a=t;if(s){let l=n.pts,f=l.next;for(;o!==f&&o.prev.pt.y===i;)o=o.prev;for(;a!==l&&a.next.pt.y===i;)a=a.next}else{for(;o.prev!==a&&o.prev.pt.y===i;)o=o.prev;for(;a.next!==o&&a.next.pt.y===i;)a=a.next}let u=this.setHorzSegHeadingForward(e,o,a)&&e.leftOp.horz===null;return u?e.leftOp.horz=e:e.rightOp=null,u}setHorzSegHeadingForward(e,t,n){return t.pt.x===n.pt.x?!1:(t.pt.x<n.pt.x?(e.leftOp=t,e.rightOp=n,e.leftToRight=!0):(e.leftOp=n,e.rightOp=t,e.leftToRight=!1),!0)}duplicateOp(e,t){let n=new We(e.pt,e.outrec);return t?(n.next=e.next,n.next.prev=n,n.prev=e,e.next=n):(n.prev=e.prev,n.prev.next=n,n.next=e,e.prev=n),n}getRealOutRec(e){for(;e!==null&&e.pts===null;)e=e.owner;return e}doIntersections(e){this.buildIntersectList(e)&&(this.processIntersectList(),this.disposeIntersectNodes())}doTopOfScanbeam(e){let t=this.curXValidAtTop;this.curXValidAtTop=!1,this.sel=null;let n=this.actives;for(;n!==null;){if(n.top.y===e)if(n.curX=n.top.x,d.isMaximaEdge(n)){n=this.doMaxima(n);continue}else d.isHotEdge(n)&&this.addOutPt(n,n.top),this.updateEdgeIntoAEL(n),d.isHorizontal(n)&&this.pushHorz(n);else t||(n.curX=d.topX(n,e));n=n.nextInAEL}}processHorzJoins(){for(let e of this.horzJoinList){let t=this.getRealOutRec(e.op1.outrec),n=this.getRealOutRec(e.op2.outrec),s=e.op1.next,i=e.op2.prev;if(e.op1.next=e.op2,e.op2.prev=e.op1,s.prev=i,i.next=s,t===n){let o=this.newOutRec();o.pts=s,this.fixOutRecPts(o),t.pts.outrec===o&&(t.pts=e.op1,t.pts.outrec=t),this.usingPolytree?(this.path1InsidePath2(t.pts,o.pts)?([o.pts,t.pts]=[t.pts,o.pts],this.fixOutRecPts(t),this.fixOutRecPts(o),o.owner=t):this.path1InsidePath2(o.pts,t.pts)?o.owner=t:o.owner=t.owner,t.splits===null&&(t.splits=[]),t.splits.push(o.idx)):o.owner=t}else n.pts=null,this.usingPolytree?(this.setOwner(n,t),this.moveSplits(n,t)):n.owner=t}}fixOutRecPts(e){let t=e.pts;do t.outrec=e,t=t.next;while(t!==e.pts)}path1InsidePath2(e,t){let n=q.IsOn,s=e;do{switch(this.pointInOpPolygon(s.pt,t)){case q.IsOutside:if(n===q.IsOutside)return!1;n=q.IsOutside;break;case q.IsInside:if(n===q.IsInside)return!0;n=q.IsInside;break;default:break}s=s.next}while(s!==e);return z.path2ContainsPath1(this.getCleanPath(e),this.getCleanPath(t))}pointInOpPolygon(e,t){if(t===t.next||t.prev===t.next)return q.IsOutside;let n=t;do{if(t.pt.y!==e.y)break;t=t.next}while(t!==n);if(t.pt.y===e.y)return q.IsOutside;let s=t.pt.y<e.y,i=s,o=0;for(n=t.next;n!==t;){if(s)for(;n!==t&&n.pt.y<e.y;)n=n.next;else for(;n!==t&&n.pt.y>e.y;)n=n.next;if(n===t)break;if(n.pt.y===e.y){if(n.pt.x===e.x||n.pt.y===n.prev.pt.y&&e.x<n.prev.pt.x!=e.x<n.pt.x)return q.IsOn;if(n=n.next,n===t)break;continue}if(n.pt.x<=e.x||n.prev.pt.x<=e.x)if(n.prev.pt.x<e.x&&n.pt.x<e.x)o=1-o;else{let a=z.crossProductSign(n.prev.pt,n.pt,e);if(a===0)return q.IsOn;a<0===s&&(o=1-o)}s=!s,n=n.next}if(s===i)return o===0?q.IsOutside:q.IsInside;{let a=z.crossProductSign(n.prev.pt,n.pt,e);if(a===0)return q.IsOn;a<0===s&&(o=1-o)}return o===0?q.IsOutside:q.IsInside}getCleanPath(e){let t=[],n=e;for(;n.next!==e&&(n.pt.x===n.next.pt.x&&n.pt.x===n.prev.pt.x||n.pt.y===n.next.pt.y&&n.pt.y===n.prev.pt.y);)n=n.next;t.push(n.pt);let s=n;for(n=n.next;n!==e;)(n.pt.x!==n.next.pt.x||n.pt.x!==s.pt.x)&&(n.pt.y!==n.next.pt.y||n.pt.y!==s.pt.y)&&(t.push(n.pt),s=n),n=n.next;return t}moveSplits(e,t){if(e.splits!==null){t.splits===null&&(t.splits=[]);for(let n of e.splits)n!==t.idx&&t.splits.push(n);e.splits=null}}buildIntersectList(e){if(this.actives?.nextInAEL===null)return!1;if(!this.adjustCurrXAndCopyToSEL(e))return this.curXValidAtTop=!0,!1;let t=this.sel;for(;t!==null&&t.jump!==null;){let n=null;for(;t!==null&&t.jump!==null;){let s=t,i=t.jump,o=i,a=i?.jump||null;for(t.jump=a;t!==o&&i!==a;)if(i.curX<t.curX){let u=i.prevInSEL;for(;this.addNewIntersectNode(u,i,e),u!==t;)u=u.prevInSEL;if(u=i,i=this.extractFromSEL(u),o=i,t!==null&&this.insert1Before2InSEL(u,t),t!==s)continue;s=u,s.jump=a,n===null?this.sel=s:n.jump=s}else t=t.nextInSEL;n=s,t=a}t=this.sel}return this.intersectList.length>0}processIntersectList(){this.intersectList.sort(Ao);for(let e=0;e<this.intersectList.length;++e){if(!this.edgesAdjacentInAEL(this.intersectList[e])){let n=e+1;for(;!this.edgesAdjacentInAEL(this.intersectList[n]);)n++;[this.intersectList[n],this.intersectList[e]]=[this.intersectList[e],this.intersectList[n]]}let t=this.intersectList[e];this.intersectEdges(t.edge1,t.edge2,t.pt),this.swapPositionsInAEL(t.edge1,t.edge2),t.edge1.curX=t.pt.x,t.edge2.curX=t.pt.x,this.checkJoinLeft(t.edge2,t.pt,!0),this.checkJoinRight(t.edge1,t.pt,!0)}}edgesAdjacentInAEL(e){return e.edge1.nextInAEL===e.edge2||e.edge1.prevInAEL===e.edge2}adjustCurrXAndCopyToSEL(e){let t=this.actives;this.sel=t;let n=Number.NEGATIVE_INFINITY,s=!1;for(;t!==null;){t.prevInSEL=t.prevInAEL,t.nextInSEL=t.nextInAEL,t.jump=t.nextInSEL;let i=d.topX(t,e);t.curX=i,i<n&&(s=!0),n=i,t=t.nextInAEL}return s}doMaxima(e){let t=e.prevInAEL,n=e.nextInAEL;if(d.isOpenEnd(e))return d.isHotEdge(e)&&this.addOutPt(e,e.top),d.isHorizontal(e)||(d.isHotEdge(e)&&(d.isFront(e)?e.outrec.frontEdge=null:e.outrec.backEdge=null,e.outrec=null),this.deleteFromAEL(e)),n;let s=d.getMaximaPair(e);if(s===null)return n;for(this.isJoined(e)&&this.split(e,e.top),this.isJoined(s)&&this.split(s,s.top);n!==s;)this.intersectEdges(e,n,e.top),this.swapPositionsInAEL(e,n),n=e.nextInAEL;return d.isOpen(e)?(d.isHotEdge(e)&&this.addLocalMaxPoly(e,s,e.top),this.deleteFromAEL(s),this.deleteFromAEL(e),t!==null?t.nextInAEL:this.actives):(d.isHotEdge(e)&&this.addLocalMaxPoly(e,s,e.top),this.deleteFromAEL(e),this.deleteFromAEL(s),t!==null?t.nextInAEL:this.actives)}updateEdgeIntoAEL(e){if(e.bot=e.top,e.vertexTop=d.nextVertex(e),e.top=e.vertexTop.pt,e.curX=e.bot.x,d.setDx(e),this.isJoined(e)&&this.split(e,e.bot),d.isHorizontal(e)){d.openPathsEnabled?d.isOpen(e)||this.trimHorz(e,this.preserveCollinear):this.trimHorz(e,this.preserveCollinear);return}this.insertScanline(e.top.y),this.checkJoinLeft(e,e.bot),this.checkJoinRight(e,e.bot,!0)}trimHorz(e,t){let n=!1,s=d.nextVertex(e).pt;for(;s.y===e.top.y&&!(t&&s.x<e.top.x!=e.bot.x<e.top.x||(e.vertexTop=d.nextVertex(e),e.top=s,n=!0,d.isMaximaVertex(e.vertexTop)));)s=d.nextVertex(e).pt;n&&d.setDx(e)}addToHorzSegList(e){e.outrec.isOpen||this.horzSegList.push(new ir(e))}addNewIntersectNode(e,t,n){let s=z.getLineIntersectPt(e.bot,e.top,t.bot,t.top);if(s===null&&(s={x:e.curX,y:n}),s.y>this.currentBotY||s.y<n){let o=Math.abs(e.dx),a=Math.abs(t.dx);o>100&&a>100?o>a?s=z.getClosestPtOnSegment(s,e.bot,e.top):s=z.getClosestPtOnSegment(s,t.bot,t.top):o>100?s=z.getClosestPtOnSegment(s,e.bot,e.top):a>100?s=z.getClosestPtOnSegment(s,t.bot,t.top):(s.y<n?s.y=n:s.y=this.currentBotY,o<a?s.x=d.topX(e,s.y):s.x=d.topX(t,s.y))}let i=_n(s,e,t);this.intersectList.push(i)}extractFromSEL(e){let t=e.nextInSEL;return t!==null&&(t.prevInSEL=e.prevInSEL),e.prevInSEL.nextInSEL=t,t}insert1Before2InSEL(e,t){e.prevInSEL=t.prevInSEL,e.prevInSEL!==null&&(e.prevInSEL.nextInSEL=e),e.nextInSEL=t,t.prevInSEL=e}getCurrYMaximaVertexOpen(e){let t=e.vertexTop;if(e.windDx>0)for(;t.next.pt.y===t.pt.y&&(t.flags&(Z.OpenEnd|Z.LocalMax))===Z.None;)t=t.next;else for(;t.prev.pt.y===t.pt.y&&(t.flags&(Z.OpenEnd|Z.LocalMax))===Z.None;)t=t.prev;return d.isMaximaVertex(t)||(t=null),t}getCurrYMaximaVertex(e){let t=e.vertexTop;if(e.windDx>0)for(;t.next.pt.y===t.pt.y;)t=t.next;else for(;t.prev.pt.y===t.pt.y;)t=t.prev;return d.isMaximaVertex(t)||(t=null),t}resetHorzDirection(e,t){if(e.bot.x===e.top.x){let n=e.curX,s=e.curX,i=e.nextInAEL;for(;i!==null&&i.vertexTop!==t;)i=i.nextInAEL;return{isLeftToRight:i!==null,leftX:n,rightX:s}}return e.curX<e.top.x?{isLeftToRight:!0,leftX:e.curX,rightX:e.top.x}:{isLeftToRight:!1,leftX:e.top.x,rightX:e.curX}}getLastOp(e){let t=e.outrec;return e===t.frontEdge?t.pts:t.pts.next}insertLeftEdge(e){if(this.actives===null)e.prevInAEL=null,e.nextInAEL=null,this.actives=e;else if(!this.isValidAelOrder(this.actives,e))e.prevInAEL=null,e.nextInAEL=this.actives,this.actives.prevInAEL=e,this.actives=e;else{let t=this.actives;for(;t.nextInAEL!==null&&this.isValidAelOrder(t.nextInAEL,e);)t=t.nextInAEL;t.joinWith===xe.Right&&(t=t.nextInAEL),e.nextInAEL=t.nextInAEL,t.nextInAEL!==null&&(t.nextInAEL.prevInAEL=e),e.prevInAEL=t,t.nextInAEL=e}}insertRightEdge(e,t){t.nextInAEL=e.nextInAEL,e.nextInAEL!==null&&(e.nextInAEL.prevInAEL=t),t.prevInAEL=e,e.nextInAEL=t}setWindCountForOpenPathEdge(e){let t=this.actives;if(this.fillrule===V.EvenOdd){let n=0,s=0;for(;t!==e;)d.getPolyType(t)===me.Clip?s++:d.isOpen(t)||n++,t=t.nextInAEL;e.windCount=d.isOdd(n)?1:0,e.windCount2=d.isOdd(s)?1:0}else for(;t!==e;)d.getPolyType(t)===me.Clip?e.windCount2+=t.windDx:d.isOpen(t)||(e.windCount+=t.windDx),t=t.nextInAEL}setWindCountForClosedPathEdge(e){let t=e.prevInAEL,n=d.getPolyType(e);if(!d.openPathsEnabled){for(;t!==null&&d.getPolyType(t)!==n;)t=t.prevInAEL;if(t===null?(e.windCount=e.windDx,t=this.actives):this.fillrule===V.EvenOdd?(e.windCount=e.windDx,e.windCount2=t.windCount2,t=t.nextInAEL):(t.windCount*t.windDx<0?Math.abs(t.windCount)>1?t.windDx*e.windDx<0?e.windCount=t.windCount:e.windCount=t.windCount+e.windDx:e.windCount=e.windDx:t.windDx*e.windDx<0?e.windCount=t.windCount:e.windCount=t.windCount+e.windDx,e.windCount2=t.windCount2,t=t.nextInAEL),this.fillrule===V.EvenOdd)for(;t!==e;)d.getPolyType(t)!==n&&(e.windCount2=e.windCount2===0?1:0),t=t.nextInAEL;else for(;t!==e;)d.getPolyType(t)!==n&&(e.windCount2+=t.windDx),t=t.nextInAEL;return}for(;t!==null&&(d.getPolyType(t)!==n||d.isOpen(t));)t=t.prevInAEL;if(t===null?(e.windCount=e.windDx,t=this.actives):this.fillrule===V.EvenOdd?(e.windCount=e.windDx,e.windCount2=t.windCount2,t=t.nextInAEL):(t.windCount*t.windDx<0?Math.abs(t.windCount)>1?t.windDx*e.windDx<0?e.windCount=t.windCount:e.windCount=t.windCount+e.windDx:e.windCount=d.isOpen(e)?1:e.windDx:t.windDx*e.windDx<0?e.windCount=t.windCount:e.windCount=t.windCount+e.windDx,e.windCount2=t.windCount2,t=t.nextInAEL),this.fillrule===V.EvenOdd)for(;t!==e;)d.getPolyType(t)!==n&&!d.isOpen(t)&&(e.windCount2=e.windCount2===0?1:0),t=t.nextInAEL;else for(;t!==e;)d.getPolyType(t)!==n&&!d.isOpen(t)&&(e.windCount2+=t.windDx),t=t.nextInAEL}isContributingOpen(e){let t,n;switch(this.fillrule){case V.Positive:n=e.windCount>0,t=e.windCount2>0;break;case V.Negative:n=e.windCount<0,t=e.windCount2<0;break;default:n=e.windCount!==0,t=e.windCount2!==0;break}switch(this.cliptype){case j.Intersection:return t;case j.Union:return!n&&!t;default:return!t}}isContributingClosed(e){switch(this.fillrule){case V.Positive:if(e.windCount!==1)return!1;break;case V.Negative:if(e.windCount!==-1)return!1;break;case V.NonZero:if(Math.abs(e.windCount)!==1)return!1;break}switch(this.cliptype){case j.Intersection:return this.fillrule===V.Positive?e.windCount2>0:this.fillrule===V.Negative?e.windCount2<0:e.windCount2!==0;case j.Union:return this.fillrule===V.Positive?e.windCount2<=0:this.fillrule===V.Negative?e.windCount2>=0:e.windCount2===0;case j.Difference:{let t=this.fillrule===V.Positive?e.windCount2<=0:this.fillrule===V.Negative?e.windCount2>=0:e.windCount2===0;return d.getPolyType(e)===me.Subject?t:!t}case j.Xor:return!0;default:return!1}}addLocalMinPoly(e,t,n,s=!1){let i=this.newOutRec();if(e.outrec=i,t.outrec=i,d.isOpen(e))i.owner=null,i.isOpen=!0,e.windDx>0?this.setSides(i,e,t):this.setSides(i,t,e);else{i.isOpen=!1;let a=d.getPrevHotEdge(e);a!==null?(this.usingPolytree&&this.setOwner(i,a.outrec),i.owner=a.outrec,this.outrecIsAscending(a)===s?this.setSides(i,t,e):this.setSides(i,e,t)):(i.owner=null,s?this.setSides(i,e,t):this.setSides(i,t,e))}let o=new We(n,i);return i.pts=o,o}outrecIsAscending(e){return e===e.outrec.frontEdge}newOutRec(){let e=new sr;return e.idx=this.outrecList.length,this.outrecList.push(e),e}startOpenPath(e,t){let n=this.newOutRec();n.isOpen=!0,e.windDx>0?(n.frontEdge=e,n.backEdge=null):(n.frontEdge=null,n.backEdge=e),e.outrec=n;let s=new We(t,n);return n.pts=s,s}checkJoinLeft(e,t,n=!1){let s=e.prevInAEL;s!==null&&(!n&&e.curX!==s.curX||!d.isHotEdge(e)||!d.isHotEdge(s)||d.isHorizontal(e)||d.isHorizontal(s)||d.isOpen(e)||d.isOpen(s)||(t.y<e.top.y+2||t.y<s.top.y+2)&&(e.bot.y>t.y||s.bot.y>t.y)||n&&this.perpendicDistFromLineSqrdGreaterThanQuarter(t,s.bot,s.top)||z.isCollinear(e.top,t,s.top)&&(e.outrec.idx===s.outrec.idx?this.addLocalMaxPoly(s,e,t):e.outrec.idx<s.outrec.idx?this.joinOutrecPaths(e,s):this.joinOutrecPaths(s,e),s.joinWith=xe.Right,e.joinWith=xe.Left))}checkJoinRight(e,t,n=!1){let s=e.nextInAEL;s!==null&&(!n&&e.curX!==s.curX||!d.isHotEdge(e)||!d.isHotEdge(s)||d.isHorizontal(e)||d.isHorizontal(s)||d.isOpen(e)||d.isOpen(s)||(t.y<e.top.y+2||t.y<s.top.y+2)&&(e.bot.y>t.y||s.bot.y>t.y)||n&&this.perpendicDistFromLineSqrdGreaterThanQuarter(t,s.bot,s.top)||z.isCollinear(e.top,t,s.top)&&(e.outrec.idx===s.outrec.idx?this.addLocalMaxPoly(e,s,t):e.outrec.idx<s.outrec.idx?this.joinOutrecPaths(e,s):this.joinOutrecPaths(s,e),e.joinWith=xe.Right,s.joinWith=xe.Left))}perpendicDistFromLineSqrdGreaterThanQuarter(e,t,n){let s=e.x-t.x,i=e.y-t.y,o=n.x-t.x,a=n.y-t.y;if(o===0&&a===0)return!1;let u=z.maxCoordForSafeCrossSq;if(Math.abs(s)<u&&Math.abs(i)<u&&Math.abs(o)<u&&Math.abs(a)<u){let f=s*a-o*i;return f*f/(o*o+a*a)>.25}if(Number.isSafeInteger(s)&&Number.isSafeInteger(i)&&Number.isSafeInteger(o)&&Number.isSafeInteger(a)){let f=BigInt(s)*BigInt(a)-BigInt(o)*BigInt(i),c=f*f,h=BigInt(o)*BigInt(o)+BigInt(a)*BigInt(a);return Zn*c>h}let l=s*a-o*i;return l*l/(o*o+a*a)>.25}intersectEdges(e,t,n){let s;if(this.hasOpenPaths&&(d.isOpen(e)||d.isOpen(t))){if(d.isOpen(e)&&d.isOpen(t))return;if(d.isOpen(t)){let l=e;e=t,t=l}if(this.isJoined(t)&&this.split(t,n),this.cliptype===j.Union){if(!d.isHotEdge(t))return}else if(t.localMin.polytype===me.Subject)return;switch(this.fillrule){case V.Positive:if(t.windCount!==1)return;break;case V.Negative:if(t.windCount!==-1)return;break;default:if(Math.abs(t.windCount)!==1)return;break}if(d.isHotEdge(e))s=this.addOutPt(e,n),this.setZ(e,t,s.pt),d.isFront(e)?e.outrec.frontEdge=null:e.outrec.backEdge=null,e.outrec=null;else if(n.x===e.localMin.vertex.pt.x&&n.y===e.localMin.vertex.pt.y&&!d.isOpenEndVertex(e.localMin.vertex)){let l=this.findEdgeWithMatchingLocMin(e);if(l!==null&&d.isHotEdge(l)){e.outrec=l.outrec,e.windDx>0?this.setSides(l.outrec,e,l):this.setSides(l.outrec,l,e);return}s=this.startOpenPath(e,n)}else s=this.startOpenPath(e,n);this.setZ(e,t,s.pt);return}this.isJoined(e)&&this.split(e,n),this.isJoined(t)&&this.split(t,n);let i,o;switch(e.localMin.polytype===t.localMin.polytype?this.fillrule===V.EvenOdd?(i=e.windCount,e.windCount=t.windCount,t.windCount=i):(e.windCount+t.windDx===0?e.windCount=-e.windCount:e.windCount+=t.windDx,t.windCount-e.windDx===0?t.windCount=-t.windCount:t.windCount-=e.windDx):(this.fillrule!==V.EvenOdd?e.windCount2+=t.windDx:e.windCount2=e.windCount2===0?1:0,this.fillrule!==V.EvenOdd?t.windCount2-=e.windDx:t.windCount2=t.windCount2===0?1:0),this.fillrule){case V.Positive:i=e.windCount,o=t.windCount;break;case V.Negative:i=-e.windCount,o=-t.windCount;break;default:i=Math.abs(e.windCount),o=Math.abs(t.windCount);break}let a=i===0||i===1,u=o===0||o===1;if(!(!d.isHotEdge(e)&&!a||!d.isHotEdge(t)&&!u))if(d.isHotEdge(e)&&d.isHotEdge(t))if(i!==0&&i!==1||o!==0&&o!==1||e.localMin.polytype!==t.localMin.polytype&&this.cliptype!==j.Xor)s=this.addLocalMaxPoly(e,t,n),s&&this.setZ(e,t,s.pt);else if(d.isFront(e)||e.outrec===t.outrec){s=this.addLocalMaxPoly(e,t,n),s&&this.setZ(e,t,s.pt);let l=this.addLocalMinPoly(e,t,n);this.setZ(e,t,l.pt)}else{s=this.addOutPt(e,n),this.setZ(e,t,s.pt);let l=this.addOutPt(t,n);this.setZ(e,t,l.pt),this.swapOutrecs(e,t)}else if(d.isHotEdge(e))s=this.addOutPt(e,n),this.setZ(e,t,s.pt),this.swapOutrecs(e,t);else if(d.isHotEdge(t))s=this.addOutPt(t,n),this.setZ(e,t,s.pt),this.swapOutrecs(e,t);else{let l,f;switch(this.fillrule){case V.Positive:l=e.windCount2,f=t.windCount2;break;case V.Negative:l=-e.windCount2,f=-t.windCount2;break;default:l=Math.abs(e.windCount2),f=Math.abs(t.windCount2);break}if(!d.isSamePolyType(e,t))s=this.addLocalMinPoly(e,t,n),this.setZ(e,t,s.pt);else if(i===1&&o===1){switch(s=null,this.cliptype){case j.Union:if(l>0&&f>0)return;s=this.addLocalMinPoly(e,t,n);break;case j.Difference:(d.getPolyType(e)===me.Clip&&l>0&&f>0||d.getPolyType(e)===me.Subject&&l<=0&&f<=0)&&(s=this.addLocalMinPoly(e,t,n));break;case j.Xor:s=this.addLocalMinPoly(e,t,n);break;default:if(l<=0||f<=0)return;s=this.addLocalMinPoly(e,t,n);break}s&&this.setZ(e,t,s.pt)}}}swapPositionsInAEL(e,t){let n=t.nextInAEL;n!==null&&(n.prevInAEL=e);let s=e.prevInAEL;s!==null&&(s.nextInAEL=t),t.prevInAEL=s,t.nextInAEL=e,e.prevInAEL=t,e.nextInAEL=n,t.prevInAEL===null&&(this.actives=t)}isValidAelOrder(e,t){if(t.curX!==e.curX)return t.curX>e.curX;let n=z.crossProductSign(e.top,t.bot,t.top);if(n!==0)return n<0;if(!d.isMaximaEdge(e)&&e.top.y>t.top.y)return z.crossProductSign(t.bot,e.top,d.nextVertex(e).pt)<=0;if(!d.isMaximaEdge(t)&&t.top.y>e.top.y)return z.crossProductSign(t.bot,t.top,d.nextVertex(t).pt)>=0;let s=t.bot.y,i=t.isLeftBound;return e.bot.y!==s||e.localMin.vertex.pt.y!==s?t.isLeftBound:e.isLeftBound!==i?i:z.isCollinear(d.prevPrevVertex(e).pt,e.bot,e.top)?!0:z.crossProductSign(d.prevPrevVertex(e).pt,t.bot,d.prevPrevVertex(t).pt)>0===i}isJoined(e){return e.joinWith!==xe.None}split(e,t){e.joinWith===xe.Right?(e.joinWith=xe.None,e.nextInAEL.joinWith=xe.None,this.addLocalMinPoly(e,e.nextInAEL,t,!0)):(e.joinWith=xe.None,e.prevInAEL.joinWith=xe.None,this.addLocalMinPoly(e.prevInAEL,e,t,!0))}setSides(e,t,n){e.frontEdge=t,e.backEdge=n}findEdgeWithMatchingLocMin(e){let t=e.nextInAEL;for(;t!==null;){if(t.localMin?.equals(e.localMin))return t;!d.isHorizontal(t)&&!(e.bot.x===t.bot.x&&e.bot.y===t.bot.y)?t=null:t=t.nextInAEL}for(t=e.prevInAEL;t!==null;){if(t.localMin?.equals(e.localMin))return t;if(!d.isHorizontal(t)&&!(e.bot.x===t.bot.x&&e.bot.y===t.bot.y))return null;t=t.prevInAEL}return t}addOutPt(e,t){let n=e.outrec,s=d.isFront(e),i=n.pts,o=i.next;if(s&&t.x===i.pt.x&&t.y===i.pt.y)return i;if(!s&&t.x===o.pt.x&&t.y===o.pt.y)return o;let a=new We(t,n);return o.prev=a,a.prev=i,a.next=o,i.next=a,s&&(n.pts=a),a}addLocalMaxPoly(e,t,n){if(this.isJoined(e)&&this.split(e,n),this.isJoined(t)&&this.split(t,n),d.isFront(e)===d.isFront(t))if(d.isOpenEnd(e))this.swapFrontBackSides(e.outrec);else if(d.isOpenEnd(t))this.swapFrontBackSides(t.outrec);else return this.succeeded=!1,null;let s=this.addOutPt(e,n);if(e.outrec===t.outrec){let i=e.outrec;if(i.pts=s,this.usingPolytree){let o=d.getPrevHotEdge(e);o===null?i.owner=null:this.setOwner(i,o.outrec)}this.uncoupleOutRec(e)}else d.isOpen(e)?e.windDx<0?this.joinOutrecPaths(e,t):this.joinOutrecPaths(t,e):e.outrec.idx<t.outrec.idx?this.joinOutrecPaths(e,t):this.joinOutrecPaths(t,e);return s}swapFrontBackSides(e){let t=e.frontEdge;e.frontEdge=e.backEdge,e.backEdge=t,e.pts=e.pts.next}setOwner(e,t){for(;t.owner!==null&&t.owner.pts===null;)t.owner=t.owner.owner;let n=t;for(;n!==null&&n!==e;)n=n.owner;n!==null&&(t.owner=e.owner),e.owner=t}uncoupleOutRec(e){let t=e.outrec;t!==null&&(t.frontEdge.outrec=null,t.backEdge.outrec=null,t.frontEdge=null,t.backEdge=null)}joinOutrecPaths(e,t){let n=e.outrec.pts,s=t.outrec.pts,i=n.next,o=s.next;d.isFront(e)?(o.prev=n,n.next=o,s.next=i,i.prev=s,e.outrec.pts=s,e.outrec.frontEdge=t.outrec.frontEdge,e.outrec.frontEdge!==null&&(e.outrec.frontEdge.outrec=e.outrec)):(i.prev=s,s.next=i,n.next=o,o.prev=n,e.outrec.backEdge=t.outrec.backEdge,e.outrec.backEdge!==null&&(e.outrec.backEdge.outrec=e.outrec)),t.outrec.frontEdge=null,t.outrec.backEdge=null,t.outrec.pts=null,this.setOwner(t.outrec,e.outrec),d.isOpenEnd(e)&&(t.outrec.pts=e.outrec.pts,e.outrec.pts=null),e.outrec=null,t.outrec=null}swapOutrecs(e,t){let n=e.outrec,s=t.outrec;if(n===s){let i=n.frontEdge;n.frontEdge=n.backEdge,n.backEdge=i;return}n!==null&&(e===n.frontEdge?n.frontEdge=t:n.backEdge=t),s!==null&&(t===s.frontEdge?s.frontEdge=e:s.backEdge=e),e.outrec=s,t.outrec=n}disposeIntersectNodes(){this.intersectList.length=0}static ptsReallyClose(e,t){return Math.abs(e.x-t.x)<2&&Math.abs(e.y-t.y)<2}static isVerySmallTriangle(e){return e.next.next===e.prev&&(d.ptsReallyClose(e.prev.pt,e.next.pt)||d.ptsReallyClose(e.pt,e.next.pt)||d.ptsReallyClose(e.pt,e.prev.pt))}static buildPath(e,t,n,s){if(e===null||e.next===e||!n&&e.next===e.prev)return!1;s.length=0;let i,o;for(t?(i=e.pt,o=e.prev):(e=e.next,i=e.pt,o=e.next),s.push(i);o!==e;)o.pt.x===i.x&&o.pt.y===i.y||(i=o.pt,s.push(i)),t?o=o.prev:o=o.next;return s.length!==3||n||!d.isVerySmallTriangle(o)}buildPaths(e,t){e.length=0,t.length=0;let n=0;for(;n<this.outrecList.length;){let s=this.outrecList[n++];if(s.pts===null)continue;let i=[];s.isOpen?d.buildPath(s.pts,this.reverseSolution,!0,i)&&t.push(i):(this.cleanCollinear(s),d.buildPath(s.pts,this.reverseSolution,!1,i)&&e.push(i))}return!0}buildTree(e,t){e.clear(),t.length=0;let n=0;for(;n<this.outrecList.length;){let s=this.outrecList[n++];if(s.pts!==null){if(s.isOpen){let i=[];d.buildPath(s.pts,this.reverseSolution,!0,i)&&t.push(i);continue}this.checkBounds(s)&&this.recursiveCheckOwners(s,e)}}}checkBounds(e){return e.pts===null?!1:ut.isEmpty(e.bounds)?(this.cleanCollinear(e),e.pts===null||!d.buildPath(e.pts,this.reverseSolution,!1,e.path)?!1:(e.bounds=z.getBounds(e.path),!0)):!0}recursiveCheckOwners(e,t){if(!(e.polypath!==null||ut.isEmpty(e.bounds))){for(;e.owner!==null&&!(e.owner.splits!==null&&this.checkSplitOwner(e,e.owner.splits)||e.owner.pts!==null&&this.checkBounds(e.owner)&&this.containsRect(e.owner.bounds,e.bounds)&&this.path1InsidePath2(e.pts,e.owner.pts));)e.owner=e.owner.owner;e.owner!==null?(e.owner.polypath===null&&this.recursiveCheckOwners(e.owner,t),e.polypath=e.owner.polypath.addChild(e.path)):e.polypath=t.addChild(e.path)}}cleanCollinear(e){if(e=this.getRealOutRec(e),e===null||e.isOpen)return;if(!this.isValidClosedPath(e.pts)){e.pts=null;return}let t=e.pts,n=t;for(;;){if(n!==null&&z.isCollinear(n.prev.pt,n.pt,n.next.pt)&&(n.pt.x===n.prev.pt.x&&n.pt.y===n.prev.pt.y||n.pt.x===n.next.pt.x&&n.pt.y===n.next.pt.y||!this.preserveCollinear||z.dotProductSign(n.prev.pt,n.pt,n.next.pt)<0)){if(n===e.pts&&(e.pts=n.prev),n=this.disposeOutPt(n),!this.isValidClosedPath(n)){e.pts=null;return}t=n;continue}if(n===null||(n=n.next,n===t))break}this.fixSelfIntersects(e)}isValidClosedPath(e){return e!==null&&e.next!==e&&(e.next!==e.prev||!d.isVerySmallTriangle(e))}disposeOutPt(e){let t=e.next===e?null:e.next;return e.prev.next=e.next,e.next.prev=e.prev,t}fixSelfIntersects(e){let t=e.pts;if(t.prev!==t.next.next)for(;;){if(t.next&&t.next.next&&this.boundingBoxesOverlap(t.prev.pt,t.pt,t.next.pt,t.next.next.pt)&&z.segsIntersect(t.prev.pt,t.pt,t.next.pt,t.next.next.pt)){if((t===e.pts||t.next===e.pts)&&(e.pts=e.pts.prev),this.doSplitOp(e,t),e.pts===null)return;if(t=e.pts,t.prev===t.next.next)break;continue}if(t=t.next,t===e.pts)break}}doSplitOp(e,t){let n=t.prev,s=t.next.next;e.pts=n;let i=z.getLineIntersectPt(n.pt,t.pt,t.next.pt,s.pt);this.zCallbackInternal&&this.zCallbackInternal(n.pt,t.pt,t.next.pt,s.pt,i);let o=d.areaOutPt(n),a=o<Mt?-o:o;if(a<Zn){e.pts=null;return}let u=this.areaTriangle(i,t.pt,t.next.pt),l=u<Mt?-u:u;if(i.x===n.pt.x&&i.y===n.pt.y||i.x===s.pt.x&&i.y===s.pt.y)s.prev=n,n.next=s;else{let h=new We(i,e);h.prev=n,h.next=s,s.prev=h,n.next=h}if(!(l>Oo)||!(l>a)&&u>Mt!=o>Mt)return;let f=this.newOutRec();f.owner=e.owner,t.outrec=f,t.next.outrec=f;let c=new We(i,f);c.prev=t.next,c.next=t,f.pts=c,t.prev=c,t.next.next=c,this.usingPolytree&&(this.path1InsidePath2(n,c)?(f.splits===null&&(f.splits=[]),f.splits.push(e.idx)):(e.splits===null&&(e.splits=[]),e.splits.push(f.idx)))}static areaOutPt(e){let t=z.maxCoordForSafeAreaProduct,n=0,s=!0,i=e;do{let a=i.prev,u=i.pt;if(Math.abs(a.pt.x)>=t||Math.abs(a.pt.y)>=t||Math.abs(u.x)>=t||Math.abs(u.y)>=t){s=!1;break}n+=(a.pt.y+u.y)*(a.pt.x-u.x),i=i.next}while(i!==e);if(s)return BigInt(Math.round(n));let o=Mt;i=e;do{let a=i.prev;if(Number.isSafeInteger(a.pt.y)&&Number.isSafeInteger(i.pt.y)&&Number.isSafeInteger(a.pt.x)&&Number.isSafeInteger(i.pt.x)){let u=BigInt(a.pt.y)+BigInt(i.pt.y),l=BigInt(a.pt.x)-BigInt(i.pt.x);o+=u*l}else{let u=a.pt.y+i.pt.y,l=a.pt.x-i.pt.x;o+=BigInt(Math.round(u*l))}i=i.next}while(i!==e);return o}areaTriangle(e,t,n){let s=z.maxCoordForSafeAreaProduct;if(Math.abs(e.x)<s&&Math.abs(e.y)<s&&Math.abs(t.x)<s&&Math.abs(t.y)<s&&Math.abs(n.x)<s&&Math.abs(n.y)<s){let o=(n.y+e.y)*(n.x-e.x)+(e.y+t.y)*(e.x-t.x)+(t.y+n.y)*(t.x-n.x);return BigInt(Math.round(o))}if(Number.isSafeInteger(e.x)&&Number.isSafeInteger(e.y)&&Number.isSafeInteger(t.x)&&Number.isSafeInteger(t.y)&&Number.isSafeInteger(n.x)&&Number.isSafeInteger(n.y)){let o=(BigInt(n.y)+BigInt(e.y))*(BigInt(n.x)-BigInt(e.x)),a=(BigInt(e.y)+BigInt(t.y))*(BigInt(e.x)-BigInt(t.x)),u=(BigInt(t.y)+BigInt(n.y))*(BigInt(t.x)-BigInt(n.x));return o+a+u}let i=(n.y+e.y)*(n.x-e.x)+(e.y+t.y)*(e.x-t.x)+(t.y+n.y)*(t.x-n.x);return BigInt(Math.round(i))}isValidOwner(e,t){for(;t!==null&&t!==e;)t=t.owner;return t===null}containsRect(e,t){return t.left>=e.left&&t.right<=e.right&&t.top>=e.top&&t.bottom<=e.bottom}checkSplitOwner(e,t){for(let n=0;n<t.length;n++){let s=this.outrecList[t[n]];if(s.pts===null&&s.splits!==null&&this.checkSplitOwner(e,s.splits))return!0;if(s=this.getRealOutRec(s),!(s===null||s===e||s.recursiveSplit===e)){if(s.recursiveSplit=e,s.splits!==null&&this.checkSplitOwner(e,s.splits))return!0;if(!(!this.checkBounds(s)||!this.containsRect(s.bounds,e.bounds)||!this.path1InsidePath2(e.pts,s.pts)))return this.isValidOwner(e,s)||(s.owner=e.owner),e.owner=s,!0}}return!1}};b(d,"openPathsEnabled",!0);var ur=d,Oe=class extends ur{constructor(){super(...arguments);b(this,"zCallback")}getZCallback(){return this.zCallback}addPath(t,n,s=!1){super.addPath(t,n,s)}addReuseableData(t){super.addReuseableData(t)}addPaths(t,n,s=!1){super.addPaths(t,n,s)}addSubject(t){this.addPaths(t,me.Subject)}addOpenSubject(t){this.addPaths(t,me.Subject,!0)}addClip(t){this.addPaths(t,me.Clip)}execute(t,n,s,i){if(Array.isArray(s)){let o=s,a=i;o.length=0,a&&(a.length=0);try{this.executeInternal(t,n),this.buildPaths(o,a||[])}catch{this.succeeded=!1}return this.clearSolutionOnly(),this.succeeded}else{let o=s,a=i;o.clear(),a&&(a.length=0),this.usingPolytree=!0;try{this.executeInternal(t,n),this.buildTree(o,a||[])}catch{this.succeeded=!1}return this.clearSolutionOnly(),this.succeeded}}};var Zr={area(r){return z.area(r)},areaD(r){let e=0,t=r.length;if(t<3)return 0;let n=r[t-1];for(let s of r)e+=(n.y+s.y)*(n.x-s.x),n=s;return e*.5},scalePath64(r,e){let t=z.maxSafeCoordinateForScale(e),n=[];for(let s of r)z.checkSafeScaleValue(s.x,t,"scalePath64"),z.checkSafeScaleValue(s.y,t,"scalePath64"),n.push({x:Math.round(s.x*e),y:Math.round(s.y*e)});return n},scalePaths64(r,e){let t=[];for(let n of r)t.push(Zr.scalePath64(n,e));return t},scalePathD(r,e){let t=[];for(let n of r)t.push({x:n.x*e,y:n.y*e});return t},scalePathsD(r,e){let t=[];for(let n of r)t.push(Zr.scalePathD(n,e));return t}};var ye;(function(r){r[r.Miter=0]="Miter",r[r.Square=1]="Square",r[r.Bevel=2]="Bevel",r[r.Round=3]="Round"})(ye||(ye={}));var ne;(function(r){r[r.Polygon=0]="Polygon",r[r.Joined=1]="Joined",r[r.Butt=2]="Butt",r[r.Square=3]="Square",r[r.Round=4]="Round"})(ne||(ne={}));var _r=class{constructor(e,t,n=ne.Polygon){b(this,"inPaths");b(this,"joinType");b(this,"endType");b(this,"pathsReversed");b(this,"lowestPathIdx");this.joinType=t,this.endType=n;let s=n===ne.Polygon||n===ne.Joined;this.inPaths=[];for(let i of e)this.inPaths.push(lt.stripDuplicates(i,s));if(n===ne.Polygon){let i=lt.getLowestPathInfo(this.inPaths);this.lowestPathIdx=i.idx,this.pathsReversed=this.lowestPathIdx>=0&&i.isNegArea}else this.lowestPathIdx=-1,this.pathsReversed=!1}},re=class re{constructor(e=2,t=0,n=!1,s=!1){b(this,"groupList",[]);b(this,"pathOut",[]);b(this,"normals",[]);b(this,"solution",[]);b(this,"solutionTree",null);b(this,"groupDelta",0);b(this,"delta",0);b(this,"mitLimSqr",0);b(this,"stepsPerRad",0);b(this,"stepSin",0);b(this,"stepCos",0);b(this,"joinType",ye.Bevel);b(this,"endType",ne.Polygon);b(this,"arcTolerance",0);b(this,"mergeGroups",!0);b(this,"miterLimit",2);b(this,"preserveCollinear",!1);b(this,"reverseSolution",!1);b(this,"zCallback");b(this,"deltaCallback",null);b(this,"ZCB",(e,t,n,s,i)=>{(e.z||0)!==0&&(e.z===n.z||e.z===s.z)?i.z=e.z:(n.z||0)!==0&&n.z===t.z?i.z=n.z:(t.z||0)!==0&&t.z===s.z?i.z=t.z:this.zCallback&&this.zCallback(e,t,n,s,i)});this.miterLimit=e,this.arcTolerance=t,this.mergeGroups=!0,this.preserveCollinear=n,this.reverseSolution=s}clear(){this.groupList.length=0}addPath(e,t,n){if(e.length===0)return;let s=[e];this.addPaths(s,t,n)}addPaths(e,t,n){e.length!==0&&this.groupList.push(new _r(e,t,n))}calcSolutionCapacity(){let e=0;for(let t of this.groupList)e+=t.endType===ne.Joined?t.inPaths.length*2:t.inPaths.length;return e}checkPathsReversed(){let e=!1;for(let t of this.groupList)if(t.endType===ne.Polygon){e=t.pathsReversed;break}return e}executeInternal(e){if(this.groupList.length===0)return;if(Math.abs(e)<.5){for(let i of this.groupList)for(let o of i.inPaths)this.solution.push(o);return}this.delta=e,this.mitLimSqr=this.miterLimit<=1?2:2/re.sqr(this.miterLimit);for(let i of this.groupList)this.doGroupOffset(i);if(this.groupList.length===0)return;let t=this.checkPathsReversed(),n=t?V.Negative:V.Positive,s=new Oe;s.preserveCollinear=this.preserveCollinear,s.reverseSolution=this.reverseSolution!==t,s.zCallback=this.ZCB,s.addSubject(this.solution),this.solutionTree!==null?s.execute(j.Union,n,this.solutionTree):s.execute(j.Union,n,this.solution)}execute(e,t){if(Array.isArray(t)){let n=t;n.length=0,this.solution=n,this.executeInternal(e)}else{let n=t;n.clear(),this.solutionTree=n,this.solution=[],this.executeInternal(e)}}executeWithCallback(e,t){this.deltaCallback=e,this.execute(1,t)}static getUnitNormal(e,t){let n=t.x-e.x,s=t.y-e.y;if(n===0&&s===0)return{x:0,y:0};let i=1/Math.sqrt(n*n+s*s);return{x:s*i,y:-n*i}}static getLowestPathInfo(e){let t=-1,n=!1,s={x:Number.MAX_SAFE_INTEGER,y:Number.MIN_SAFE_INTEGER};for(let i=0;i<e.length;++i){let o=Number.MAX_VALUE;for(let a of e[i])if(!(a.y<s.y||a.y===s.y&&a.x>=s.x)){if(o===Number.MAX_VALUE){if(o=re.area(e[i]),o===0)break;n=o<0}t=i,s.x=a.x,s.y=a.y}}return{idx:t,isNegArea:n}}static translatePoint(e,t,n){return{x:e.x+t,y:e.y+n,z:e.z}}static reflectPoint(e,t){return{x:t.x+(t.x-e.x),y:t.y+(t.y-e.y),z:e.z}}static almostZero(e,t=.001){return Math.abs(e)<t}static hypotenuse(e,t){return Math.sqrt(e*e+t*t)}static normalizeVector(e){let t=re.hypotenuse(e.x,e.y);if(re.almostZero(t))return{x:0,y:0};let n=1/t;return{x:e.x*n,y:e.y*n}}static getAvgUnitVector(e,t){return re.normalizeVector({x:e.x+t.x,y:e.y+t.y})}static intersectPoint(e,t,n,s){if(z.isAlmostZero(e.x-t.x)){if(z.isAlmostZero(n.x-s.x))return{x:0,y:0};let i=(s.y-n.y)/(s.x-n.x),o=n.y-i*n.x;return{x:e.x,y:i*e.x+o}}if(z.isAlmostZero(n.x-s.x)){let i=(t.y-e.y)/(t.x-e.x),o=e.y-i*e.x;return{x:n.x,y:i*n.x+o}}else{let i=(t.y-e.y)/(t.x-e.x),o=e.y-i*e.x,a=(s.y-n.y)/(s.x-n.x),u=n.y-a*n.x;if(z.isAlmostZero(i-a))return{x:0,y:0};let l=(u-o)/(i-a);return{x:l,y:i*l+o}}}getPerpendic(e,t){return{x:Math.round(e.x+t.x*this.groupDelta),y:Math.round(e.y+t.y*this.groupDelta),z:e.z||0}}getPerpendicD(e,t){return{x:e.x+t.x*this.groupDelta,y:e.y+t.y*this.groupDelta,z:e.z||0}}doBevel(e,t,n){let s,i,o=e[t].z||0;if(t===n){let a=Math.abs(this.groupDelta);s={x:Math.round(e[t].x-a*this.normals[t].x),y:Math.round(e[t].y-a*this.normals[t].y),z:o},i={x:Math.round(e[t].x+a*this.normals[t].x),y:Math.round(e[t].y+a*this.normals[t].y),z:o}}else s={x:Math.round(e[t].x+this.groupDelta*this.normals[n].x),y:Math.round(e[t].y+this.groupDelta*this.normals[n].y),z:o},i={x:Math.round(e[t].x+this.groupDelta*this.normals[t].x),y:Math.round(e[t].y+this.groupDelta*this.normals[t].y),z:o};this.pathOut.push(s),this.pathOut.push(i)}doSquare(e,t,n){let s;t===n?s={x:this.normals[t].y,y:-this.normals[t].x}:s=re.getAvgUnitVector({x:-this.normals[n].y,y:this.normals[n].x},{x:this.normals[t].y,y:-this.normals[t].x});let i=Math.abs(this.groupDelta),o={x:e[t].x,y:e[t].y,z:e[t].z||0};o=re.translatePoint(o,i*s.x,i*s.y);let a=re.translatePoint(o,this.groupDelta*s.y,this.groupDelta*-s.x),u=re.translatePoint(o,this.groupDelta*-s.y,this.groupDelta*s.x),l=this.getPerpendicD(e[n],this.normals[n]);if(t===n){let f={x:l.x+s.x*this.groupDelta,y:l.y+s.y*this.groupDelta},c=re.intersectPoint(a,u,l,f);c.z=o.z,this.pathOut.push(He.fromPointD(re.reflectPoint(c,o))),this.pathOut.push(He.fromPointD(c))}else{let f=this.getPerpendicD(e[t],this.normals[n]),c=re.intersectPoint(a,u,l,f);c.z=o.z,this.pathOut.push(He.fromPointD(c)),this.pathOut.push(He.fromPointD(re.reflectPoint(c,o)))}}doMiter(e,t,n,s){let i=this.groupDelta/(s+1);this.pathOut.push({x:Math.round(e[t].x+(this.normals[n].x+this.normals[t].x)*i),y:Math.round(e[t].y+(this.normals[n].y+this.normals[t].y)*i),z:e[t].z||0})}doRound(e,t,n,s){if(this.deltaCallback!==null){let l=Math.abs(this.groupDelta),f=this.arcTolerance>.01?this.arcTolerance:l*re.arc_const,c=Math.PI/Math.acos(1-f/l);this.stepSin=Math.sin(2*Math.PI/c),this.stepCos=Math.cos(2*Math.PI/c),this.groupDelta<0&&(this.stepSin=-this.stepSin),this.stepsPerRad=c/(2*Math.PI)}let i=e[t],o=i.z||0,a={x:this.normals[n].x*this.groupDelta,y:this.normals[n].y*this.groupDelta};t===n&&nr.negate(a),this.pathOut.push({x:Math.round(i.x+a.x),y:Math.round(i.y+a.y),z:o});let u=Math.ceil(this.stepsPerRad*Math.abs(s));for(let l=1;l<u;l++)a={x:a.x*this.stepCos-this.stepSin*a.y,y:a.x*this.stepSin+a.y*this.stepCos},this.pathOut.push({x:Math.round(i.x+a.x),y:Math.round(i.y+a.y),z:o});this.pathOut.push(this.getPerpendic(e[t],this.normals[t]))}buildNormals(e){let t=e.length;if(this.normals.length=0,t!==0){for(let n=0;n<t-1;n++)this.normals.push(re.getUnitNormal(e[n],e[n+1]));this.normals.push(re.getUnitNormal(e[t-1],e[0]))}}offsetPoint(e,t,n,s){if(He.equals(t[n],t[s]))return;let i=z.crossProductD(this.normals[n],this.normals[s]),o=z.dotProductD(this.normals[n],this.normals[s]);if(i>1?i=1:i<-1&&(i=-1),this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(t,this.normals,n,s),e.pathsReversed&&(this.groupDelta=-this.groupDelta)),Math.abs(this.groupDelta)<re.Tolerance){this.pathOut.push(t[n]);return}if(o>-.999&&i*this.groupDelta<0)this.pathOut.push(this.getPerpendic(t[n],this.normals[s])),this.pathOut.push(t[n]),this.pathOut.push(this.getPerpendic(t[n],this.normals[n]));else if(o>.999&&this.joinType!==ye.Round)this.doMiter(t,n,s,o);else switch(this.joinType){case ye.Miter:o>this.mitLimSqr-1?this.doMiter(t,n,s,o):this.doSquare(t,n,s);break;case ye.Round:this.doRound(t,n,s,Math.atan2(i,o));break;case ye.Bevel:this.doBevel(t,n,s);break;default:this.doSquare(t,n,s);break}}offsetPolygon(e,t){this.pathOut=[];let n=t.length,s=n-1;for(let i=0;i<n;i++)this.offsetPoint(e,t,i,s),s=i;this.solution.push(this.pathOut)}offsetOpenJoined(e,t){this.offsetPolygon(e,t);let n=[...t].reverse();this.buildNormals(n),this.offsetPolygon(e,n)}offsetOpenPath(e,t){this.pathOut=[];let n=t.length-1;if(this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(t,this.normals,0,0)),Math.abs(this.groupDelta)<re.Tolerance)this.pathOut.push(t[0]);else switch(this.endType){case ne.Butt:this.doBevel(t,0,0);break;case ne.Round:this.doRound(t,0,0,Math.PI);break;default:this.doSquare(t,0,0);break}for(let s=1,i=0;s<n;s++)this.offsetPoint(e,t,s,i),i=s;for(let s=n;s>0;s--)this.normals[s]={x:-this.normals[s-1].x,y:-this.normals[s-1].y};if(this.normals[0]=this.normals[n],this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(t,this.normals,n,n)),Math.abs(this.groupDelta)<re.Tolerance)this.pathOut.push(t[n]);else switch(this.endType){case ne.Butt:this.doBevel(t,n,n);break;case ne.Round:this.doRound(t,n,n,Math.PI);break;default:this.doSquare(t,n,n);break}for(let s=n-1,i=n;s>0;s--)this.offsetPoint(e,t,s,i),i=s;this.solution.push(this.pathOut)}doGroupOffset(e){e.endType===ne.Polygon?(e.lowestPathIdx<0&&(this.delta=Math.abs(this.delta)),this.groupDelta=e.pathsReversed?-this.delta:this.delta):this.groupDelta=Math.abs(this.delta);let t=Math.abs(this.groupDelta);if(this.joinType=e.joinType,this.endType=e.endType,e.joinType===ye.Round||e.endType===ne.Round){let n=this.arcTolerance>.01?this.arcTolerance:t*re.arc_const,s=Math.PI/Math.acos(1-n/t);this.stepSin=Math.sin(2*Math.PI/s),this.stepCos=Math.cos(2*Math.PI/s),this.groupDelta<0&&(this.stepSin=-this.stepSin),this.stepsPerRad=s/(2*Math.PI)}for(let n of e.inPaths){this.pathOut=[];let s=n.length;if(s===1){let i=n[0];this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(n,this.normals,0,0),e.pathsReversed&&(this.groupDelta=-this.groupDelta));let o=i.z||0;if(e.endType===ne.Round){let a=Math.ceil(this.stepsPerRad*2*Math.PI);if(this.pathOut=re.ellipse(i,Math.abs(this.groupDelta),Math.abs(this.groupDelta),a),o!==0)for(let u=0;u<this.pathOut.length;u++)this.pathOut[u].z=o}else{let a=Math.ceil(Math.abs(this.groupDelta)),u={left:i.x-a,top:i.y-a,right:i.x+a,bottom:i.y+a};this.pathOut=[{x:u.left,y:u.top,z:o},{x:u.right,y:u.top,z:o},{x:u.right,y:u.bottom,z:o},{x:u.left,y:u.bottom,z:o}]}this.solution.push(this.pathOut);continue}switch(s===2&&e.endType===ne.Joined&&(this.endType=e.joinType===ye.Round?ne.Round:ne.Square),this.buildNormals(n),this.endType){case ne.Polygon:this.offsetPolygon(e,n);break;case ne.Joined:this.offsetOpenJoined(e,n);break;default:this.offsetOpenPath(e,n);break}}}static stripDuplicates(e,t){let n=e.length,s=[];if(n===0)return s;let i=e[0];s.push(i);for(let o=1;o<n;o++)He.equals(i,e[o])||(i=e[o],s.push(i));return t&&He.equals(i,s[0])&&s.pop(),s}static area(e){return z.area(e)}static sqr(e){return e*e}static ellipse(e,t,n=0,s=0){if(t<=0)return[];n<=0&&(n=t),s<=2&&(s=Math.ceil(Math.PI*Math.sqrt((t+n)/2)));let i=Math.sin(2*Math.PI/s),o=Math.cos(2*Math.PI/s),a=o,u=i,l=[{x:Math.round(e.x+t),y:e.y}];for(let f=1;f<s;++f){l.push({x:Math.round(e.x+t*a),y:Math.round(e.y+n*u)});let c=a*o-u*i;u=u*o+a*i,a=c}return l}};b(re,"Tolerance",1e-12),b(re,"arc_const",.002);var lt=re;var kh=BigInt(2);function jr(r,e,t){return typeof e=="number"?Yr(j.Union,r,null,e):Yr(j.Union,r,e,t)}function Yr(r,e,t,n){let s=[];if(e===null)return s;let i=new Oe;return i.addPaths(e,me.Subject),t!==null&&i.addPaths(t,me.Clip),i.execute(r,n,s),s}function lr(r,e,t,n,s=2,i=0){let o=new lt(s,i);o.addPaths(r,t,n);let a=[];return o.execute(e,a),a}var Ye=1e4;function ft(){return{layers:new Map,parts:[]}}function Te(r,e="cut"){return{layers:new Map([[e,{regions:r,lines:[]}]]),parts:[]}}function bt(r,e="cut"){return{layers:new Map([[e,{regions:[],lines:r}]]),parts:[]}}function Jn(r){if(r.parts.length)return!1;for(let e of r.layers.values())if(e.regions.length||e.lines.length)return!1;return!0}var je=r=>r.map(e=>e.map(([t,n])=>({x:Math.round(t*Ye),y:Math.round(n*Ye)}))),St=r=>r.filter(e=>e.length>=2).map(e=>e.map(t=>[t.x/Ye,t.y/Ye]));function de(r,e="nonzero"){if(!r.length)return[];let t=e==="evenodd"?V.EvenOdd:V.NonZero;return St(jr(je(r),t)).filter(n=>n.length>=3)}function Qn(r,e,t){if(!e.length)return[];let n=new Oe;n.addSubject(je(e)),t.length&&n.addClip(je(t));let s=[];return n.execute(r,V.NonZero,s),St(s).filter(i=>i.length>=3)}var fr=(r,e)=>e.length?Qn(j.Difference,r,e):de(r),hr=(r,e)=>Qn(j.Intersection,r,e);function Rt(r,e,t){if(!r.length)return[];if(!e.length)return t==="outside"?r:[];let n=new Oe;n.addOpenSubject(je(r)),n.addClip(je(e));let s=[],i=[];return n.execute(t==="inside"?j.Intersection:j.Difference,V.NonZero,s,i),St(i)}function cr(r,e,t="round",n=.01){if(!r.length)return[];if(e===0)return de(r);let s=t==="round"?ye.Round:t==="square"?ye.Square:ye.Miter,i=lr(je(de(r)),e*Ye,s,ne.Polygon,2,n*Ye);return St(i).filter(o=>o.length>=3)}function es(r,e){if(!r.length||e<=0)return[];let t=lr(je(r),e/2*Ye,ye.Round,ne.Round,2,.01*Ye);return St(t)}function ts(r){if(!r.length)return[];let e=new Ut,t=new Oe;t.addSubject(je(r)),t.execute(j.Union,V.NonZero,e);let n=[],s=i=>{for(let o=0;o<i.count;o++){let a=i.child(o),u=[a.poly];for(let l=0;l<a.count;l++){let f=a.child(l);u.push(f.poly),s(f)}n.push(St(u))}};return s(e),n}function Ke(r){let e=0;for(let t=0,n=r.length-1;t<r.length;n=t++)e+=(r[n][0]+r[t][0])*(r[n][1]-r[t][1]);return-e/2}function Yn(r,[e,t]){return[r[0]*e+r[2]*t+r[4],r[1]*e+r[3]*t+r[5]]}function jn(r,e){let t=e[0]*e[3]-e[1]*e[2]<0,n=new Map;for(let[s,i]of r)n.set(s,{regions:i.regions.map(o=>{let a=o.map(u=>Yn(e,u));return t?a.reverse():a}),lines:i.lines.map(o=>o.map(a=>Yn(e,a)))});return n}function pr(r,e){return{layers:jn(r.layers,e),parts:r.parts.map(t=>({...t,layers:jn(t.layers,e)}))}}function Nt(r){let e=ft();for(let t of r){for(let[n,s]of t.layers){let i=e.layers.get(n)??{regions:[],lines:[]};for(let o of s.regions)i.regions.push(o);for(let o of s.lines)i.lines.push(o);e.layers.set(n,i)}for(let n of t.parts)e.parts.push(n)}return e}function Kn(r,e){let t={regions:[],lines:[]};for(let n of r.values()){for(let s of n.regions)t.regions.push(s);for(let s of n.lines)t.lines.push(s)}return new Map([[e,t]])}function dr(r,e){if(r.parts.length&&e!=="guide")throw new Error(`a part cannot go on the ${e} layer as a whole. Put ${e}() inside part() instead.`);return{layers:Kn(r.layers,e),parts:r.parts.map(t=>({...t,layers:Kn(t.layers,e)}))}}function gr(r){let e=1/0,t=1/0,n=-1/0,s=-1/0;for(let i of r)for(let[o,a]of i)o<e&&(e=o),a<t&&(t=a),o>n&&(n=o),a>s&&(s=a);return e===1/0?null:[e,t,n,s]}function Kr(r,e){let t=[];for(let[n,s]of r)if(!e?.(n))for(let i of[...s.regions,...s.lines])t.push(i);return gr(t)}function rs(r){let e=[...r].sort((i,o)=>i[0]-o[0]||i[1]-o[1]);if(e.length<3)return e;let t=(i,o,a)=>(o[0]-i[0])*(a[1]-i[1])-(o[1]-i[1])*(a[0]-i[0]),n=[];for(let i of e){for(;n.length>=2&&t(n[n.length-2],n[n.length-1],i)<=0;)n.pop();n.push(i)}let s=[];for(let i=e.length-1;i>=0;i--){let o=e[i];for(;s.length>=2&&t(s[s.length-2],s[s.length-1],o)<=0;)s.pop();s.push(o)}return s.pop(),n.pop(),n.concat(s)}function ns(r,e,t,n){return r<1e-9?3:e>0?Math.max(Math.floor(e),3):Math.max(Math.ceil(Math.min(360/t,r*2*Math.PI/n)),5)}function vr(r,e,t){let n=[];for(let s=0;s<t;s++){let i=2*Math.PI*s/t;n.push([r*Math.cos(i),e*Math.sin(i)])}return n}function ss(r,e,t,n){if(t=Math.min(t,r/2,e/2),t<=0)return[[0,0],[r,0],[r,e],[0,e]];let s=Math.max(1,Math.ceil(n(t)/4)),i=[],o=[[r-t,t,-90],[r-t,e-t,0],[t,e-t,90],[t,t,180]];for(let[a,u,l]of o)for(let f=0;f<=s;f++){let c=(l+90*f/s)*Math.PI/180;i.push([a+t*Math.cos(c),u+t*Math.sin(c)])}return i}function mr(r,e){let t=Math.round(r/e);return t%2===0&&(t+=r/e>t?1:-1),Math.max(3,t)}var Bt=(r,e,t,n)=>[[r,e],[t,e],[t,n],[r,n]];function Ro(r,e,t,n){if(e==="flat")return[];let s=mr(r,n),i=r/s,o=[];for(let a=0;a<s;a++)(e==="out"?a%2===1:a%2===0)&&o.push(Bt(a*i,-1,(a+1)*i,t));return o}function is(r,e,t,n,s){let i=[([u,l])=>[u,l],([u,l])=>[r-l,u],([u,l])=>[r-u,e-l],([u,l])=>[l,e-u]],o=[r,e,r,e],a=[];return t.forEach((u,l)=>{for(let f of Ro(o[l],u,n,s))a.push(f.map(i[l]))}),fr([Bt(0,0,r,e)],a)}function os(r,e,t,n){let s=mr(r,n),i=r/s,o=[];for(let a=0;a<s;a++)(e==="out"?a%2===0:a%2===1)&&o.push(Bt(a*i,-t/2,(a+1)*i,t/2));return o}function as(r,e,t,n,s){let i=Bt(-r/2,-1,r/2,e),o=Bt(-t/2,s,t/2,s+n);return[i,o]}function us(r,e,t,n,s){let i=[],o=s+n,a=Math.floor(r/t),u=(r-a*t)/2;for(let l=0;l<=a;l++){let f=u+l*t,c=l%2===0?n:n-o/2;for(let h=c;h<e;h+=o){let p=Math.max(h,l%2===0?n:0),g=Math.min(h+s,e-(l%2===0?n:0));g-p>=n/2&&i.push([[f,p],[f,g]])}}return i}var N=class extends Error{constructor(t,n){super(n?`${t} (line ${n.line}, column ${n.col})`:t);this.echoes=[];this.name="KerfError",n&&(this.line=n.line,this.col=n.col)}},No=["<=",">=","==","!=","&&","||","+","-","*","/","%","^","<",">","!","?",":","=",".",",",";","(",")","[","]","{","}","#"];function Jr(r){let e=[],t=[],n=0,s=1,i=0,o=()=>({line:s,col:n-i+1,offset:n}),a=u=>{for(let l=0;l<u;l++)r[n]===`
|
|
7
|
+
`&&(s++,i=n+1),n++};for(;n<r.length;){let u=r[n];if(u===" "||u===" "||u==="\r"||u===`
|
|
8
|
+
`){a(1);continue}if(u==="/"&&r[n+1]==="/"){let c=r.indexOf(`
|
|
9
|
+
`,n),h=c<0?r.length:c,p=/^[ \t]*$/.test(r.slice(r.lastIndexOf(`
|
|
10
|
+
`,n-1)+1,n));t.push({text:r.slice(n+2,h).trim(),line:s,block:!1,own:p}),n=h;continue}if(u==="/"&&r[n+1]==="*"){let c=o(),h=r.indexOf("*/",n+2);if(h<0)throw new N("Unclosed block comment",c);t.push({text:r.slice(n+2,h).trim(),line:c.line,block:!0,own:!0}),a(h+2-n);continue}let l=o();if(/[0-9]/.test(u)||u==="."&&/[0-9]/.test(r[n+1]??"")){let c=/^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/.exec(r.slice(n));e.push({type:"num",value:c[0],pos:l}),a(c[0].length);continue}if(/[A-Za-z_$]/.test(u)){let c=/^[A-Za-z_$][A-Za-z0-9_]*/.exec(r.slice(n));e.push({type:"id",value:c[0],pos:l}),a(c[0].length);continue}if(u==='"'){let c="";for(a(1);n<r.length&&r[n]!=='"';){if(r[n]==="\\"){let h=r[n+1];if(h==="n")c+=`
|
|
11
|
+
`;else if(h==="t")c+=" ";else if(h==="u"){let p=r.slice(n+2,n+6);if(!/^[0-9a-fA-F]{4}$/.test(p))throw new N("Bad \\u escape",o());c+=String.fromCharCode(parseInt(p,16)),a(4)}else c+=h;a(2);continue}if(r[n]===`
|
|
12
|
+
`)throw new N("Unclosed string",l);c+=r[n],a(1)}if(n>=r.length)throw new N("Unclosed string",l);a(1),e.push({type:"str",value:c,pos:l});continue}if(u==="<"&&/^<[A-Za-z0-9_./-]+>/.test(r.slice(n))){let c=e[e.length-1];if(c&&c.type==="id"&&(c.value==="use"||c.value==="include")){let h=/^<([A-Za-z0-9_./-]+)>/.exec(r.slice(n));e.push({type:"str",value:h[1],pos:l}),a(h[0].length);continue}}let f=No.find(c=>r.startsWith(c,n));if(!f)throw new N(`Unexpected character "${u}"`,l);e.push({type:"punct",value:f,pos:l}),a(f.length)}return e.push({type:"eof",value:"",pos:o()}),{tokens:e,comments:t}}var Qr=new Set(["module","function","if","else","for","let","each","use","include","true","false","undef"]);function ht(r){let{tokens:e,comments:t}=Jr(r),n=new en(e),s=[];for(;!n.at("eof");)s.push(...n.statement());return{program:{body:s},comments:t}}var Gt=class Gt{constructor(e){this.tokens=e;this.i=0}peek(e=0){return this.tokens[Math.min(this.i+e,this.tokens.length-1)]}at(e,t,n=0){let s=this.peek(n);return s.type===e&&(t===void 0||s.value===t)}isP(e,t=0){return this.at("punct",e,t)}isK(e,t=0){return this.at("id",e,t)}next(){return this.tokens[this.i++]}fail(e,t=this.peek()){let n=t.type==="eof"?"end of file":`"${t.value}"`;throw new N(`${e}, found ${n}`,t.pos)}expectP(e){return this.isP(e)||this.fail(`Expected "${e}"`),this.next()}ident(){let e=this.peek();return(e.type!=="id"||Qr.has(e.value))&&this.fail("Expected a name"),this.next()}statement(){let e=this.peek();if(this.isP(";"))return this.next(),[];if(this.isP("{")){this.next();let o=[];for(;!this.isP("}");)this.at("eof")&&this.fail('Expected "}"'),o.push(...this.statement());return this.next(),[{kind:"block",body:o,pos:e.pos}]}if(this.isK("module")){this.next();let o=this.ident().value,a=this.params();return[{kind:"module",name:o,params:a,body:this.body(),pos:e.pos}]}if(this.isK("function")&&this.at("id",void 0,1)){this.next();let o=this.ident().value,a=this.params();this.expectP("=");let u=this.expr();return this.expectP(";"),[{kind:"function",name:o,params:a,body:u,pos:e.pos}]}if(this.isK("use")||this.isK("include")){this.next();let o=this.peek();return o.type!=="str"&&this.fail("Expected a library path like <kerf/box>"),this.next(),this.isP(";")&&this.next(),[{kind:"use",path:o.value,include:e.value==="include",pos:e.pos}]}if(this.isK("for"))return this.next(),[{kind:"for",assigns:this.assigns(),body:this.body(),pos:e.pos}];if(this.isK("if")){this.next(),this.expectP("(");let o=this.expr();this.expectP(")");let a=this.body(),u=[];return this.isK("else")&&(this.next(),u=this.body()),[{kind:"if",cond:o,then:a,else:u,pos:e.pos}]}if(this.isK("let")&&this.isP("(",1))return this.next(),[{kind:"let",assigns:this.assigns(),body:this.body(),pos:e.pos}];if(e.type==="id"&&this.isP("=",1)){let o=this.ident().value;this.next();let a=this.peek().pos.offset,u=this.expr(),l=this.expectP(";").pos.offset;return[{kind:"assign",name:o,value:u,span:[a,l],pos:e.pos}]}let t=null;(this.isP("*")||this.isP("!")||this.isP("#")||this.isP("%"))&&(t=this.next().value);let n=this.peek();(n.type!=="id"||Qr.has(n.value))&&this.fail("Expected a statement"),this.next();let s=this.args(),i=this.body();return[{kind:"call",name:n.value,args:s,children:i,modifier:t,pos:n.pos}]}body(){if(this.isP(";"))return this.next(),[];if(this.isP("{")){this.next();let e=[];for(;!this.isP("}");)this.at("eof")&&this.fail('Expected "}"'),e.push(...this.statement());return this.next(),e}return this.statement()}params(){this.expectP("(");let e=[];for(;!this.isP(")");){let t=this.ident().value,n=null;this.isP("=")&&(this.next(),n=this.expr()),e.push({name:t,default:n}),this.isP(")")||this.expectP(",")}return this.next(),e}args(){this.expectP("(");let e=[];for(;!this.isP(")");){let t=null;this.at("id")&&this.isP("=",1)&&(t=this.next().value,this.next()),e.push({name:t,value:this.expr()}),this.isP(")")||this.expectP(",")}return this.next(),e}assigns(){this.expectP("(");let e=[];for(;!this.isP(")");){let t=this.ident();this.expectP("="),e.push({name:t.value,value:this.expr(),pos:t.pos}),this.isP(")")||this.expectP(",")}return this.next(),e}expr(){let e=this.peek();if(this.isK("function")&&this.isP("(",1))return this.next(),{kind:"lambda",params:this.params(),body:this.expr(),pos:e.pos};if(this.isK("let")&&this.isP("(",1))return this.next(),{kind:"let",assigns:this.assigns(),body:this.expr(),pos:e.pos};let t=this.binary(0);if(this.isP("?")){this.next();let n=this.expr();this.expectP(":");let s=this.expr();return{kind:"ternary",cond:t,then:n,else:s,pos:e.pos}}return t}binary(e){if(e>=Gt.LEVELS.length)return this.unary();let t=this.binary(e+1);for(;this.at("punct")&&Gt.LEVELS[e].includes(this.peek().value);){let n=this.next(),s=this.binary(e+1);t={kind:"binary",op:n.value,left:t,right:s,pos:n.pos}}return t}unary(){if(this.isP("-")||this.isP("!")||this.isP("+")){let e=this.next();return{kind:"unary",op:e.value,arg:this.unary(),pos:e.pos}}return this.power()}power(){let e=this.postfix();if(this.isP("^")){let t=this.next();return{kind:"binary",op:"^",left:e,right:this.unary(),pos:t.pos}}return e}postfix(){let e=this.primary();for(;;){let t=this.peek();if(this.isP("("))e={kind:"call",callee:e,args:this.args(),pos:t.pos};else if(this.isP("[")){this.next();let n=this.expr();this.expectP("]"),e={kind:"index",target:e,index:n,pos:t.pos}}else if(this.isP("."))this.next(),e={kind:"member",target:e,name:this.ident().value,pos:t.pos};else return e}}primary(){let e=this.peek();if(e.type==="num")return this.next(),{kind:"num",value:Number(e.value),pos:e.pos};if(e.type==="str")return this.next(),{kind:"str",value:e.value,pos:e.pos};if(e.type==="id")return e.value==="true"||e.value==="false"?(this.next(),{kind:"bool",value:e.value==="true",pos:e.pos}):e.value==="undef"?(this.next(),{kind:"undef",pos:e.pos}):(Qr.has(e.value)&&this.fail("Expected a value"),this.next(),{kind:"var",name:e.value,pos:e.pos});if(this.isP("(")){this.next();let t=this.expr();return this.expectP(")"),t}if(this.isP("["))return this.list();this.fail("Expected a value")}list(){let e=this.expectP("[");if(this.isP("]"))return this.next(),{kind:"list",items:[],pos:e.pos};if(!this.isK("for")&&!this.isK("if")&&!this.isK("each")&&!(this.isK("let")&&this.isP("(",1))){let t=this.expr();if(this.isP(":")){this.next();let s=null,i=this.expr();return this.isP(":")&&(this.next(),s=i,i=this.expr()),this.expectP("]"),{kind:"range",start:t,step:s,end:i,pos:e.pos}}let n=[{kind:"item",expr:t}];return this.listRest(n,e.pos)}return this.listRest([],e.pos)}listRest(e,t){if(e.length){if(this.isP("]"))return this.next(),{kind:"list",items:e,pos:t};this.expectP(",")}for(;!this.isP("]");)e.push(this.listItem()),this.isP("]")||this.expectP(",");return this.next(),{kind:"list",items:e,pos:t}}listItem(){if(this.isK("for")&&this.isP("(",1))return this.next(),{kind:"for",assigns:this.assigns(),body:this.listItem()};if(this.isK("if")&&this.isP("(",1)){this.next(),this.expectP("(");let e=this.expr();this.expectP(")");let t=this.listItem(),n=null;return this.isK("else")&&(this.next(),n=this.listItem()),{kind:"if",cond:e,then:t,else:n}}if(this.isK("let")&&this.isP("(",1))return this.next(),{kind:"let",assigns:this.assigns(),body:this.listItem()};if(this.isK("each"))return this.next(),{kind:"each",expr:this.expr()};if(this.isP("(")&&(this.isK("for",1)||this.isK("if",1))){this.next();let e=this.listItem();return this.expectP(")"),e}return{kind:"item",expr:this.expr()}}};Gt.LEVELS=[["||"],["&&"],["==","!="],["<","<=",">",">="],["+","-"],["*","/","%"]];var en=Gt;var ls={"kerf/box":`// kerf/box: finger-jointed boxes.
|
|
13
|
+
// Copyright (c) 2026 MyLaserTools. AGPL-3.0-only or MyLaserTools commercial licence.
|
|
14
|
+
|
|
15
|
+
// Box from its outer size [width, depth, height] in the current material.
|
|
16
|
+
// Edges pair "out" with "in", and the bottom owns every bottom corner,
|
|
17
|
+
// so the six panels interlock without gaps.
|
|
18
|
+
module box(size, lid = false, finger = undef) {
|
|
19
|
+
w = size[0];
|
|
20
|
+
d = size[1];
|
|
21
|
+
h = size[2];
|
|
22
|
+
top = lid ? "in" : "flat";
|
|
23
|
+
part("bottom") finger_rect([w, d], "out", finger = finger);
|
|
24
|
+
if (lid) part("lid") finger_rect([w, d], "out", finger = finger);
|
|
25
|
+
part("front") finger_rect([w, h], ["in", "out", top, "out"], finger = finger);
|
|
26
|
+
part("back") finger_rect([w, h], ["in", "out", top, "out"], finger = finger);
|
|
27
|
+
part("left") finger_rect([d, h], ["in", "in", top, "in"], finger = finger);
|
|
28
|
+
part("right") finger_rect([d, h], ["in", "in", top, "in"], finger = finger);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Divider that slides between two walls: tabs on both sides drop into
|
|
32
|
+
// finger_holes() cut in the walls.
|
|
33
|
+
module divider(size, finger = undef) {
|
|
34
|
+
finger_rect(size, ["flat", "out", "flat", "out"], finger = finger);
|
|
35
|
+
}
|
|
36
|
+
`};function xr(r,e=.02){let t=[],n=[],s=[],i=[0,0],o=[0,0],a=l=>{s.length>=2&&(l?t:n).push(s),s=[]},u=l=>Math.max(2,Math.min(256,Math.ceil(Math.sqrt(l/e))));for(let l of r)if(l.type==="M")a(!1),i=o=[l.x,l.y],s=[o];else if(l.type==="L")o=[l.x,l.y],s.push(o);else if(l.type==="Q"){let[f,c]=o,h=u(Math.hypot(l.x1-f,l.y1-c)+Math.hypot(l.x-l.x1,l.y-l.y1));for(let p=1;p<=h;p++){let g=p/h,m=1-g;s.push([m*m*f+2*m*g*l.x1+g*g*l.x,m*m*c+2*m*g*l.y1+g*g*l.y])}o=[l.x,l.y]}else if(l.type==="C"){let[f,c]=o,h=u(Math.hypot(l.x1-f,l.y1-c)+Math.hypot(l.x2-l.x1,l.y2-l.y1)+Math.hypot(l.x-l.x2,l.y-l.y2));for(let p=1;p<=h;p++){let g=p/h,m=1-g;s.push([m*m*m*f+3*m*m*g*l.x1+3*m*g*g*l.x2+g*g*g*l.x,m*m*m*c+3*m*m*g*l.y1+3*m*g*g*l.y2+g*g*g*l.y])}o=[l.x,l.y]}else a(!0),o=i,s=[i];return a(!1),{closed:t,open:n}}function fs(r){let e=y=>/^[a-zA-Z]$/.test(y),t=r.match(/[a-zA-Z]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/g)??[],n=[],s=0,i="",o=0,a=0,u=0,l=0,f=0,c=0,h=0,p=0,g="",m=()=>{let y=t[s++];if(y===void 0||e(y))throw new Error(`Bad path data near "${y??"end"}"`);return Number(y)},x=()=>{let y=t[s];if(y===void 0)throw new Error("Bad path data: missing arc flag");return y.length>1&&(y[0]==="0"||y[0]==="1")&&!y.includes(".")?(t[s]=y.slice(1),Number(y[0])):(s++,Number(y))};for(;s<t.length;){if(e(t[s]))i=t[s++];else if(i){if(i==="Z"||i==="z")throw new Error(`Bad path data near "${t[s]}": Z takes no numbers`)}else throw new Error("Path data must start with a command");let y=i===i.toLowerCase(),S=i.toUpperCase(),w=y?o:0,F=y?a:0;if(S==="M")o=w+m(),a=F+m(),u=o,l=a,n.push({type:"M",x:o,y:a}),i=y?"l":"L";else if(S==="L")o=w+m(),a=F+m(),n.push({type:"L",x:o,y:a});else if(S==="H")o=w+m(),n.push({type:"L",x:o,y:a});else if(S==="V")a=F+m(),n.push({type:"L",x:o,y:a});else if(S==="C"||S==="S"){let P,U;if(S==="C")P=w+m(),U=F+m();else{let W=g==="C"||g==="S";P=W?2*o-f:o,U=W?2*a-c:a}let O=w+m(),L=F+m();o=w+m(),a=F+m(),f=O,c=L,n.push({type:"C",x1:P,y1:U,x2:O,y2:L,x:o,y:a})}else if(S==="Q"||S==="T"){let P,U;if(S==="Q")P=w+m(),U=F+m();else{let O=g==="Q"||g==="T";P=O?2*o-h:o,U=O?2*a-p:a}o=w+m(),a=F+m(),h=P,p=U,n.push({type:"Q",x1:P,y1:U,x:o,y:a})}else if(S==="A"){let P=m(),U=m(),O=m(),L=x(),W=x(),_=w+m(),Y=F+m();n.push(...Bo(o,a,P,U,O,L,W,_,Y)),o=_,a=Y}else if(S==="Z")n.push({type:"Z"}),o=u,a=l;else throw new Error(`Unknown path command "${i}"`);g=S}return n}function Bo(r,e,t,n,s,i,o,a,u){if(t===0||n===0||r===a&&e===u)return[{type:"L",x:a,y:u}];t=Math.abs(t),n=Math.abs(n);let l=s*Math.PI/180,f=Math.cos(l),c=Math.sin(l),h=(r-a)/2,p=(e-u)/2,g=f*h+c*p,m=-c*h+f*p,x=g*g/(t*t)+m*m/(n*n);x>1&&(t*=Math.sqrt(x),n*=Math.sqrt(x));let y=t*t*n*n-t*t*m*m-n*n*g*g,S=t*t*m*m+n*n*g*g,w=Math.sqrt(Math.max(0,y/S));i===o&&(w=-w);let F=w*t*m/n,P=-w*n*g/t,U=f*F-c*P+(r+a)/2,O=c*F+f*P+(e+u)/2,L=(X,ee,k,M)=>Math.atan2(X*M-ee*k,X*k+ee*M),W=L(1,0,(g-F)/t,(m-P)/n),_=L((g-F)/t,(m-P)/n,(-g-F)/t,(-m-P)/n);!o&&_>0&&(_-=2*Math.PI),o&&_<0&&(_+=2*Math.PI);let Y=Math.ceil(Math.abs(_)/(Math.PI/2)),he=[],ce=X=>[U+t*Math.cos(X)*f-n*Math.sin(X)*c,O+t*Math.cos(X)*c+n*Math.sin(X)*f],Q=X=>[-t*Math.sin(X)*f-n*Math.cos(X)*c,-t*Math.sin(X)*c+n*Math.cos(X)*f];for(let X=0;X<Y;X++){let ee=W+_*X/Y,k=W+_*(X+1)/Y,M=4/3*Math.tan((k-ee)/4),A=ce(ee),G=ce(k),D=Q(ee),H=Q(k);he.push({type:"C",x1:A[0]+M*D[0],y1:A[1]+M*D[1],x2:G[0]-M*H[0],y2:G[1]-M*H[1],x:G[0],y:G[1]})}return he}String.prototype.codePointAt||(function(){var r=(function(){try{var t={},n=Object.defineProperty,s=n(t,t,t)&&n}catch{}return s})(),e=function(t){if(this==null)throw TypeError();var n=String(this),s=n.length,i=t?Number(t):0;if(i!=i&&(i=0),!(i<0||i>=s)){var o=n.charCodeAt(i),a;return o>=55296&&o<=56319&&s>i+1&&(a=n.charCodeAt(i+1),a>=56320&&a<=57343)?(o-55296)*1024+a-56320+65536:o}};r?r(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e})();var bn=0,Js=-3;function Vt(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function Go(r,e){this.source=r,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new Vt,this.dtree=new Vt}var Qs=new Vt,ei=new Vt,Sn=new Uint8Array(30),wn=new Uint16Array(30),ti=new Uint8Array(30),ri=new Uint16Array(30),Ho=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ps=new Vt,ze=new Uint8Array(320);function ni(r,e,t,n){var s,i;for(s=0;s<t;++s)r[s]=0;for(s=0;s<30-t;++s)r[s+t]=s/t|0;for(i=n,s=0;s<30;++s)e[s]=i,i+=1<<r[s]}function zo(r,e){var t;for(t=0;t<7;++t)r.table[t]=0;for(r.table[7]=24,r.table[8]=152,r.table[9]=112,t=0;t<24;++t)r.trans[t]=256+t;for(t=0;t<144;++t)r.trans[24+t]=t;for(t=0;t<8;++t)r.trans[168+t]=280+t;for(t=0;t<112;++t)r.trans[176+t]=144+t;for(t=0;t<5;++t)e.table[t]=0;for(e.table[5]=32,t=0;t<32;++t)e.trans[t]=t}var ds=new Uint16Array(16);function tn(r,e,t,n){var s,i;for(s=0;s<16;++s)r.table[s]=0;for(s=0;s<n;++s)r.table[e[t+s]]++;for(r.table[0]=0,i=0,s=0;s<16;++s)ds[s]=i,i+=r.table[s];for(s=0;s<n;++s)e[t+s]&&(r.trans[ds[e[t+s]]++]=s)}function Vo(r){r.bitcount--||(r.tag=r.source[r.sourceIndex++],r.bitcount=7);var e=r.tag&1;return r.tag>>>=1,e}function Ve(r,e,t){if(!e)return t;for(;r.bitcount<24;)r.tag|=r.source[r.sourceIndex++]<<r.bitcount,r.bitcount+=8;var n=r.tag&65535>>>16-e;return r.tag>>>=e,r.bitcount-=e,n+t}function hn(r,e){for(;r.bitcount<24;)r.tag|=r.source[r.sourceIndex++]<<r.bitcount,r.bitcount+=8;var t=0,n=0,s=0,i=r.tag;do n=2*n+(i&1),i>>>=1,++s,t+=e.table[s],n-=e.table[s];while(n>=0);return r.tag=i,r.bitcount-=s,e.trans[t+n]}function Xo(r,e,t){var n,s,i,o,a,u;for(n=Ve(r,5,257),s=Ve(r,5,1),i=Ve(r,4,4),o=0;o<19;++o)ze[o]=0;for(o=0;o<i;++o){var l=Ve(r,3,0);ze[Ho[o]]=l}for(tn(ps,ze,0,19),a=0;a<n+s;){var f=hn(r,ps);switch(f){case 16:var c=ze[a-1];for(u=Ve(r,2,3);u;--u)ze[a++]=c;break;case 17:for(u=Ve(r,3,3);u;--u)ze[a++]=0;break;case 18:for(u=Ve(r,7,11);u;--u)ze[a++]=0;break;default:ze[a++]=f;break}}tn(e,ze,0,n),tn(t,ze,n,s)}function gs(r,e,t){for(;;){var n=hn(r,e);if(n===256)return bn;if(n<256)r.dest[r.destLen++]=n;else{var s,i,o,a;for(n-=257,s=Ve(r,Sn[n],wn[n]),i=hn(r,t),o=r.destLen-Ve(r,ti[i],ri[i]),a=o;a<o+s;++a)r.dest[r.destLen++]=r.dest[a]}}}function qo(r){for(var e,t,n;r.bitcount>8;)r.sourceIndex--,r.bitcount-=8;if(e=r.source[r.sourceIndex+1],e=256*e+r.source[r.sourceIndex],t=r.source[r.sourceIndex+3],t=256*t+r.source[r.sourceIndex+2],e!==(~t&65535))return Js;for(r.sourceIndex+=4,n=e;n;--n)r.dest[r.destLen++]=r.source[r.sourceIndex++];return r.bitcount=0,bn}function Wo(r,e){var t=new Go(r,e),n,s,i;do{switch(n=Vo(t),s=Ve(t,2,0),s){case 0:i=qo(t);break;case 1:i=gs(t,Qs,ei);break;case 2:Xo(t,t.ltree,t.dtree),i=gs(t,t.ltree,t.dtree);break;default:i=Js}if(i!==bn)throw new Error("Data error")}while(!n);return t.destLen<t.dest.length?typeof t.dest.slice=="function"?t.dest.slice(0,t.destLen):t.dest.subarray(0,t.destLen):t.dest}zo(Qs,ei);ni(Sn,wn,4,3);ni(ti,ri,2,1);Sn[28]=0;wn[28]=258;var $o=Wo;function wt(r,e,t,n,s){return Math.pow(1-s,3)*r+3*Math.pow(1-s,2)*s*e+3*(1-s)*Math.pow(s,2)*t+Math.pow(s,3)*n}function st(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}st.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)};st.prototype.addPoint=function(r,e){typeof r=="number"&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=r,this.x2=r),r<this.x1&&(this.x1=r),r>this.x2&&(this.x2=r)),typeof e=="number"&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),e<this.y1&&(this.y1=e),e>this.y2&&(this.y2=e))};st.prototype.addX=function(r){this.addPoint(r,null)};st.prototype.addY=function(r){this.addPoint(null,r)};st.prototype.addBezier=function(r,e,t,n,s,i,o,a){var u=[r,e],l=[t,n],f=[s,i],c=[o,a];this.addPoint(r,e),this.addPoint(o,a);for(var h=0;h<=1;h++){var p=6*u[h]-12*l[h]+6*f[h],g=-3*u[h]+9*l[h]-9*f[h]+3*c[h],m=3*l[h]-3*u[h];if(g===0){if(p===0)continue;var x=-m/p;0<x&&x<1&&(h===0&&this.addX(wt(u[h],l[h],f[h],c[h],x)),h===1&&this.addY(wt(u[h],l[h],f[h],c[h],x)));continue}var y=Math.pow(p,2)-4*m*g;if(!(y<0)){var S=(-p+Math.sqrt(y))/(2*g);0<S&&S<1&&(h===0&&this.addX(wt(u[h],l[h],f[h],c[h],S)),h===1&&this.addY(wt(u[h],l[h],f[h],c[h],S)));var w=(-p-Math.sqrt(y))/(2*g);0<w&&w<1&&(h===0&&this.addX(wt(u[h],l[h],f[h],c[h],w)),h===1&&this.addY(wt(u[h],l[h],f[h],c[h],w)))}}};st.prototype.addQuad=function(r,e,t,n,s,i){var o=r+.6666666666666666*(t-r),a=e+2/3*(n-e),u=o+1/3*(s-r),l=a+1/3*(i-e);this.addBezier(r,e,o,a,u,l,s,i)};function fe(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}fe.prototype.moveTo=function(r,e){this.commands.push({type:"M",x:r,y:e})};fe.prototype.lineTo=function(r,e){this.commands.push({type:"L",x:r,y:e})};fe.prototype.curveTo=fe.prototype.bezierCurveTo=function(r,e,t,n,s,i){this.commands.push({type:"C",x1:r,y1:e,x2:t,y2:n,x:s,y:i})};fe.prototype.quadTo=fe.prototype.quadraticCurveTo=function(r,e,t,n){this.commands.push({type:"Q",x1:r,y1:e,x:t,y:n})};fe.prototype.close=fe.prototype.closePath=function(){this.commands.push({type:"Z"})};fe.prototype.extend=function(r){if(r.commands)r=r.commands;else if(r instanceof st){var e=r;this.moveTo(e.x1,e.y1),this.lineTo(e.x2,e.y1),this.lineTo(e.x2,e.y2),this.lineTo(e.x1,e.y2),this.close();return}Array.prototype.push.apply(this.commands,r)};fe.prototype.getBoundingBox=function(){for(var r=new st,e=0,t=0,n=0,s=0,i=0;i<this.commands.length;i++){var o=this.commands[i];switch(o.type){case"M":r.addPoint(o.x,o.y),e=n=o.x,t=s=o.y;break;case"L":r.addPoint(o.x,o.y),n=o.x,s=o.y;break;case"Q":r.addQuad(n,s,o.x1,o.y1,o.x,o.y),n=o.x,s=o.y;break;case"C":r.addBezier(n,s,o.x1,o.y1,o.x2,o.y2,o.x,o.y),n=o.x,s=o.y;break;case"Z":n=e,s=t;break;default:throw new Error("Unexpected path command "+o.type)}}return r.isEmpty()&&r.addPoint(0,0),r};fe.prototype.draw=function(r){r.beginPath();for(var e=0;e<this.commands.length;e+=1){var t=this.commands[e];t.type==="M"?r.moveTo(t.x,t.y):t.type==="L"?r.lineTo(t.x,t.y):t.type==="C"?r.bezierCurveTo(t.x1,t.y1,t.x2,t.y2,t.x,t.y):t.type==="Q"?r.quadraticCurveTo(t.x1,t.y1,t.x,t.y):t.type==="Z"&&r.closePath()}this.fill&&(r.fillStyle=this.fill,r.fill()),this.stroke&&(r.strokeStyle=this.stroke,r.lineWidth=this.strokeWidth,r.stroke())};fe.prototype.toPathData=function(r){r=r!==void 0?r:2;function e(o){return Math.round(o)===o?""+Math.round(o):o.toFixed(r)}function t(){for(var o=arguments,a="",u=0;u<arguments.length;u+=1){var l=o[u];l>=0&&u>0&&(a+=" "),a+=e(l)}return a}for(var n="",s=0;s<this.commands.length;s+=1){var i=this.commands[s];i.type==="M"?n+="M"+t(i.x,i.y):i.type==="L"?n+="L"+t(i.x,i.y):i.type==="C"?n+="C"+t(i.x1,i.y1,i.x2,i.y2,i.x,i.y):i.type==="Q"?n+="Q"+t(i.x1,i.y1,i.x,i.y):i.type==="Z"&&(n+="Z")}return n};fe.prototype.toSVG=function(r){var e='<path d="';return e+=this.toPathData(r),e+='"',this.fill&&this.fill!=="black"&&(this.fill===null?e+=' fill="none"':e+=' fill="'+this.fill+'"'),this.stroke&&(e+=' stroke="'+this.stroke+'" stroke-width="'+this.strokeWidth+'"'),e+="/>",e};fe.prototype.toDOMElement=function(r){var e=this.toPathData(r),t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("d",e),t};function si(r){throw new Error(r)}function vs(r,e){r||si(e)}var R={fail:si,argument:vs,assert:vs},ms=32768,xs=2147483648,Et={},E={},B={};function Ue(r){return function(){return r}}E.BYTE=function(r){return R.argument(r>=0&&r<=255,"Byte value should be between 0 and 255."),[r]};B.BYTE=Ue(1);E.CHAR=function(r){return[r.charCodeAt(0)]};B.CHAR=Ue(1);E.CHARARRAY=function(r){typeof r>"u"&&(r="",console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."));for(var e=[],t=0;t<r.length;t+=1)e[t]=r.charCodeAt(t);return e};B.CHARARRAY=function(r){return typeof r>"u"?0:r.length};E.USHORT=function(r){return[r>>8&255,r&255]};B.USHORT=Ue(2);E.SHORT=function(r){return r>=ms&&(r=-(2*ms-r)),[r>>8&255,r&255]};B.SHORT=Ue(2);E.UINT24=function(r){return[r>>16&255,r>>8&255,r&255]};B.UINT24=Ue(3);E.ULONG=function(r){return[r>>24&255,r>>16&255,r>>8&255,r&255]};B.ULONG=Ue(4);E.LONG=function(r){return r>=xs&&(r=-(2*xs-r)),[r>>24&255,r>>16&255,r>>8&255,r&255]};B.LONG=Ue(4);E.FIXED=E.ULONG;B.FIXED=B.ULONG;E.FWORD=E.SHORT;B.FWORD=B.SHORT;E.UFWORD=E.USHORT;B.UFWORD=B.USHORT;E.LONGDATETIME=function(r){return[0,0,0,0,r>>24&255,r>>16&255,r>>8&255,r&255]};B.LONGDATETIME=Ue(8);E.TAG=function(r){return R.argument(r.length===4,"Tag should be exactly 4 ASCII characters."),[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3)]};B.TAG=Ue(4);E.Card8=E.BYTE;B.Card8=B.BYTE;E.Card16=E.USHORT;B.Card16=B.USHORT;E.OffSize=E.BYTE;B.OffSize=B.BYTE;E.SID=E.USHORT;B.SID=B.USHORT;E.NUMBER=function(r){return r>=-107&&r<=107?[r+139]:r>=108&&r<=1131?(r=r-108,[(r>>8)+247,r&255]):r>=-1131&&r<=-108?(r=-r-108,[(r>>8)+251,r&255]):r>=-32768&&r<=32767?E.NUMBER16(r):E.NUMBER32(r)};B.NUMBER=function(r){return E.NUMBER(r).length};E.NUMBER16=function(r){return[28,r>>8&255,r&255]};B.NUMBER16=Ue(3);E.NUMBER32=function(r){return[29,r>>24&255,r>>16&255,r>>8&255,r&255]};B.NUMBER32=Ue(5);E.REAL=function(r){var e=r.toString(),t=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(t){var n=parseFloat("1e"+((t[2]?+t[2]:0)+t[1].length));e=(Math.round(r*n)/n).toString()}for(var s="",i=0,o=e.length;i<o;i+=1){var a=e[i];a==="e"?s+=e[++i]==="-"?"c":"b":a==="."?s+="a":a==="-"?s+="e":s+=a}s+=s.length&1?"f":"ff";for(var u=[30],l=0,f=s.length;l<f;l+=2)u.push(parseInt(s.substr(l,2),16));return u};B.REAL=function(r){return E.REAL(r).length};E.NAME=E.CHARARRAY;B.NAME=B.CHARARRAY;E.STRING=E.CHARARRAY;B.STRING=B.CHARARRAY;Et.UTF8=function(r,e,t){for(var n=[],s=t,i=0;i<s;i++,e+=1)n[i]=r.getUint8(e);return String.fromCharCode.apply(null,n)};Et.UTF16=function(r,e,t){for(var n=[],s=t/2,i=0;i<s;i++,e+=2)n[i]=r.getUint16(e);return String.fromCharCode.apply(null,n)};E.UTF16=function(r){for(var e=[],t=0;t<r.length;t+=1){var n=r.charCodeAt(t);e[e.length]=n>>8&255,e[e.length]=n&255}return e};B.UTF16=function(r){return r.length*2};var cn={"x-mac-croatian":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u03A9\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uF8FF\xA9\u2044\u20AC\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7","x-mac-cyrillic":"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E","x-mac-gaelic":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u1E02\xB1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xE6\xF8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xFF\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xB7\u1EF2\u1EF3\u204A\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u2663\xD2\xDA\xDB\xD9\u0131\xDD\xFD\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83","x-mac-greek":"\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\u20AC\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\xB7\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xAD","x-mac-icelandic":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-inuit":"\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xB0\u14A1\u14A5\u14A6\u2022\xB6\u14A7\xAE\xA9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026\xA0\u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142","x-mac-ce":"\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7",macintosh:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-romanian":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u0218\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\u0103\u0219\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-turkish":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\uF8A0\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"};Et.MACSTRING=function(r,e,t,n){var s=cn[n];if(s!==void 0){for(var i="",o=0;o<t;o++){var a=r.getUint8(e+o);a<=127?i+=String.fromCharCode(a):i+=s[a&127]}return i}};var yr=typeof WeakMap=="function"&&new WeakMap,br,Zo=function(r){if(!br){br={};for(var e in cn)br[e]=new String(e)}var t=br[r];if(t!==void 0){if(yr){var n=yr.get(t);if(n!==void 0)return n}var s=cn[r];if(s!==void 0){for(var i={},o=0;o<s.length;o++)i[s.charCodeAt(o)]=o+128;return yr&&yr.set(t,i),i}}};E.MACSTRING=function(r,e){var t=Zo(e);if(t!==void 0){for(var n=[],s=0;s<r.length;s++){var i=r.charCodeAt(s);if(i>=128&&(i=t[i],i===void 0))return;n[s]=i}return n}};B.MACSTRING=function(r,e){var t=E.MACSTRING(r,e);return t!==void 0?t.length:0};function pn(r){return r>=-128&&r<=127}function _o(r,e,t){for(var n=0,s=r.length;e<s&&n<64&&r[e]===0;)++e,++n;return t.push(128|n-1),e}function Yo(r,e,t){for(var n=0,s=r.length,i=e;i<s&&n<64;){var o=r[i];if(!pn(o)||o===0&&i+1<s&&r[i+1]===0)break;++i,++n}t.push(n-1);for(var a=e;a<i;++a)t.push(r[a]+256&255);return i}function jo(r,e,t){for(var n=0,s=r.length,i=e;i<s&&n<64;){var o=r[i];if(o===0||pn(o)&&i+1<s&&pn(r[i+1]))break;++i,++n}t.push(64|n-1);for(var a=e;a<i;++a){var u=r[a];t.push(u+65536>>8&255,u+256&255)}return i}E.VARDELTAS=function(r){for(var e=0,t=[];e<r.length;){var n=r[e];n===0?e=_o(r,e,t):n>=-128&&n<=127?e=Yo(r,e,t):e=jo(r,e,t)}return t};E.INDEX=function(r){for(var e=1,t=[e],n=[],s=0;s<r.length;s+=1){var i=E.OBJECT(r[s]);Array.prototype.push.apply(n,i),e+=i.length,t.push(e)}if(n.length===0)return[0,0];for(var o=[],a=1+Math.floor(Math.log(e)/Math.log(2))/8|0,u=[void 0,E.BYTE,E.USHORT,E.UINT24,E.ULONG][a],l=0;l<t.length;l+=1){var f=u(t[l]);Array.prototype.push.apply(o,f)}return Array.prototype.concat(E.Card16(r.length),E.OffSize(a),o,n)};B.INDEX=function(r){return E.INDEX(r).length};E.DICT=function(r){for(var e=[],t=Object.keys(r),n=t.length,s=0;s<n;s+=1){var i=parseInt(t[s],0),o=r[i];e=e.concat(E.OPERAND(o.value,o.type)),e=e.concat(E.OPERATOR(i))}return e};B.DICT=function(r){return E.DICT(r).length};E.OPERATOR=function(r){return r<1200?[r]:[12,r-1200]};E.OPERAND=function(r,e){var t=[];if(Array.isArray(e))for(var n=0;n<e.length;n+=1)R.argument(r.length===e.length,"Not enough arguments given for type"+e),t=t.concat(E.OPERAND(r[n],e[n]));else if(e==="SID")t=t.concat(E.NUMBER(r));else if(e==="offset")t=t.concat(E.NUMBER32(r));else if(e==="number")t=t.concat(E.NUMBER(r));else if(e==="real")t=t.concat(E.REAL(r));else throw new Error("Unknown operand type "+e);return t};E.OP=E.BYTE;B.OP=B.BYTE;var Sr=typeof WeakMap=="function"&&new WeakMap;E.CHARSTRING=function(r){if(Sr){var e=Sr.get(r);if(e!==void 0)return e}for(var t=[],n=r.length,s=0;s<n;s+=1){var i=r[s];t=t.concat(E[i.type](i.value))}return Sr&&Sr.set(r,t),t};B.CHARSTRING=function(r){return E.CHARSTRING(r).length};E.OBJECT=function(r){var e=E[r.type];return R.argument(e!==void 0,"No encoding function for type "+r.type),e(r.value)};B.OBJECT=function(r){var e=B[r.type];return R.argument(e!==void 0,"No sizeOf function for type "+r.type),e(r.value)};E.TABLE=function(r){for(var e=[],t=r.fields.length,n=[],s=[],i=0;i<t;i+=1){var o=r.fields[i],a=E[o.type];R.argument(a!==void 0,"No encoding function for field type "+o.type+" ("+o.name+")");var u=r[o.name];u===void 0&&(u=o.value);var l=a(u);o.type==="TABLE"?(s.push(e.length),e=e.concat([0,0]),n.push(l)):e=e.concat(l)}for(var f=0;f<n.length;f+=1){var c=s[f],h=e.length;R.argument(h<65536,"Table "+r.tableName+" too big."),e[c]=h>>8,e[c+1]=h&255,e=e.concat(n[f])}return e};B.TABLE=function(r){for(var e=0,t=r.fields.length,n=0;n<t;n+=1){var s=r.fields[n],i=B[s.type];R.argument(i!==void 0,"No sizeOf function for field type "+s.type+" ("+s.name+")");var o=r[s.name];o===void 0&&(o=s.value),e+=i(o),s.type==="TABLE"&&(e+=2)}return e};E.RECORD=E.TABLE;B.RECORD=B.TABLE;E.LITERAL=function(r){return r};B.LITERAL=function(r){return r.length};function ge(r,e,t){if(e.length&&(e[0].name!=="coverageFormat"||e[0].value===1))for(var n=0;n<e.length;n+=1){var s=e[n];this[s.name]=s.value}if(this.tableName=r,this.fields=e,t)for(var i=Object.keys(t),o=0;o<i.length;o+=1){var a=i[o],u=t[a];this[a]!==void 0&&(this[a]=u)}}ge.prototype.encode=function(){return E.TABLE(this)};ge.prototype.sizeOf=function(){return B.TABLE(this)};function Xt(r,e,t){t===void 0&&(t=e.length);var n=new Array(e.length+1);n[0]={name:r+"Count",type:"USHORT",value:t};for(var s=0;s<e.length;s++)n[s+1]={name:r+s,type:"USHORT",value:e[s]};return n}function dn(r,e,t){var n=e.length,s=new Array(n+1);s[0]={name:r+"Count",type:"USHORT",value:n};for(var i=0;i<n;i++)s[i+1]={name:r+i,type:"TABLE",value:t(e[i],i)};return s}function qt(r,e,t){var n=e.length,s=[];s[0]={name:r+"Count",type:"USHORT",value:n};for(var i=0;i<n;i++)s=s.concat(t(e[i],i));return s}function Lr(r){r.format===1?ge.call(this,"coverageTable",[{name:"coverageFormat",type:"USHORT",value:1}].concat(Xt("glyph",r.glyphs))):r.format===2?ge.call(this,"coverageTable",[{name:"coverageFormat",type:"USHORT",value:2}].concat(qt("rangeRecord",r.ranges,function(e){return[{name:"startGlyphID",type:"USHORT",value:e.start},{name:"endGlyphID",type:"USHORT",value:e.end},{name:"startCoverageIndex",type:"USHORT",value:e.index}]}))):R.assert(!1,"Coverage format must be 1 or 2.")}Lr.prototype=Object.create(ge.prototype);Lr.prototype.constructor=Lr;function Ir(r){ge.call(this,"scriptListTable",qt("scriptRecord",r,function(e,t){var n=e.script,s=n.defaultLangSys;return R.assert(!!s,"Unable to write GSUB: script "+e.tag+" has no default language system."),[{name:"scriptTag"+t,type:"TAG",value:e.tag},{name:"script"+t,type:"TABLE",value:new ge("scriptTable",[{name:"defaultLangSys",type:"TABLE",value:new ge("defaultLangSys",[{name:"lookupOrder",type:"USHORT",value:0},{name:"reqFeatureIndex",type:"USHORT",value:s.reqFeatureIndex}].concat(Xt("featureIndex",s.featureIndexes)))}].concat(qt("langSys",n.langSysRecords,function(i,o){var a=i.langSys;return[{name:"langSysTag"+o,type:"TAG",value:i.tag},{name:"langSys"+o,type:"TABLE",value:new ge("langSys",[{name:"lookupOrder",type:"USHORT",value:0},{name:"reqFeatureIndex",type:"USHORT",value:a.reqFeatureIndex}].concat(Xt("featureIndex",a.featureIndexes)))}]})))}]}))}Ir.prototype=Object.create(ge.prototype);Ir.prototype.constructor=Ir;function Tr(r){ge.call(this,"featureListTable",qt("featureRecord",r,function(e,t){var n=e.feature;return[{name:"featureTag"+t,type:"TAG",value:e.tag},{name:"feature"+t,type:"TABLE",value:new ge("featureTable",[{name:"featureParams",type:"USHORT",value:n.featureParams}].concat(Xt("lookupListIndex",n.lookupListIndexes)))}]}))}Tr.prototype=Object.create(ge.prototype);Tr.prototype.constructor=Tr;function Cr(r,e){ge.call(this,"lookupListTable",dn("lookup",r,function(t){var n=e[t.lookupType];return R.assert(!!n,"Unable to write GSUB lookup type "+t.lookupType+" tables."),new ge("lookupTable",[{name:"lookupType",type:"USHORT",value:t.lookupType},{name:"lookupFlag",type:"USHORT",value:t.lookupFlag}].concat(dn("subtable",t.subtables,n)))}))}Cr.prototype=Object.create(ge.prototype);Cr.prototype.constructor=Cr;var I={Table:ge,Record:ge,Coverage:Lr,ScriptList:Ir,FeatureList:Tr,LookupList:Cr,ushortList:Xt,tableList:dn,recordList:qt};function ys(r,e){return r.getUint8(e)}function Mr(r,e){return r.getUint16(e,!1)}function Ko(r,e){return r.getInt16(e,!1)}function kn(r,e){return r.getUint32(e,!1)}function ii(r,e){var t=r.getInt16(e,!1),n=r.getUint16(e+2,!1);return t+n/65535}function Jo(r,e){for(var t="",n=e;n<e+4;n+=1)t+=String.fromCharCode(r.getInt8(n));return t}function Qo(r,e,t){for(var n=0,s=0;s<t;s+=1)n<<=8,n+=r.getUint8(e+s);return n}function ea(r,e,t){for(var n=[],s=e;s<t;s+=1)n.push(r.getUint8(s));return n}function ta(r){for(var e="",t=0;t<r.length;t+=1)e+=String.fromCharCode(r[t]);return e}var ra={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function v(r,e){this.data=r,this.offset=e,this.relativeOffset=0}v.prototype.parseByte=function(){var r=this.data.getUint8(this.offset+this.relativeOffset);return this.relativeOffset+=1,r};v.prototype.parseChar=function(){var r=this.data.getInt8(this.offset+this.relativeOffset);return this.relativeOffset+=1,r};v.prototype.parseCard8=v.prototype.parseByte;v.prototype.parseUShort=function(){var r=this.data.getUint16(this.offset+this.relativeOffset);return this.relativeOffset+=2,r};v.prototype.parseCard16=v.prototype.parseUShort;v.prototype.parseSID=v.prototype.parseUShort;v.prototype.parseOffset16=v.prototype.parseUShort;v.prototype.parseShort=function(){var r=this.data.getInt16(this.offset+this.relativeOffset);return this.relativeOffset+=2,r};v.prototype.parseF2Dot14=function(){var r=this.data.getInt16(this.offset+this.relativeOffset)/16384;return this.relativeOffset+=2,r};v.prototype.parseULong=function(){var r=kn(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,r};v.prototype.parseOffset32=v.prototype.parseULong;v.prototype.parseFixed=function(){var r=ii(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,r};v.prototype.parseString=function(r){var e=this.data,t=this.offset+this.relativeOffset,n="";this.relativeOffset+=r;for(var s=0;s<r;s++)n+=String.fromCharCode(e.getUint8(t+s));return n};v.prototype.parseTag=function(){return this.parseString(4)};v.prototype.parseLongDateTime=function(){var r=kn(this.data,this.offset+this.relativeOffset+4);return r-=2082844800,this.relativeOffset+=8,r};v.prototype.parseVersion=function(r){var e=Mr(this.data,this.offset+this.relativeOffset),t=Mr(this.data,this.offset+this.relativeOffset+2);return this.relativeOffset+=4,r===void 0&&(r=4096),e+t/r/10};v.prototype.skip=function(r,e){e===void 0&&(e=1),this.relativeOffset+=ra[r]*e};v.prototype.parseULongList=function(r){r===void 0&&(r=this.parseULong());for(var e=new Array(r),t=this.data,n=this.offset+this.relativeOffset,s=0;s<r;s++)e[s]=t.getUint32(n),n+=4;return this.relativeOffset+=r*4,e};v.prototype.parseOffset16List=v.prototype.parseUShortList=function(r){r===void 0&&(r=this.parseUShort());for(var e=new Array(r),t=this.data,n=this.offset+this.relativeOffset,s=0;s<r;s++)e[s]=t.getUint16(n),n+=2;return this.relativeOffset+=r*2,e};v.prototype.parseShortList=function(r){for(var e=new Array(r),t=this.data,n=this.offset+this.relativeOffset,s=0;s<r;s++)e[s]=t.getInt16(n),n+=2;return this.relativeOffset+=r*2,e};v.prototype.parseByteList=function(r){for(var e=new Array(r),t=this.data,n=this.offset+this.relativeOffset,s=0;s<r;s++)e[s]=t.getUint8(n++);return this.relativeOffset+=r,e};v.prototype.parseList=function(r,e){e||(e=r,r=this.parseUShort());for(var t=new Array(r),n=0;n<r;n++)t[n]=e.call(this);return t};v.prototype.parseList32=function(r,e){e||(e=r,r=this.parseULong());for(var t=new Array(r),n=0;n<r;n++)t[n]=e.call(this);return t};v.prototype.parseRecordList=function(r,e){e||(e=r,r=this.parseUShort());for(var t=new Array(r),n=Object.keys(e),s=0;s<r;s++){for(var i={},o=0;o<n.length;o++){var a=n[o],u=e[a];i[a]=u.call(this)}t[s]=i}return t};v.prototype.parseRecordList32=function(r,e){e||(e=r,r=this.parseULong());for(var t=new Array(r),n=Object.keys(e),s=0;s<r;s++){for(var i={},o=0;o<n.length;o++){var a=n[o],u=e[a];i[a]=u.call(this)}t[s]=i}return t};v.prototype.parseStruct=function(r){if(typeof r=="function")return r.call(this);for(var e=Object.keys(r),t={},n=0;n<e.length;n++){var s=e[n],i=r[s];t[s]=i.call(this)}return t};v.prototype.parseValueRecord=function(r){if(r===void 0&&(r=this.parseUShort()),r!==0){var e={};return r&1&&(e.xPlacement=this.parseShort()),r&2&&(e.yPlacement=this.parseShort()),r&4&&(e.xAdvance=this.parseShort()),r&8&&(e.yAdvance=this.parseShort()),r&16&&(e.xPlaDevice=void 0,this.parseShort()),r&32&&(e.yPlaDevice=void 0,this.parseShort()),r&64&&(e.xAdvDevice=void 0,this.parseShort()),r&128&&(e.yAdvDevice=void 0,this.parseShort()),e}};v.prototype.parseValueRecordList=function(){for(var r=this.parseUShort(),e=this.parseUShort(),t=new Array(e),n=0;n<e;n++)t[n]=this.parseValueRecord(r);return t};v.prototype.parsePointer=function(r){var e=this.parseOffset16();if(e>0)return new v(this.data,this.offset+e).parseStruct(r)};v.prototype.parsePointer32=function(r){var e=this.parseOffset32();if(e>0)return new v(this.data,this.offset+e).parseStruct(r)};v.prototype.parseListOfLists=function(r){for(var e=this.parseOffset16List(),t=e.length,n=this.relativeOffset,s=new Array(t),i=0;i<t;i++){var o=e[i];if(o===0){s[i]=void 0;continue}if(this.relativeOffset=o,r){for(var a=this.parseOffset16List(),u=new Array(a.length),l=0;l<a.length;l++)this.relativeOffset=o+a[l],u[l]=r.call(this);s[i]=u}else s[i]=this.parseUShortList()}return this.relativeOffset=n,s};v.prototype.parseCoverage=function(){var r=this.offset+this.relativeOffset,e=this.parseUShort(),t=this.parseUShort();if(e===1)return{format:1,glyphs:this.parseUShortList(t)};if(e===2){for(var n=new Array(t),s=0;s<t;s++)n[s]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()};return{format:2,ranges:n}}throw new Error("0x"+r.toString(16)+": Coverage format must be 1 or 2.")};v.prototype.parseClassDef=function(){var r=this.offset+this.relativeOffset,e=this.parseUShort();if(e===1)return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()};if(e===2)return{format:2,ranges:this.parseRecordList({start:v.uShort,end:v.uShort,classId:v.uShort})};throw new Error("0x"+r.toString(16)+": ClassDef format must be 1 or 2.")};v.list=function(r,e){return function(){return this.parseList(r,e)}};v.list32=function(r,e){return function(){return this.parseList32(r,e)}};v.recordList=function(r,e){return function(){return this.parseRecordList(r,e)}};v.recordList32=function(r,e){return function(){return this.parseRecordList32(r,e)}};v.pointer=function(r){return function(){return this.parsePointer(r)}};v.pointer32=function(r){return function(){return this.parsePointer32(r)}};v.tag=v.prototype.parseTag;v.byte=v.prototype.parseByte;v.uShort=v.offset16=v.prototype.parseUShort;v.uShortList=v.prototype.parseUShortList;v.uLong=v.offset32=v.prototype.parseULong;v.uLongList=v.prototype.parseULongList;v.struct=v.prototype.parseStruct;v.coverage=v.prototype.parseCoverage;v.classDef=v.prototype.parseClassDef;var bs={reserved:v.uShort,reqFeatureIndex:v.uShort,featureIndexes:v.uShortList};v.prototype.parseScriptList=function(){return this.parsePointer(v.recordList({tag:v.tag,script:v.pointer({defaultLangSys:v.pointer(bs),langSysRecords:v.recordList({tag:v.tag,langSys:v.pointer(bs)})})}))||[]};v.prototype.parseFeatureList=function(){return this.parsePointer(v.recordList({tag:v.tag,feature:v.pointer({featureParams:v.offset16,lookupListIndexes:v.uShortList})}))||[]};v.prototype.parseLookupList=function(r){return this.parsePointer(v.list(v.pointer(function(){var e=this.parseUShort();R.argument(1<=e&&e<=9,"GPOS/GSUB lookup type "+e+" unknown.");var t=this.parseUShort(),n=t&16;return{lookupType:e,lookupFlag:t,subtables:this.parseList(v.pointer(r[e])),markFilteringSet:n?this.parseUShort():void 0}})))||[]};v.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var r=this.parseUShort(),e=this.parseUShort();R.argument(r===1&&e<1,"GPOS/GSUB feature variations table unknown.");var t=this.parseRecordList32({conditionSetOffset:v.offset32,featureTableSubstitutionOffset:v.offset32});return t})||[]};var C={getByte:ys,getCard8:ys,getUShort:Mr,getCard16:Mr,getShort:Ko,getULong:kn,getFixed:ii,getTag:Jo,getOffset:Qo,getBytes:ea,bytesToString:ta,Parser:v};function na(r,e){e.parseUShort(),r.length=e.parseULong(),r.language=e.parseULong();var t;r.groupCount=t=e.parseULong(),r.glyphIndexMap={};for(var n=0;n<t;n+=1)for(var s=e.parseULong(),i=e.parseULong(),o=e.parseULong(),a=s;a<=i;a+=1)r.glyphIndexMap[a]=o,o++}function sa(r,e,t,n,s){r.length=e.parseUShort(),r.language=e.parseUShort();var i;r.segCount=i=e.parseUShort()>>1,e.skip("uShort",3),r.glyphIndexMap={};for(var o=new C.Parser(t,n+s+14),a=new C.Parser(t,n+s+16+i*2),u=new C.Parser(t,n+s+16+i*4),l=new C.Parser(t,n+s+16+i*6),f=n+s+16+i*8,c=0;c<i-1;c+=1)for(var h=void 0,p=o.parseUShort(),g=a.parseUShort(),m=u.parseShort(),x=l.parseUShort(),y=g;y<=p;y+=1)x!==0?(f=l.offset+l.relativeOffset-2,f+=x,f+=(y-g)*2,h=C.getUShort(t,f),h!==0&&(h=h+m&65535)):h=y+m&65535,r.glyphIndexMap[y]=h}function ia(r,e){var t={};t.version=C.getUShort(r,e),R.argument(t.version===0,"cmap table version should be 0."),t.numTables=C.getUShort(r,e+2);for(var n=-1,s=t.numTables-1;s>=0;s-=1){var i=C.getUShort(r,e+4+s*8),o=C.getUShort(r,e+4+s*8+2);if(i===3&&(o===0||o===1||o===10)||i===0&&(o===0||o===1||o===2||o===3||o===4)){n=C.getULong(r,e+4+s*8+4);break}}if(n===-1)throw new Error("No valid cmap sub-tables found.");var a=new C.Parser(r,e+n);if(t.format=a.parseUShort(),t.format===12)na(t,a);else if(t.format===4)sa(t,a,r,e,n);else throw new Error("Only format 4 and 12 cmap tables are supported (found format "+t.format+").");return t}function oa(r,e,t){r.segments.push({end:e,start:e,delta:-(e-t),offset:0,glyphIndex:t})}function aa(r){r.segments.push({end:65535,start:65535,delta:1,offset:0})}function ua(r){var e=!0,t;for(t=r.length-1;t>0;t-=1){var n=r.get(t);if(n.unicode>65535){console.log("Adding CMAP format 12 (needed!)"),e=!1;break}}var s=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:e?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:e?12:20}];e||(s=s.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),s=s.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var i=new I.Table("cmap",s);for(i.segments=[],t=0;t<r.length;t+=1){for(var o=r.get(t),a=0;a<o.unicodes.length;a+=1)oa(i,o.unicodes[a],t);i.segments=i.segments.sort(function(S,w){return S.start-w.start})}aa(i);var u=i.segments.length,l=0,f=[],c=[],h=[],p=[],g=[],m=[];for(t=0;t<u;t+=1){var x=i.segments[t];x.end<=65535&&x.start<=65535?(f=f.concat({name:"end_"+t,type:"USHORT",value:x.end}),c=c.concat({name:"start_"+t,type:"USHORT",value:x.start}),h=h.concat({name:"idDelta_"+t,type:"SHORT",value:x.delta}),p=p.concat({name:"idRangeOffset_"+t,type:"USHORT",value:x.offset}),x.glyphId!==void 0&&(g=g.concat({name:"glyph_"+t,type:"USHORT",value:x.glyphId}))):l+=1,!e&&x.glyphIndex!==void 0&&(m=m.concat({name:"cmap12Start_"+t,type:"ULONG",value:x.start}),m=m.concat({name:"cmap12End_"+t,type:"ULONG",value:x.end}),m=m.concat({name:"cmap12Glyph_"+t,type:"ULONG",value:x.glyphIndex}))}if(i.segCountX2=(u-l)*2,i.searchRange=Math.pow(2,Math.floor(Math.log(u-l)/Math.log(2)))*2,i.entrySelector=Math.log(i.searchRange/2)/Math.log(2),i.rangeShift=i.segCountX2-i.searchRange,i.fields=i.fields.concat(f),i.fields.push({name:"reservedPad",type:"USHORT",value:0}),i.fields=i.fields.concat(c),i.fields=i.fields.concat(h),i.fields=i.fields.concat(p),i.fields=i.fields.concat(g),i.cmap4Length=14+f.length*2+2+c.length*2+h.length*2+p.length*2+g.length*2,!e){var y=16+m.length*4;i.cmap12Offset=20+i.cmap4Length,i.fields=i.fields.concat([{name:"cmap12Format",type:"USHORT",value:12},{name:"cmap12Reserved",type:"USHORT",value:0},{name:"cmap12Length",type:"ULONG",value:y},{name:"cmap12Language",type:"ULONG",value:0},{name:"cmap12nGroups",type:"ULONG",value:m.length/3}]),i.fields=i.fields.concat(m)}return i}var oi={parse:ia,make:ua},Er=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","266 ff","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],la=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls"],fa=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],pt=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function ai(r){this.font=r}ai.prototype.charToGlyphIndex=function(r){var e=r.codePointAt(0),t=this.font.glyphs;if(t){for(var n=0;n<t.length;n+=1)for(var s=t.get(n),i=0;i<s.unicodes.length;i+=1)if(s.unicodes[i]===e)return n}return null};function ui(r){this.cmap=r}ui.prototype.charToGlyphIndex=function(r){return this.cmap.glyphIndexMap[r.codePointAt(0)]||0};function Or(r,e){this.encoding=r,this.charset=e}Or.prototype.charToGlyphIndex=function(r){var e=r.codePointAt(0),t=this.encoding[e];return this.charset.indexOf(t)};function En(r){switch(r.version){case 1:this.names=pt.slice();break;case 2:this.names=new Array(r.numberOfGlyphs);for(var e=0;e<r.numberOfGlyphs;e++)r.glyphNameIndex[e]<pt.length?this.names[e]=pt[r.glyphNameIndex[e]]:this.names[e]=r.names[r.glyphNameIndex[e]-pt.length];break;case 2.5:this.names=new Array(r.numberOfGlyphs);for(var t=0;t<r.numberOfGlyphs;t++)this.names[t]=pt[t+r.glyphNameIndex[t]];break;case 3:this.names=[];break;default:this.names=[];break}}En.prototype.nameToGlyphIndex=function(r){return this.names.indexOf(r)};En.prototype.glyphIndexToName=function(r){return this.names[r]};function ha(r){for(var e,t=r.tables.cmap.glyphIndexMap,n=Object.keys(t),s=0;s<n.length;s+=1){var i=n[s],o=t[i];e=r.glyphs.get(o),e.addUnicode(parseInt(i))}for(var a=0;a<r.glyphs.length;a+=1)e=r.glyphs.get(a),r.cffEncoding?r.isCIDFont?e.name="gid"+a:e.name=r.cffEncoding.charset[a]:r.glyphNames.names&&(e.name=r.glyphNames.glyphIndexToName(a))}function ca(r){r._IndexToUnicodeMap={};for(var e=r.tables.cmap.glyphIndexMap,t=Object.keys(e),n=0;n<t.length;n+=1){var s=t[n],i=e[s];r._IndexToUnicodeMap[i]===void 0?r._IndexToUnicodeMap[i]={unicodes:[parseInt(s)]}:r._IndexToUnicodeMap[i].unicodes.push(parseInt(s))}}function pa(r,e){e.lowMemory?ca(r):ha(r)}function da(r,e,t,n,s){r.beginPath(),r.moveTo(e,t),r.lineTo(n,s),r.stroke()}var ct={line:da};function ga(r,e){var t=e||new fe;return{configurable:!0,get:function(){return typeof t=="function"&&(t=t()),t},set:function(n){t=n}}}function Ce(r){this.bindConstructorValues(r)}Ce.prototype.bindConstructorValues=function(r){this.index=r.index||0,this.name=r.name||null,this.unicode=r.unicode||void 0,this.unicodes=r.unicodes||r.unicode!==void 0?[r.unicode]:[],"xMin"in r&&(this.xMin=r.xMin),"yMin"in r&&(this.yMin=r.yMin),"xMax"in r&&(this.xMax=r.xMax),"yMax"in r&&(this.yMax=r.yMax),"advanceWidth"in r&&(this.advanceWidth=r.advanceWidth),Object.defineProperty(this,"path",ga(this,r.path))};Ce.prototype.addUnicode=function(r){this.unicodes.length===0&&(this.unicode=r),this.unicodes.push(r)};Ce.prototype.getBoundingBox=function(){return this.path.getBoundingBox()};Ce.prototype.getPath=function(r,e,t,n,s){r=r!==void 0?r:0,e=e!==void 0?e:0,t=t!==void 0?t:72;var i,o;n||(n={});var a=n.xScale,u=n.yScale;if(n.hinting&&s&&s.hinting&&(o=this.path&&s.hinting.exec(this,t)),o)i=s.hinting.getCommands(o),r=Math.round(r),e=Math.round(e),a=u=1;else{i=this.path.commands;var l=1/(this.path.unitsPerEm||1e3)*t;a===void 0&&(a=l),u===void 0&&(u=l)}for(var f=new fe,c=0;c<i.length;c+=1){var h=i[c];h.type==="M"?f.moveTo(r+h.x*a,e+-h.y*u):h.type==="L"?f.lineTo(r+h.x*a,e+-h.y*u):h.type==="Q"?f.quadraticCurveTo(r+h.x1*a,e+-h.y1*u,r+h.x*a,e+-h.y*u):h.type==="C"?f.curveTo(r+h.x1*a,e+-h.y1*u,r+h.x2*a,e+-h.y2*u,r+h.x*a,e+-h.y*u):h.type==="Z"&&f.closePath()}return f};Ce.prototype.getContours=function(){if(this.points===void 0)return[];for(var r=[],e=[],t=0;t<this.points.length;t+=1){var n=this.points[t];e.push(n),n.lastPointOfContour&&(r.push(e),e=[])}return R.argument(e.length===0,"There are still points left in the current contour."),r};Ce.prototype.getMetrics=function(){for(var r=this.path.commands,e=[],t=[],n=0;n<r.length;n+=1){var s=r[n];s.type!=="Z"&&(e.push(s.x),t.push(s.y)),(s.type==="Q"||s.type==="C")&&(e.push(s.x1),t.push(s.y1)),s.type==="C"&&(e.push(s.x2),t.push(s.y2))}var i={xMin:Math.min.apply(null,e),yMin:Math.min.apply(null,t),xMax:Math.max.apply(null,e),yMax:Math.max.apply(null,t),leftSideBearing:this.leftSideBearing};return isFinite(i.xMin)||(i.xMin=0),isFinite(i.xMax)||(i.xMax=this.advanceWidth),isFinite(i.yMin)||(i.yMin=0),isFinite(i.yMax)||(i.yMax=0),i.rightSideBearing=this.advanceWidth-i.leftSideBearing-(i.xMax-i.xMin),i};Ce.prototype.draw=function(r,e,t,n,s){this.getPath(e,t,n,s).draw(r)};Ce.prototype.drawPoints=function(r,e,t,n){function s(c,h,p,g){r.beginPath();for(var m=0;m<c.length;m+=1)r.moveTo(h+c[m].x*g,p+c[m].y*g),r.arc(h+c[m].x*g,p+c[m].y*g,2,0,Math.PI*2,!1);r.closePath(),r.fill()}e=e!==void 0?e:0,t=t!==void 0?t:0,n=n!==void 0?n:24;for(var i=1/this.path.unitsPerEm*n,o=[],a=[],u=this.path,l=0;l<u.commands.length;l+=1){var f=u.commands[l];f.x!==void 0&&o.push({x:f.x,y:-f.y}),f.x1!==void 0&&a.push({x:f.x1,y:-f.y1}),f.x2!==void 0&&a.push({x:f.x2,y:-f.y2})}r.fillStyle="blue",s(o,e,t,i),r.fillStyle="red",s(a,e,t,i)};Ce.prototype.drawMetrics=function(r,e,t,n){var s;e=e!==void 0?e:0,t=t!==void 0?t:0,n=n!==void 0?n:24,s=1/this.path.unitsPerEm*n,r.lineWidth=1,r.strokeStyle="black",ct.line(r,e,-1e4,e,1e4),ct.line(r,-1e4,t,1e4,t);var i=this.xMin||0,o=this.yMin||0,a=this.xMax||0,u=this.yMax||0,l=this.advanceWidth||0;r.strokeStyle="blue",ct.line(r,e+i*s,-1e4,e+i*s,1e4),ct.line(r,e+a*s,-1e4,e+a*s,1e4),ct.line(r,-1e4,t+-o*s,1e4,t+-o*s),ct.line(r,-1e4,t+-u*s,1e4,t+-u*s),r.strokeStyle="green",ct.line(r,e+l*s,-1e4,e+l*s,1e4)};function wr(r,e,t){Object.defineProperty(r,e,{get:function(){return r.path,r[t]},set:function(n){r[t]=n},enumerable:!0,configurable:!0})}function Pn(r,e){if(this.font=r,this.glyphs={},Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];n.path.unitsPerEm=r.unitsPerEm,this.glyphs[t]=n}this.length=e&&e.length||0}Pn.prototype.get=function(r){if(this.glyphs[r]===void 0){this.font._push(r),typeof this.glyphs[r]=="function"&&(this.glyphs[r]=this.glyphs[r]());var e=this.glyphs[r],t=this.font._IndexToUnicodeMap[r];if(t)for(var n=0;n<t.unicodes.length;n++)e.addUnicode(t.unicodes[n]);this.font.cffEncoding?this.font.isCIDFont?e.name="gid"+r:e.name=this.font.cffEncoding.charset[r]:this.font.glyphNames.names&&(e.name=this.font.glyphNames.glyphIndexToName(r)),this.glyphs[r].advanceWidth=this.font._hmtxTableData[r].advanceWidth,this.glyphs[r].leftSideBearing=this.font._hmtxTableData[r].leftSideBearing}else typeof this.glyphs[r]=="function"&&(this.glyphs[r]=this.glyphs[r]());return this.glyphs[r]};Pn.prototype.push=function(r,e){this.glyphs[r]=e,this.length++};function va(r,e){return new Ce({index:e,font:r})}function ma(r,e,t,n,s,i){return function(){var o=new Ce({index:e,font:r});return o.path=function(){t(o,n,s);var a=i(r.glyphs,o);return a.unitsPerEm=r.unitsPerEm,a},wr(o,"xMin","_xMin"),wr(o,"xMax","_xMax"),wr(o,"yMin","_yMin"),wr(o,"yMax","_yMax"),o}}function xa(r,e,t,n){return function(){var s=new Ce({index:e,font:r});return s.path=function(){var i=t(r,s,n);return i.unitsPerEm=r.unitsPerEm,i},s}}var qe={GlyphSet:Pn,glyphLoader:va,ttfGlyphLoader:ma,cffGlyphLoader:xa};function li(r,e){if(r===e)return!0;if(Array.isArray(r)&&Array.isArray(e)){if(r.length!==e.length)return!1;for(var t=0;t<r.length;t+=1)if(!li(r[t],e[t]))return!1;return!0}else return!1}function gn(r){var e;return r.length<1240?e=107:r.length<33900?e=1131:e=32768,e}function et(r,e,t){var n=[],s=[],i=C.getCard16(r,e),o,a;if(i!==0){var u=C.getByte(r,e+2);o=e+(i+1)*u+2;for(var l=e+3,f=0;f<i+1;f+=1)n.push(C.getOffset(r,l,u)),l+=u;a=o+n[i]}else a=e+2;for(var c=0;c<n.length-1;c+=1){var h=C.getBytes(r,o+n[c],o+n[c+1]);t&&(h=t(h)),s.push(h)}return{objects:s,startOffset:e,endOffset:a}}function ya(r,e){var t=[],n=C.getCard16(r,e),s,i;if(n!==0){var o=C.getByte(r,e+2);s=e+(n+1)*o+2;for(var a=e+3,u=0;u<n+1;u+=1)t.push(C.getOffset(r,a,o)),a+=o;i=s+t[n]}else i=e+2;return{offsets:t,startOffset:e,endOffset:i}}function ba(r,e,t,n,s){var i=C.getCard16(t,n),o=0;if(i!==0){var a=C.getByte(t,n+2);o=n+(i+1)*a+2}var u=C.getBytes(t,o+e[r],o+e[r+1]);return s&&(u=s(u)),u}function Sa(r){for(var e="",t=15,n=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"];;){var s=r.parseByte(),i=s>>4,o=s&15;if(i===t||(e+=n[i],o===t))break;e+=n[o]}return parseFloat(e)}function wa(r,e){var t,n,s,i;if(e===28)return t=r.parseByte(),n=r.parseByte(),t<<8|n;if(e===29)return t=r.parseByte(),n=r.parseByte(),s=r.parseByte(),i=r.parseByte(),t<<24|n<<16|s<<8|i;if(e===30)return Sa(r);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return t=r.parseByte(),(e-247)*256+t+108;if(e>=251&&e<=254)return t=r.parseByte(),-(e-251)*256-t-108;throw new Error("Invalid b0 "+e)}function ka(r){for(var e={},t=0;t<r.length;t+=1){var n=r[t][0],s=r[t][1],i=void 0;if(s.length===1?i=s[0]:i=s,e.hasOwnProperty(n)&&!isNaN(e[n]))throw new Error("Object "+e+" already has key "+n);e[n]=i}return e}function fi(r,e,t){e=e!==void 0?e:0;var n=new C.Parser(r,e),s=[],i=[];for(t=t!==void 0?t:r.length;n.relativeOffset<t;){var o=n.parseByte();o<=21?(o===12&&(o=1200+n.parseByte()),s.push([o,i]),i=[]):i.push(wa(n,o))}return ka(s)}function zt(r,e){return e<=390?e=Er[e]:e=r[e-391],e}function hi(r,e,t){for(var n={},s,i=0;i<e.length;i+=1){var o=e[i];if(Array.isArray(o.type)){var a=[];a.length=o.type.length;for(var u=0;u<o.type.length;u++)s=r[o.op]!==void 0?r[o.op][u]:void 0,s===void 0&&(s=o.value!==void 0&&o.value[u]!==void 0?o.value[u]:null),o.type[u]==="SID"&&(s=zt(t,s)),a[u]=s;n[o.name]=a}else s=r[o.op],s===void 0&&(s=o.value!==void 0?o.value:null),o.type==="SID"&&(s=zt(t,s)),n[o.name]=s}return n}function Ea(r,e){var t={};return t.formatMajor=C.getCard8(r,e),t.formatMinor=C.getCard8(r,e+1),t.size=C.getCard8(r,e+2),t.offsetSize=C.getCard8(r,e+3),t.startOffset=e,t.endOffset=e+4,t}var ci=[{name:"version",op:0,type:"SID"},{name:"notice",op:1,type:"SID"},{name:"copyright",op:1200,type:"SID"},{name:"fullName",op:2,type:"SID"},{name:"familyName",op:3,type:"SID"},{name:"weight",op:4,type:"SID"},{name:"isFixedPitch",op:1201,type:"number",value:0},{name:"italicAngle",op:1202,type:"number",value:0},{name:"underlinePosition",op:1203,type:"number",value:-100},{name:"underlineThickness",op:1204,type:"number",value:50},{name:"paintType",op:1205,type:"number",value:0},{name:"charstringType",op:1206,type:"number",value:2},{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"uniqueId",op:13,type:"number"},{name:"fontBBox",op:5,type:["number","number","number","number"],value:[0,0,0,0]},{name:"strokeWidth",op:1208,type:"number",value:0},{name:"xuid",op:14,type:[],value:null},{name:"charset",op:15,type:"offset",value:0},{name:"encoding",op:16,type:"offset",value:0},{name:"charStrings",op:17,type:"offset",value:0},{name:"private",op:18,type:["number","offset"],value:[0,0]},{name:"ros",op:1230,type:["SID","SID","number"]},{name:"cidFontVersion",op:1231,type:"number",value:0},{name:"cidFontRevision",op:1232,type:"number",value:0},{name:"cidFontType",op:1233,type:"number",value:0},{name:"cidCount",op:1234,type:"number",value:8720},{name:"uidBase",op:1235,type:"number"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"fontName",op:1238,type:"SID"}],pi=[{name:"subrs",op:19,type:"offset",value:0},{name:"defaultWidthX",op:20,type:"number",value:0},{name:"nominalWidthX",op:21,type:"number",value:0}];function Pa(r,e){var t=fi(r,0,r.byteLength);return hi(t,ci,e)}function di(r,e,t,n){var s=fi(r,e,t);return hi(s,pi,n)}function Ss(r,e,t,n){for(var s=[],i=0;i<t.length;i+=1){var o=new DataView(new Uint8Array(t[i]).buffer),a=Pa(o,n);a._subrs=[],a._subrsBias=0,a._defaultWidthX=0,a._nominalWidthX=0;var u=a.private[0],l=a.private[1];if(u!==0&&l!==0){var f=di(r,l+e,u,n);if(a._defaultWidthX=f.defaultWidthX,a._nominalWidthX=f.nominalWidthX,f.subrs!==0){var c=l+f.subrs,h=et(r,c+e);a._subrs=h.objects,a._subrsBias=gn(a._subrs)}a._privateDict=f}s.push(a)}return s}function La(r,e,t,n){var s,i,o=new C.Parser(r,e);t-=1;var a=[".notdef"],u=o.parseCard8();if(u===0)for(var l=0;l<t;l+=1)s=o.parseSID(),a.push(zt(n,s));else if(u===1)for(;a.length<=t;){s=o.parseSID(),i=o.parseCard8();for(var f=0;f<=i;f+=1)a.push(zt(n,s)),s+=1}else if(u===2)for(;a.length<=t;){s=o.parseSID(),i=o.parseCard16();for(var c=0;c<=i;c+=1)a.push(zt(n,s)),s+=1}else throw new Error("Unknown charset format "+u);return a}function Ia(r,e,t){var n,s={},i=new C.Parser(r,e),o=i.parseCard8();if(o===0)for(var a=i.parseCard8(),u=0;u<a;u+=1)n=i.parseCard8(),s[n]=u;else if(o===1){var l=i.parseCard8();n=1;for(var f=0;f<l;f+=1)for(var c=i.parseCard8(),h=i.parseCard8(),p=c;p<=c+h;p+=1)s[p]=n,n+=1}else throw new Error("Unknown encoding format "+o);return new Or(s,t)}function ws(r,e,t){var n,s,i,o,a=new fe,u=[],l=0,f=!1,c=!1,h=0,p=0,g,m,x,y;if(r.isCIDFont){var S=r.tables.cff.topDict._fdSelect[e.index],w=r.tables.cff.topDict._fdArray[S];g=w._subrs,m=w._subrsBias,x=w._defaultWidthX,y=w._nominalWidthX}else g=r.tables.cff.topDict._subrs,m=r.tables.cff.topDict._subrsBias,x=r.tables.cff.topDict._defaultWidthX,y=r.tables.cff.topDict._nominalWidthX;var F=x;function P(L,W){c&&a.closePath(),a.moveTo(L,W),c=!0}function U(){var L;L=u.length%2!==0,L&&!f&&(F=u.shift()+y),l+=u.length>>1,u.length=0,f=!0}function O(L){for(var W,_,Y,he,ce,Q,X,ee,k,M,A,G,D=0;D<L.length;){var H=L[D];switch(D+=1,H){case 1:U();break;case 3:U();break;case 4:u.length>1&&!f&&(F=u.shift()+y,f=!0),p+=u.pop(),P(h,p);break;case 5:for(;u.length>0;)h+=u.shift(),p+=u.shift(),a.lineTo(h,p);break;case 6:for(;u.length>0&&(h+=u.shift(),a.lineTo(h,p),u.length!==0);)p+=u.shift(),a.lineTo(h,p);break;case 7:for(;u.length>0&&(p+=u.shift(),a.lineTo(h,p),u.length!==0);)h+=u.shift(),a.lineTo(h,p);break;case 8:for(;u.length>0;)n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+u.shift(),a.curveTo(n,s,i,o,h,p);break;case 10:ce=u.pop()+m,Q=g[ce],Q&&O(Q);break;case 11:return;case 12:switch(H=L[D],D+=1,H){case 35:n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),X=i+u.shift(),ee=o+u.shift(),k=X+u.shift(),M=ee+u.shift(),A=k+u.shift(),G=M+u.shift(),h=A+u.shift(),p=G+u.shift(),u.shift(),a.curveTo(n,s,i,o,X,ee),a.curveTo(k,M,A,G,h,p);break;case 34:n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),X=i+u.shift(),ee=o,k=X+u.shift(),M=o,A=k+u.shift(),G=p,h=A+u.shift(),a.curveTo(n,s,i,o,X,ee),a.curveTo(k,M,A,G,h,p);break;case 36:n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),X=i+u.shift(),ee=o,k=X+u.shift(),M=o,A=k+u.shift(),G=M+u.shift(),h=A+u.shift(),a.curveTo(n,s,i,o,X,ee),a.curveTo(k,M,A,G,h,p);break;case 37:n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),X=i+u.shift(),ee=o+u.shift(),k=X+u.shift(),M=ee+u.shift(),A=k+u.shift(),G=M+u.shift(),Math.abs(A-h)>Math.abs(G-p)?h=A+u.shift():p=G+u.shift(),a.curveTo(n,s,i,o,X,ee),a.curveTo(k,M,A,G,h,p);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+H),u.length=0}break;case 14:u.length>0&&!f&&(F=u.shift()+y,f=!0),c&&(a.closePath(),c=!1);break;case 18:U();break;case 19:case 20:U(),D+=l+7>>3;break;case 21:u.length>2&&!f&&(F=u.shift()+y,f=!0),p+=u.pop(),h+=u.pop(),P(h,p);break;case 22:u.length>1&&!f&&(F=u.shift()+y,f=!0),h+=u.pop(),P(h,p);break;case 23:U();break;case 24:for(;u.length>2;)n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+u.shift(),a.curveTo(n,s,i,o,h,p);h+=u.shift(),p+=u.shift(),a.lineTo(h,p);break;case 25:for(;u.length>6;)h+=u.shift(),p+=u.shift(),a.lineTo(h,p);n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+u.shift(),a.curveTo(n,s,i,o,h,p);break;case 26:for(u.length%2&&(h+=u.shift());u.length>0;)n=h,s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i,p=o+u.shift(),a.curveTo(n,s,i,o,h,p);break;case 27:for(u.length%2&&(p+=u.shift());u.length>0;)n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o,a.curveTo(n,s,i,o,h,p);break;case 28:W=L[D],_=L[D+1],u.push((W<<24|_<<16)>>16),D+=2;break;case 29:ce=u.pop()+r.gsubrsBias,Q=r.gsubrs[ce],Q&&O(Q);break;case 30:for(;u.length>0&&(n=h,s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p),u.length!==0);)n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),p=o+u.shift(),h=i+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p);break;case 31:for(;u.length>0&&(n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),p=o+u.shift(),h=i+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p),u.length!==0);)n=h,s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p);break;default:H<32?console.log("Glyph "+e.index+": unknown operator "+H):H<247?u.push(H-139):H<251?(W=L[D],D+=1,u.push((H-247)*256+W+108)):H<255?(W=L[D],D+=1,u.push(-(H-251)*256-W-108)):(W=L[D],_=L[D+1],Y=L[D+2],he=L[D+3],D+=4,u.push((W<<24|_<<16|Y<<8|he)/65536))}}}return O(t),e.advanceWidth=F,a}function Ta(r,e,t,n){var s=[],i,o=new C.Parser(r,e),a=o.parseCard8();if(a===0)for(var u=0;u<t;u++){if(i=o.parseCard8(),i>=n)throw new Error("CFF table CID Font FDSelect has bad FD index value "+i+" (FD count "+n+")");s.push(i)}else if(a===3){var l=o.parseCard16(),f=o.parseCard16();if(f!==0)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+f);for(var c,h=0;h<l;h++){if(i=o.parseCard8(),c=o.parseCard16(),i>=n)throw new Error("CFF table CID Font FDSelect has bad FD index value "+i+" (FD count "+n+")");if(c>t)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;f<c;f++)s.push(i);f=c}if(c!==t)throw new Error("CFF Table CID Font FDSelect format 3 range has bad final GID "+c)}else throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);return s}function Ca(r,e,t,n){t.tables.cff={};var s=Ea(r,e),i=et(r,s.endOffset,C.bytesToString),o=et(r,i.endOffset),a=et(r,o.endOffset,C.bytesToString),u=et(r,a.endOffset);t.gsubrs=u.objects,t.gsubrsBias=gn(t.gsubrs);var l=Ss(r,e,o.objects,a.objects);if(l.length!==1)throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = "+l.length);var f=l[0];if(t.tables.cff.topDict=f,f._privateDict&&(t.defaultWidthX=f._privateDict.defaultWidthX,t.nominalWidthX=f._privateDict.nominalWidthX),f.ros[0]!==void 0&&f.ros[1]!==void 0&&(t.isCIDFont=!0),t.isCIDFont){var c=f.fdArray,h=f.fdSelect;if(c===0||h===0)throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing");c+=e;var p=et(r,c),g=Ss(r,e,p.objects,a.objects);f._fdArray=g,h+=e,f._fdSelect=Ta(r,h,t.numGlyphs,g.length)}var m=e+f.private[1],x=di(r,m,f.private[0],a.objects);if(t.defaultWidthX=x.defaultWidthX,t.nominalWidthX=x.nominalWidthX,x.subrs!==0){var y=m+x.subrs,S=et(r,y);t.subrs=S.objects,t.subrsBias=gn(t.subrs)}else t.subrs=[],t.subrsBias=0;var w;n.lowMemory?(w=ya(r,e+f.charStrings),t.nGlyphs=w.offsets.length):(w=et(r,e+f.charStrings),t.nGlyphs=w.objects.length);var F=La(r,e+f.charset,t.nGlyphs,a.objects);if(f.encoding===0?t.cffEncoding=new Or(la,F):f.encoding===1?t.cffEncoding=new Or(fa,F):t.cffEncoding=Ia(r,e+f.encoding,F),t.encoding=t.encoding||t.cffEncoding,t.glyphs=new qe.GlyphSet(t),n.lowMemory)t._push=function(O){var L=ba(O,w.offsets,r,e+f.charStrings);t.glyphs.push(O,qe.cffGlyphLoader(t,O,ws,L))};else for(var P=0;P<t.nGlyphs;P+=1){var U=w.objects[P];t.glyphs.push(P,qe.cffGlyphLoader(t,P,ws,U))}}function gi(r,e){var t,n=Er.indexOf(r);return n>=0&&(t=n),n=e.indexOf(r),n>=0?t=n+Er.length:(t=Er.length+e.length,e.push(r)),t}function Ma(){return new I.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function Oa(r){var e=new I.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);e.names=[];for(var t=0;t<r.length;t+=1)e.names.push({name:"name_"+t,type:"NAME",value:r[t]});return e}function vi(r,e,t){for(var n={},s=0;s<r.length;s+=1){var i=r[s],o=e[i.name];o!==void 0&&!li(o,i.value)&&(i.type==="SID"&&(o=gi(o,t)),n[i.op]={name:i.name,type:i.type,value:o})}return n}function ks(r,e){var t=new I.Record("Top DICT",[{name:"dict",type:"DICT",value:{}}]);return t.dict=vi(ci,r,e),t}function Es(r){var e=new I.Record("Top DICT INDEX",[{name:"topDicts",type:"INDEX",value:[]}]);return e.topDicts=[{name:"topDict_0",type:"TABLE",value:r}],e}function Fa(r){var e=new I.Record("String INDEX",[{name:"strings",type:"INDEX",value:[]}]);e.strings=[];for(var t=0;t<r.length;t+=1)e.strings.push({name:"string_"+t,type:"STRING",value:r[t]});return e}function Aa(){return new I.Record("Global Subr INDEX",[{name:"subrs",type:"INDEX",value:[]}])}function Da(r,e){for(var t=new I.Record("Charsets",[{name:"format",type:"Card8",value:0}]),n=0;n<r.length;n+=1){var s=r[n],i=gi(s,e);t.fields.push({name:"glyph_"+n,type:"SID",value:i})}return t}function Ua(r){var e=[],t=r.path;e.push({name:"width",type:"NUMBER",value:r.advanceWidth});for(var n=0,s=0,i=0;i<t.commands.length;i+=1){var o=void 0,a=void 0,u=t.commands[i];if(u.type==="Q"){var l=.3333333333333333,f=2/3;u={type:"C",x:u.x,y:u.y,x1:Math.round(l*n+f*u.x1),y1:Math.round(l*s+f*u.y1),x2:Math.round(l*u.x+f*u.x1),y2:Math.round(l*u.y+f*u.y1)}}if(u.type==="M")o=Math.round(u.x-n),a=Math.round(u.y-s),e.push({name:"dx",type:"NUMBER",value:o}),e.push({name:"dy",type:"NUMBER",value:a}),e.push({name:"rmoveto",type:"OP",value:21}),n=Math.round(u.x),s=Math.round(u.y);else if(u.type==="L")o=Math.round(u.x-n),a=Math.round(u.y-s),e.push({name:"dx",type:"NUMBER",value:o}),e.push({name:"dy",type:"NUMBER",value:a}),e.push({name:"rlineto",type:"OP",value:5}),n=Math.round(u.x),s=Math.round(u.y);else if(u.type==="C"){var c=Math.round(u.x1-n),h=Math.round(u.y1-s),p=Math.round(u.x2-u.x1),g=Math.round(u.y2-u.y1);o=Math.round(u.x-u.x2),a=Math.round(u.y-u.y2),e.push({name:"dx1",type:"NUMBER",value:c}),e.push({name:"dy1",type:"NUMBER",value:h}),e.push({name:"dx2",type:"NUMBER",value:p}),e.push({name:"dy2",type:"NUMBER",value:g}),e.push({name:"dx",type:"NUMBER",value:o}),e.push({name:"dy",type:"NUMBER",value:a}),e.push({name:"rrcurveto",type:"OP",value:8}),n=Math.round(u.x),s=Math.round(u.y)}}return e.push({name:"endchar",type:"OP",value:14}),e}function Ra(r){for(var e=new I.Record("CharStrings INDEX",[{name:"charStrings",type:"INDEX",value:[]}]),t=0;t<r.length;t+=1){var n=r.get(t),s=Ua(n);e.charStrings.push({name:n.name,type:"CHARSTRING",value:s})}return e}function Na(r,e){var t=new I.Record("Private DICT",[{name:"dict",type:"DICT",value:{}}]);return t.dict=vi(pi,r,e),t}function Ba(r,e){for(var t=new I.Table("CFF ",[{name:"header",type:"RECORD"},{name:"nameIndex",type:"RECORD"},{name:"topDictIndex",type:"RECORD"},{name:"stringIndex",type:"RECORD"},{name:"globalSubrIndex",type:"RECORD"},{name:"charsets",type:"RECORD"},{name:"charStringsIndex",type:"RECORD"},{name:"privateDict",type:"RECORD"}]),n=1/e.unitsPerEm,s={version:e.version,fullName:e.fullName,familyName:e.familyName,weight:e.weightName,fontBBox:e.fontBBox||[0,0,0,0],fontMatrix:[n,0,0,n,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]},i={},o=[],a,u=1;u<r.length;u+=1)a=r.get(u),o.push(a.name);var l=[];t.header=Ma(),t.nameIndex=Oa([e.postScriptName]);var f=ks(s,l);t.topDictIndex=Es(f),t.globalSubrIndex=Aa(),t.charsets=Da(o,l),t.charStringsIndex=Ra(r),t.privateDict=Na(i,l),t.stringIndex=Fa(l);var c=t.header.sizeOf()+t.nameIndex.sizeOf()+t.topDictIndex.sizeOf()+t.stringIndex.sizeOf()+t.globalSubrIndex.sizeOf();return s.charset=c,s.encoding=0,s.charStrings=s.charset+t.charsets.sizeOf(),s.private[1]=s.charStrings+t.charStringsIndex.sizeOf(),f=ks(s,l),t.topDictIndex=Es(f),t}var mi={parse:Ca,make:Ba};function Ga(r,e){var t={},n=new C.Parser(r,e);return t.version=n.parseVersion(),t.fontRevision=Math.round(n.parseFixed()*1e3)/1e3,t.checkSumAdjustment=n.parseULong(),t.magicNumber=n.parseULong(),R.argument(t.magicNumber===1594834165,"Font header has wrong magic number."),t.flags=n.parseUShort(),t.unitsPerEm=n.parseUShort(),t.created=n.parseLongDateTime(),t.modified=n.parseLongDateTime(),t.xMin=n.parseShort(),t.yMin=n.parseShort(),t.xMax=n.parseShort(),t.yMax=n.parseShort(),t.macStyle=n.parseUShort(),t.lowestRecPPEM=n.parseUShort(),t.fontDirectionHint=n.parseShort(),t.indexToLocFormat=n.parseShort(),t.glyphDataFormat=n.parseShort(),t}function Ha(r){var e=Math.round(new Date().getTime()/1e3)+2082844800,t=e;return r.createdTimestamp&&(t=r.createdTimestamp+2082844800),new I.Table("head",[{name:"version",type:"FIXED",value:65536},{name:"fontRevision",type:"FIXED",value:65536},{name:"checkSumAdjustment",type:"ULONG",value:0},{name:"magicNumber",type:"ULONG",value:1594834165},{name:"flags",type:"USHORT",value:0},{name:"unitsPerEm",type:"USHORT",value:1e3},{name:"created",type:"LONGDATETIME",value:t},{name:"modified",type:"LONGDATETIME",value:e},{name:"xMin",type:"SHORT",value:0},{name:"yMin",type:"SHORT",value:0},{name:"xMax",type:"SHORT",value:0},{name:"yMax",type:"SHORT",value:0},{name:"macStyle",type:"USHORT",value:0},{name:"lowestRecPPEM",type:"USHORT",value:0},{name:"fontDirectionHint",type:"SHORT",value:2},{name:"indexToLocFormat",type:"SHORT",value:0},{name:"glyphDataFormat",type:"SHORT",value:0}],r)}var xi={parse:Ga,make:Ha};function za(r,e){var t={},n=new C.Parser(r,e);return t.version=n.parseVersion(),t.ascender=n.parseShort(),t.descender=n.parseShort(),t.lineGap=n.parseShort(),t.advanceWidthMax=n.parseUShort(),t.minLeftSideBearing=n.parseShort(),t.minRightSideBearing=n.parseShort(),t.xMaxExtent=n.parseShort(),t.caretSlopeRise=n.parseShort(),t.caretSlopeRun=n.parseShort(),t.caretOffset=n.parseShort(),n.relativeOffset+=8,t.metricDataFormat=n.parseShort(),t.numberOfHMetrics=n.parseUShort(),t}function Va(r){return new I.Table("hhea",[{name:"version",type:"FIXED",value:65536},{name:"ascender",type:"FWORD",value:0},{name:"descender",type:"FWORD",value:0},{name:"lineGap",type:"FWORD",value:0},{name:"advanceWidthMax",type:"UFWORD",value:0},{name:"minLeftSideBearing",type:"FWORD",value:0},{name:"minRightSideBearing",type:"FWORD",value:0},{name:"xMaxExtent",type:"FWORD",value:0},{name:"caretSlopeRise",type:"SHORT",value:1},{name:"caretSlopeRun",type:"SHORT",value:0},{name:"caretOffset",type:"SHORT",value:0},{name:"reserved1",type:"SHORT",value:0},{name:"reserved2",type:"SHORT",value:0},{name:"reserved3",type:"SHORT",value:0},{name:"reserved4",type:"SHORT",value:0},{name:"metricDataFormat",type:"SHORT",value:0},{name:"numberOfHMetrics",type:"USHORT",value:0}],r)}var yi={parse:za,make:Va};function Xa(r,e,t,n,s){for(var i,o,a=new C.Parser(r,e),u=0;u<n;u+=1){u<t&&(i=a.parseUShort(),o=a.parseShort());var l=s.get(u);l.advanceWidth=i,l.leftSideBearing=o}}function qa(r,e,t,n,s){r._hmtxTableData={};for(var i,o,a=new C.Parser(e,t),u=0;u<s;u+=1)u<n&&(i=a.parseUShort(),o=a.parseShort()),r._hmtxTableData[u]={advanceWidth:i,leftSideBearing:o}}function Wa(r,e,t,n,s,i,o){o.lowMemory?qa(r,e,t,n,s):Xa(e,t,n,s,i)}function $a(r){for(var e=new I.Table("hmtx",[]),t=0;t<r.length;t+=1){var n=r.get(t),s=n.advanceWidth||0,i=n.leftSideBearing||0;e.fields.push({name:"advanceWidth_"+t,type:"USHORT",value:s}),e.fields.push({name:"leftSideBearing_"+t,type:"SHORT",value:i})}return e}var bi={parse:Wa,make:$a};function Za(r){for(var e=new I.Table("ltag",[{name:"version",type:"ULONG",value:1},{name:"flags",type:"ULONG",value:0},{name:"numTags",type:"ULONG",value:r.length}]),t="",n=12+r.length*4,s=0;s<r.length;++s){var i=t.indexOf(r[s]);i<0&&(i=t.length,t+=r[s]),e.fields.push({name:"offset "+s,type:"USHORT",value:n+i}),e.fields.push({name:"length "+s,type:"USHORT",value:r[s].length})}return e.fields.push({name:"stringPool",type:"CHARARRAY",value:t}),e}function _a(r,e){var t=new C.Parser(r,e),n=t.parseULong();R.argument(n===1,"Unsupported ltag table version."),t.skip("uLong",1);for(var s=t.parseULong(),i=[],o=0;o<s;o++){for(var a="",u=e+t.parseUShort(),l=t.parseUShort(),f=u;f<u+l;++f)a+=String.fromCharCode(r.getInt8(f));i.push(a)}return i}var Si={make:Za,parse:_a};function Ya(r,e){var t={},n=new C.Parser(r,e);return t.version=n.parseVersion(),t.numGlyphs=n.parseUShort(),t.version===1&&(t.maxPoints=n.parseUShort(),t.maxContours=n.parseUShort(),t.maxCompositePoints=n.parseUShort(),t.maxCompositeContours=n.parseUShort(),t.maxZones=n.parseUShort(),t.maxTwilightPoints=n.parseUShort(),t.maxStorage=n.parseUShort(),t.maxFunctionDefs=n.parseUShort(),t.maxInstructionDefs=n.parseUShort(),t.maxStackElements=n.parseUShort(),t.maxSizeOfInstructions=n.parseUShort(),t.maxComponentElements=n.parseUShort(),t.maxComponentDepth=n.parseUShort()),t}function ja(r){return new I.Table("maxp",[{name:"version",type:"FIXED",value:20480},{name:"numGlyphs",type:"USHORT",value:r}])}var wi={parse:Ya,make:ja},ki=["copyright","fontFamily","fontSubfamily","uniqueID","fullName","version","postScriptName","trademark","manufacturer","designer","description","manufacturerURL","designerURL","license","licenseURL","reserved","preferredFamily","preferredSubfamily","compatibleFullName","sampleText","postScriptFindFontName","wwsFamily","wwsSubfamily"],Ei={0:"en",1:"fr",2:"de",3:"it",4:"nl",5:"sv",6:"es",7:"da",8:"pt",9:"no",10:"he",11:"ja",12:"ar",13:"fi",14:"el",15:"is",16:"mt",17:"tr",18:"hr",19:"zh-Hant",20:"ur",21:"hi",22:"th",23:"ko",24:"lt",25:"pl",26:"hu",27:"es",28:"lv",29:"se",30:"fo",31:"fa",32:"ru",33:"zh",34:"nl-BE",35:"ga",36:"sq",37:"ro",38:"cz",39:"sk",40:"si",41:"yi",42:"sr",43:"mk",44:"bg",45:"uk",46:"be",47:"uz",48:"kk",49:"az-Cyrl",50:"az-Arab",51:"hy",52:"ka",53:"mo",54:"ky",55:"tg",56:"tk",57:"mn-CN",58:"mn",59:"ps",60:"ks",61:"ku",62:"sd",63:"bo",64:"ne",65:"sa",66:"mr",67:"bn",68:"as",69:"gu",70:"pa",71:"or",72:"ml",73:"kn",74:"ta",75:"te",76:"si",77:"my",78:"km",79:"lo",80:"vi",81:"id",82:"tl",83:"ms",84:"ms-Arab",85:"am",86:"ti",87:"om",88:"so",89:"sw",90:"rw",91:"rn",92:"ny",93:"mg",94:"eo",128:"cy",129:"eu",130:"ca",131:"la",132:"qu",133:"gn",134:"ay",135:"tt",136:"ug",137:"dz",138:"jv",139:"su",140:"gl",141:"af",142:"br",143:"iu",144:"gd",145:"gv",146:"ga",147:"to",148:"el-polyton",149:"kl",150:"az",151:"nn"},Ka={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0},Pi={1078:"af",1052:"sq",1156:"gsw",1118:"am",5121:"ar-DZ",15361:"ar-BH",3073:"ar",2049:"ar-IQ",11265:"ar-JO",13313:"ar-KW",12289:"ar-LB",4097:"ar-LY",6145:"ary",8193:"ar-OM",16385:"ar-QA",1025:"ar-SA",10241:"ar-SY",7169:"aeb",14337:"ar-AE",9217:"ar-YE",1067:"hy",1101:"as",2092:"az-Cyrl",1068:"az",1133:"ba",1069:"eu",1059:"be",2117:"bn",1093:"bn-IN",8218:"bs-Cyrl",5146:"bs",1150:"br",1026:"bg",1027:"ca",3076:"zh-HK",5124:"zh-MO",2052:"zh",4100:"zh-SG",1028:"zh-TW",1155:"co",1050:"hr",4122:"hr-BA",1029:"cs",1030:"da",1164:"prs",1125:"dv",2067:"nl-BE",1043:"nl",3081:"en-AU",10249:"en-BZ",4105:"en-CA",9225:"en-029",16393:"en-IN",6153:"en-IE",8201:"en-JM",17417:"en-MY",5129:"en-NZ",13321:"en-PH",18441:"en-SG",7177:"en-ZA",11273:"en-TT",2057:"en-GB",1033:"en",12297:"en-ZW",1061:"et",1080:"fo",1124:"fil",1035:"fi",2060:"fr-BE",3084:"fr-CA",1036:"fr",5132:"fr-LU",6156:"fr-MC",4108:"fr-CH",1122:"fy",1110:"gl",1079:"ka",3079:"de-AT",1031:"de",5127:"de-LI",4103:"de-LU",2055:"de-CH",1032:"el",1135:"kl",1095:"gu",1128:"ha",1037:"he",1081:"hi",1038:"hu",1039:"is",1136:"ig",1057:"id",1117:"iu",2141:"iu-Latn",2108:"ga",1076:"xh",1077:"zu",1040:"it",2064:"it-CH",1041:"ja",1099:"kn",1087:"kk",1107:"km",1158:"quc",1159:"rw",1089:"sw",1111:"kok",1042:"ko",1088:"ky",1108:"lo",1062:"lv",1063:"lt",2094:"dsb",1134:"lb",1071:"mk",2110:"ms-BN",1086:"ms",1100:"ml",1082:"mt",1153:"mi",1146:"arn",1102:"mr",1148:"moh",1104:"mn",2128:"mn-CN",1121:"ne",1044:"nb",2068:"nn",1154:"oc",1096:"or",1123:"ps",1045:"pl",1046:"pt",2070:"pt-PT",1094:"pa",1131:"qu-BO",2155:"qu-EC",3179:"qu",1048:"ro",1047:"rm",1049:"ru",9275:"smn",4155:"smj-NO",5179:"smj",3131:"se-FI",1083:"se",2107:"se-SE",8251:"sms",6203:"sma-NO",7227:"sms",1103:"sa",7194:"sr-Cyrl-BA",3098:"sr",6170:"sr-Latn-BA",2074:"sr-Latn",1132:"nso",1074:"tn",1115:"si",1051:"sk",1060:"sl",11274:"es-AR",16394:"es-BO",13322:"es-CL",9226:"es-CO",5130:"es-CR",7178:"es-DO",12298:"es-EC",17418:"es-SV",4106:"es-GT",18442:"es-HN",2058:"es-MX",19466:"es-NI",6154:"es-PA",15370:"es-PY",10250:"es-PE",20490:"es-PR",3082:"es",1034:"es",21514:"es-US",14346:"es-UY",8202:"es-VE",2077:"sv-FI",1053:"sv",1114:"syr",1064:"tg",2143:"tzm",1097:"ta",1092:"tt",1098:"te",1054:"th",1105:"bo",1055:"tr",1090:"tk",1152:"ug",1058:"uk",1070:"hsb",1056:"ur",2115:"uz-Cyrl",1091:"uz",1066:"vi",1106:"cy",1160:"wo",1157:"sah",1144:"ii",1130:"yo"};function Ja(r,e,t){switch(r){case 0:if(e===65535)return"und";if(t)return t[e];break;case 1:return Ei[e];case 3:return Pi[e]}}var vn="utf-16",Qa={0:"macintosh",1:"x-mac-japanese",2:"x-mac-chinesetrad",3:"x-mac-korean",6:"x-mac-greek",7:"x-mac-cyrillic",9:"x-mac-devanagai",10:"x-mac-gurmukhi",11:"x-mac-gujarati",12:"x-mac-oriya",13:"x-mac-bengali",14:"x-mac-tamil",15:"x-mac-telugu",16:"x-mac-kannada",17:"x-mac-malayalam",18:"x-mac-sinhalese",19:"x-mac-burmese",20:"x-mac-khmer",21:"x-mac-thai",22:"x-mac-lao",23:"x-mac-georgian",24:"x-mac-armenian",25:"x-mac-chinesesimp",26:"x-mac-tibetan",27:"x-mac-mongolian",28:"x-mac-ethiopic",29:"x-mac-ce",30:"x-mac-vietnamese",31:"x-mac-extarabic"},eu={15:"x-mac-icelandic",17:"x-mac-turkish",18:"x-mac-croatian",24:"x-mac-ce",25:"x-mac-ce",26:"x-mac-ce",27:"x-mac-ce",28:"x-mac-ce",30:"x-mac-icelandic",37:"x-mac-romanian",38:"x-mac-ce",39:"x-mac-ce",40:"x-mac-ce",143:"x-mac-inuit",146:"x-mac-gaelic"};function Li(r,e,t){switch(r){case 0:return vn;case 1:return eu[t]||Qa[e];case 3:if(e===1||e===10)return vn;break}}function tu(r,e,t){for(var n={},s=new C.Parser(r,e),i=s.parseUShort(),o=s.parseUShort(),a=s.offset+s.parseUShort(),u=0;u<o;u++){var l=s.parseUShort(),f=s.parseUShort(),c=s.parseUShort(),h=s.parseUShort(),p=ki[h]||h,g=s.parseUShort(),m=s.parseUShort(),x=Ja(l,c,t),y=Li(l,f,c);if(y!==void 0&&x!==void 0){var S=void 0;if(y===vn?S=Et.UTF16(r,a+m,g):S=Et.MACSTRING(r,a+m,g,y),S){var w=n[p];w===void 0&&(w=n[p]={}),w[x]=S}}}var F=0;return i===1&&(F=s.parseUShort()),n}function rn(r){var e={};for(var t in r)e[r[t]]=parseInt(t);return e}function Ps(r,e,t,n,s,i){return new I.Record("NameRecord",[{name:"platformID",type:"USHORT",value:r},{name:"encodingID",type:"USHORT",value:e},{name:"languageID",type:"USHORT",value:t},{name:"nameID",type:"USHORT",value:n},{name:"length",type:"USHORT",value:s},{name:"offset",type:"USHORT",value:i}])}function ru(r,e){var t=r.length,n=e.length-t+1;e:for(var s=0;s<n;s++)for(;s<n;s++){for(var i=0;i<t;i++)if(e[s+i]!==r[i])continue e;return s}return-1}function Ls(r,e){var t=ru(r,e);if(t<0){t=e.length;for(var n=0,s=r.length;n<s;++n)e.push(r[n])}return t}function nu(r,e){var t,n=[],s={},i=rn(ki);for(var o in r){var a=i[o];if(a===void 0&&(a=o),t=parseInt(a),isNaN(t))throw new Error('Name table entry "'+o+'" does not exist, see nameTableNames for complete list.');s[t]=r[o],n.push(t)}for(var u=rn(Ei),l=rn(Pi),f=[],c=[],h=0;h<n.length;h++){t=n[h];var p=s[t];for(var g in p){var m=p[g],x=1,y=u[g],S=Ka[y],w=Li(x,S,y),F=E.MACSTRING(m,w);F===void 0&&(x=0,y=e.indexOf(g),y<0&&(y=e.length,e.push(g)),S=4,F=E.UTF16(m));var P=Ls(F,c);f.push(Ps(x,S,y,t,F.length,P));var U=l[g];if(U!==void 0){var O=E.UTF16(m),L=Ls(O,c);f.push(Ps(3,1,U,t,O.length,L))}}}f.sort(function(Y,he){return Y.platformID-he.platformID||Y.encodingID-he.encodingID||Y.languageID-he.languageID||Y.nameID-he.nameID});for(var W=new I.Table("name",[{name:"format",type:"USHORT",value:0},{name:"count",type:"USHORT",value:f.length},{name:"stringOffset",type:"USHORT",value:6+f.length*12}]),_=0;_<f.length;_++)W.fields.push({name:"record_"+_,type:"RECORD",value:f[_]});return W.fields.push({name:"strings",type:"LITERAL",value:c}),W}var Ii={parse:tu,make:nu},mn=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function su(r){for(var e=0;e<mn.length;e+=1){var t=mn[e];if(r>=t.begin&&r<t.end)return e}return-1}function iu(r,e){var t={},n=new C.Parser(r,e);t.version=n.parseUShort(),t.xAvgCharWidth=n.parseShort(),t.usWeightClass=n.parseUShort(),t.usWidthClass=n.parseUShort(),t.fsType=n.parseUShort(),t.ySubscriptXSize=n.parseShort(),t.ySubscriptYSize=n.parseShort(),t.ySubscriptXOffset=n.parseShort(),t.ySubscriptYOffset=n.parseShort(),t.ySuperscriptXSize=n.parseShort(),t.ySuperscriptYSize=n.parseShort(),t.ySuperscriptXOffset=n.parseShort(),t.ySuperscriptYOffset=n.parseShort(),t.yStrikeoutSize=n.parseShort(),t.yStrikeoutPosition=n.parseShort(),t.sFamilyClass=n.parseShort(),t.panose=[];for(var s=0;s<10;s++)t.panose[s]=n.parseByte();return t.ulUnicodeRange1=n.parseULong(),t.ulUnicodeRange2=n.parseULong(),t.ulUnicodeRange3=n.parseULong(),t.ulUnicodeRange4=n.parseULong(),t.achVendID=String.fromCharCode(n.parseByte(),n.parseByte(),n.parseByte(),n.parseByte()),t.fsSelection=n.parseUShort(),t.usFirstCharIndex=n.parseUShort(),t.usLastCharIndex=n.parseUShort(),t.sTypoAscender=n.parseShort(),t.sTypoDescender=n.parseShort(),t.sTypoLineGap=n.parseShort(),t.usWinAscent=n.parseUShort(),t.usWinDescent=n.parseUShort(),t.version>=1&&(t.ulCodePageRange1=n.parseULong(),t.ulCodePageRange2=n.parseULong()),t.version>=2&&(t.sxHeight=n.parseShort(),t.sCapHeight=n.parseShort(),t.usDefaultChar=n.parseUShort(),t.usBreakChar=n.parseUShort(),t.usMaxContent=n.parseUShort()),t}function ou(r){return new I.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],r)}var xn={parse:iu,make:ou,unicodeRanges:mn,getUnicodeRange:su};function au(r,e){var t={},n=new C.Parser(r,e);switch(t.version=n.parseVersion(),t.italicAngle=n.parseFixed(),t.underlinePosition=n.parseShort(),t.underlineThickness=n.parseShort(),t.isFixedPitch=n.parseULong(),t.minMemType42=n.parseULong(),t.maxMemType42=n.parseULong(),t.minMemType1=n.parseULong(),t.maxMemType1=n.parseULong(),t.version){case 1:t.names=pt.slice();break;case 2:t.numberOfGlyphs=n.parseUShort(),t.glyphNameIndex=new Array(t.numberOfGlyphs);for(var s=0;s<t.numberOfGlyphs;s++)t.glyphNameIndex[s]=n.parseUShort();t.names=[];for(var i=0;i<t.numberOfGlyphs;i++)if(t.glyphNameIndex[i]>=pt.length){var o=n.parseChar();t.names.push(n.parseString(o))}break;case 2.5:t.numberOfGlyphs=n.parseUShort(),t.offset=new Array(t.numberOfGlyphs);for(var a=0;a<t.numberOfGlyphs;a++)t.offset[a]=n.parseChar();break}return t}function uu(){return new I.Table("post",[{name:"version",type:"FIXED",value:196608},{name:"italicAngle",type:"FIXED",value:0},{name:"underlinePosition",type:"FWORD",value:0},{name:"underlineThickness",type:"FWORD",value:0},{name:"isFixedPitch",type:"ULONG",value:0},{name:"minMemType42",type:"ULONG",value:0},{name:"maxMemType42",type:"ULONG",value:0},{name:"minMemType1",type:"ULONG",value:0},{name:"maxMemType1",type:"ULONG",value:0}])}var Ti={parse:au,make:uu},Fe=new Array(9);Fe[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(v.coverage),deltaGlyphId:this.parseUShort()};if(t===2)return{substFormat:2,coverage:this.parsePointer(v.coverage),substitute:this.parseOffset16List()};R.assert(!1,"0x"+e.toString(16)+": lookup type 1 format must be 1 or 2.")};Fe[2]=function(){var e=this.parseUShort();return R.argument(e===1,"GSUB Multiple Substitution Subtable identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),sequences:this.parseListOfLists()}};Fe[3]=function(){var e=this.parseUShort();return R.argument(e===1,"GSUB Alternate Substitution Subtable identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),alternateSets:this.parseListOfLists()}};Fe[4]=function(){var e=this.parseUShort();return R.argument(e===1,"GSUB ligature table identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var kt={sequenceIndex:v.uShort,lookupListIndex:v.uShort};Fe[5]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:t,coverage:this.parsePointer(v.coverage),ruleSets:this.parseListOfLists(function(){var i=this.parseUShort(),o=this.parseUShort();return{input:this.parseUShortList(i-1),lookupRecords:this.parseRecordList(o,kt)}})};if(t===2)return{substFormat:t,coverage:this.parsePointer(v.coverage),classDef:this.parsePointer(v.classDef),classSets:this.parseListOfLists(function(){var i=this.parseUShort(),o=this.parseUShort();return{classes:this.parseUShortList(i-1),lookupRecords:this.parseRecordList(o,kt)}})};if(t===3){var n=this.parseUShort(),s=this.parseUShort();return{substFormat:t,coverages:this.parseList(n,v.pointer(v.coverage)),lookupRecords:this.parseRecordList(s,kt)}}R.assert(!1,"0x"+e.toString(16)+": lookup type 5 format must be 1, 2 or 3.")};Fe[6]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(v.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(kt)}})};if(t===2)return{substFormat:2,coverage:this.parsePointer(v.coverage),backtrackClassDef:this.parsePointer(v.classDef),inputClassDef:this.parsePointer(v.classDef),lookaheadClassDef:this.parsePointer(v.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(kt)}})};if(t===3)return{substFormat:3,backtrackCoverage:this.parseList(v.pointer(v.coverage)),inputCoverage:this.parseList(v.pointer(v.coverage)),lookaheadCoverage:this.parseList(v.pointer(v.coverage)),lookupRecords:this.parseRecordList(kt)};R.assert(!1,"0x"+e.toString(16)+": lookup type 6 format must be 1, 2 or 3.")};Fe[7]=function(){var e=this.parseUShort();R.argument(e===1,"GSUB Extension Substitution subtable identifier-format must be 1");var t=this.parseUShort(),n=new v(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:t,extension:Fe[t].call(n)}};Fe[8]=function(){var e=this.parseUShort();return R.argument(e===1,"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),backtrackCoverage:this.parseList(v.pointer(v.coverage)),lookaheadCoverage:this.parseList(v.pointer(v.coverage)),substitutes:this.parseUShortList()}};function lu(r,e){e=e||0;var t=new v(r,e),n=t.parseVersion(1);return R.argument(n===1||n===1.1,"Unsupported GSUB table version."),n===1?{version:n,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(Fe)}:{version:n,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(Fe),variations:t.parseFeatureVariationsList()}}var Pt=new Array(9);Pt[1]=function(e){return e.substFormat===1?new I.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new I.Coverage(e.coverage)},{name:"deltaGlyphID",type:"USHORT",value:e.deltaGlyphId}]):new I.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:2},{name:"coverage",type:"TABLE",value:new I.Coverage(e.coverage)}].concat(I.ushortList("substitute",e.substitute)))};Pt[2]=function(e){return R.assert(e.substFormat===1,"Lookup type 2 substFormat must be 1."),new I.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new I.Coverage(e.coverage)}].concat(I.tableList("seqSet",e.sequences,function(t){return new I.Table("sequenceSetTable",I.ushortList("sequence",t))})))};Pt[3]=function(e){return R.assert(e.substFormat===1,"Lookup type 3 substFormat must be 1."),new I.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new I.Coverage(e.coverage)}].concat(I.tableList("altSet",e.alternateSets,function(t){return new I.Table("alternateSetTable",I.ushortList("alternate",t))})))};Pt[4]=function(e){return R.assert(e.substFormat===1,"Lookup type 4 substFormat must be 1."),new I.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new I.Coverage(e.coverage)}].concat(I.tableList("ligSet",e.ligatureSets,function(t){return new I.Table("ligatureSetTable",I.tableList("ligature",t,function(n){return new I.Table("ligatureTable",[{name:"ligGlyph",type:"USHORT",value:n.ligGlyph}].concat(I.ushortList("component",n.components,n.components.length+1)))}))})))};Pt[6]=function(e){if(e.substFormat===1){var t=new I.Table("chainContextTable",[{name:"substFormat",type:"USHORT",value:e.substFormat},{name:"coverage",type:"TABLE",value:new I.Coverage(e.coverage)}].concat(I.tableList("chainRuleSet",e.chainRuleSets,function(i){return new I.Table("chainRuleSetTable",I.tableList("chainRule",i,function(o){var a=I.ushortList("backtrackGlyph",o.backtrack,o.backtrack.length).concat(I.ushortList("inputGlyph",o.input,o.input.length+1)).concat(I.ushortList("lookaheadGlyph",o.lookahead,o.lookahead.length)).concat(I.ushortList("substitution",[],o.lookupRecords.length));return o.lookupRecords.forEach(function(u,l){a=a.concat({name:"sequenceIndex"+l,type:"USHORT",value:u.sequenceIndex}).concat({name:"lookupListIndex"+l,type:"USHORT",value:u.lookupListIndex})}),new I.Table("chainRuleTable",a)}))})));return t}else if(e.substFormat===2)R.assert(!1,"lookup type 6 format 2 is not yet supported.");else if(e.substFormat===3){var n=[{name:"substFormat",type:"USHORT",value:e.substFormat}];n.push({name:"backtrackGlyphCount",type:"USHORT",value:e.backtrackCoverage.length}),e.backtrackCoverage.forEach(function(i,o){n.push({name:"backtrackCoverage"+o,type:"TABLE",value:new I.Coverage(i)})}),n.push({name:"inputGlyphCount",type:"USHORT",value:e.inputCoverage.length}),e.inputCoverage.forEach(function(i,o){n.push({name:"inputCoverage"+o,type:"TABLE",value:new I.Coverage(i)})}),n.push({name:"lookaheadGlyphCount",type:"USHORT",value:e.lookaheadCoverage.length}),e.lookaheadCoverage.forEach(function(i,o){n.push({name:"lookaheadCoverage"+o,type:"TABLE",value:new I.Coverage(i)})}),n.push({name:"substitutionCount",type:"USHORT",value:e.lookupRecords.length}),e.lookupRecords.forEach(function(i,o){n=n.concat({name:"sequenceIndex"+o,type:"USHORT",value:i.sequenceIndex}).concat({name:"lookupListIndex"+o,type:"USHORT",value:i.lookupListIndex})});var s=new I.Table("chainContextTable",n);return s}R.assert(!1,"lookup type 6 format must be 1, 2 or 3.")};function fu(r){return new I.Table("GSUB",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new I.ScriptList(r.scripts)},{name:"features",type:"TABLE",value:new I.FeatureList(r.features)},{name:"lookups",type:"TABLE",value:new I.LookupList(r.lookups,Pt)}])}var Ci={parse:lu,make:fu};function hu(r,e){var t=new C.Parser(r,e),n=t.parseULong();R.argument(n===1,"Unsupported META table version."),t.parseULong(),t.parseULong();for(var s=t.parseULong(),i={},o=0;o<s;o++){var a=t.parseTag(),u=t.parseULong(),l=t.parseULong(),f=Et.UTF8(r,e+u,l);i[a]=f}return i}function cu(r){var e=Object.keys(r).length,t="",n=16+e*12,s=new I.Table("meta",[{name:"version",type:"ULONG",value:1},{name:"flags",type:"ULONG",value:0},{name:"offset",type:"ULONG",value:n},{name:"numTags",type:"ULONG",value:e}]);for(var i in r){var o=t.length;t+=r[i],s.fields.push({name:"tag "+i,type:"TAG",value:i}),s.fields.push({name:"offset "+i,type:"ULONG",value:n+o}),s.fields.push({name:"length "+i,type:"ULONG",value:r[i].length})}return s.fields.push({name:"stringPool",type:"CHARARRAY",value:t}),s}var Mi={parse:hu,make:cu};function Is(r){return Math.log(r)/Math.log(2)|0}function Ln(r){for(;r.length%4!==0;)r.push(0);for(var e=0,t=0;t<r.length;t+=4)e+=(r[t]<<24)+(r[t+1]<<16)+(r[t+2]<<8)+r[t+3];return e%=Math.pow(2,32),e}function Ts(r,e,t,n){return new I.Record("Table Record",[{name:"tag",type:"TAG",value:r!==void 0?r:""},{name:"checkSum",type:"ULONG",value:e!==void 0?e:0},{name:"offset",type:"ULONG",value:t!==void 0?t:0},{name:"length",type:"ULONG",value:n!==void 0?n:0}])}function Oi(r){var e=new I.Table("sfnt",[{name:"version",type:"TAG",value:"OTTO"},{name:"numTables",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);e.tables=r,e.numTables=r.length;var t=Math.pow(2,Is(e.numTables));e.searchRange=16*t,e.entrySelector=Is(t),e.rangeShift=e.numTables*16-e.searchRange;for(var n=[],s=[],i=e.sizeOf()+Ts().sizeOf()*e.numTables;i%4!==0;)i+=1,s.push({name:"padding",type:"BYTE",value:0});for(var o=0;o<r.length;o+=1){var a=r[o];R.argument(a.tableName.length===4,"Table name"+a.tableName+" is invalid.");var u=a.sizeOf(),l=Ts(a.tableName,Ln(a.encode()),i,u);for(n.push({name:l.tag+" Table Record",type:"RECORD",value:l}),s.push({name:a.tableName+" table",type:"RECORD",value:a}),i+=u,R.argument(!isNaN(i),"Something went wrong calculating the offset.");i%4!==0;)i+=1,s.push({name:"padding",type:"BYTE",value:0})}return n.sort(function(f,c){return f.value.tag>c.value.tag?1:-1}),e.fields=e.fields.concat(n),e.fields=e.fields.concat(s),e}function Cs(r,e,t){for(var n=0;n<e.length;n+=1){var s=r.charToGlyphIndex(e[n]);if(s>0){var i=r.glyphs.get(s);return i.getMetrics()}}return t}function pu(r){for(var e=0,t=0;t<r.length;t+=1)e+=r[t];return e/r.length}function du(r){for(var e=[],t=[],n=[],s=[],i=[],o=[],a=[],u,l=0,f=0,c=0,h=0,p=0,g=0;g<r.glyphs.length;g+=1){var m=r.glyphs.get(g),x=m.unicode|0;if(isNaN(m.advanceWidth))throw new Error("Glyph "+m.name+" ("+g+"): advanceWidth is not a number.");(u>x||u===void 0)&&x>0&&(u=x),l<x&&(l=x);var y=xn.getUnicodeRange(x);if(y<32)f|=1<<y;else if(y<64)c|=1<<y-32;else if(y<96)h|=1<<y-64;else if(y<123)p|=1<<y-96;else throw new Error("Unicode ranges bits > 123 are reserved for internal usage");if(m.name!==".notdef"){var S=m.getMetrics();e.push(S.xMin),t.push(S.yMin),n.push(S.xMax),s.push(S.yMax),o.push(S.leftSideBearing),a.push(S.rightSideBearing),i.push(m.advanceWidth)}}var w={xMin:Math.min.apply(null,e),yMin:Math.min.apply(null,t),xMax:Math.max.apply(null,n),yMax:Math.max.apply(null,s),advanceWidthMax:Math.max.apply(null,i),advanceWidthAvg:pu(i),minLeftSideBearing:Math.min.apply(null,o),maxLeftSideBearing:Math.max.apply(null,o),minRightSideBearing:Math.min.apply(null,a)};w.ascender=r.ascender,w.descender=r.descender;var F=xi.make({flags:3,unitsPerEm:r.unitsPerEm,xMin:w.xMin,yMin:w.yMin,xMax:w.xMax,yMax:w.yMax,lowestRecPPEM:3,createdTimestamp:r.createdTimestamp}),P=yi.make({ascender:w.ascender,descender:w.descender,advanceWidthMax:w.advanceWidthMax,minLeftSideBearing:w.minLeftSideBearing,minRightSideBearing:w.minRightSideBearing,xMaxExtent:w.maxLeftSideBearing+(w.xMax-w.xMin),numberOfHMetrics:r.glyphs.length}),U=wi.make(r.glyphs.length),O=xn.make(Object.assign({xAvgCharWidth:Math.round(w.advanceWidthAvg),usFirstCharIndex:u,usLastCharIndex:l,ulUnicodeRange1:f,ulUnicodeRange2:c,ulUnicodeRange3:h,ulUnicodeRange4:p,sTypoAscender:w.ascender,sTypoDescender:w.descender,sTypoLineGap:0,usWinAscent:w.yMax,usWinDescent:Math.abs(w.yMin),ulCodePageRange1:1,sxHeight:Cs(r,"xyvw",{yMax:Math.round(w.ascender/2)}).yMax,sCapHeight:Cs(r,"HIKLEFJMNTZBDPRAGOQSUVWXY",w).yMax,usDefaultChar:r.hasChar(" ")?32:0,usBreakChar:r.hasChar(" ")?32:0},r.tables.os2)),L=bi.make(r.glyphs),W=oi.make(r.glyphs),_=r.getEnglishName("fontFamily"),Y=r.getEnglishName("fontSubfamily"),he=_+" "+Y,ce=r.getEnglishName("postScriptName");ce||(ce=_.replace(/\s/g,"")+"-"+Y);var Q={};for(var X in r.names)Q[X]=r.names[X];Q.uniqueID||(Q.uniqueID={en:r.getEnglishName("manufacturer")+":"+he}),Q.postScriptName||(Q.postScriptName={en:ce}),Q.preferredFamily||(Q.preferredFamily=r.names.fontFamily),Q.preferredSubfamily||(Q.preferredSubfamily=r.names.fontSubfamily);var ee=[],k=Ii.make(Q,ee),M=ee.length>0?Si.make(ee):void 0,A=Ti.make(),G=mi.make(r.glyphs,{version:r.getEnglishName("version"),fullName:he,familyName:_,weightName:Y,postScriptName:ce,unitsPerEm:r.unitsPerEm,fontBBox:[0,w.yMin,w.ascender,w.advanceWidthMax]}),D=r.metas&&Object.keys(r.metas).length>0?Mi.make(r.metas):void 0,H=[F,P,U,O,k,W,A,G,L];M&&H.push(M),r.tables.gsub&&H.push(Ci.make(r.tables.gsub)),D&&H.push(D);for(var se=Oi(H),be=se.encode(),te=Ln(be),le=se.fields,ue=!1,pe=0;pe<le.length;pe+=1)if(le[pe].name==="head table"){le[pe].value.checkSumAdjustment=2981146554-te,ue=!0;break}if(!ue)throw new Error("Could not find head table with checkSum to adjust.");return se}var gu={make:Oi,fontToTable:du,computeCheckSum:Ln};function nn(r,e){for(var t=0,n=r.length-1;t<=n;){var s=t+n>>>1,i=r[s].tag;if(i===e)return s;i<e?t=s+1:n=s-1}return-t-1}function Ms(r,e){for(var t=0,n=r.length-1;t<=n;){var s=t+n>>>1,i=r[s];if(i===e)return s;i<e?t=s+1:n=s-1}return-t-1}function Os(r,e){for(var t,n=0,s=r.length-1;n<=s;){var i=n+s>>>1;t=r[i];var o=t.start;if(o===e)return t;o<e?n=i+1:s=i-1}if(n>0)return t=r[n-1],e>t.end?0:t}function $t(r,e){this.font=r,this.tableName=e}$t.prototype={searchTag:nn,binSearch:Ms,getTable:function(r){var e=this.font.tables[this.tableName];return!e&&r&&(e=this.font.tables[this.tableName]=this.createDefaultTable()),e},getScriptNames:function(){var r=this.getTable();return r?r.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var r=this.getTable();if(r){for(var e=!1,t=0;t<r.scripts.length;t++){var n=r.scripts[t].tag;if(n==="DFLT")return n;n==="latn"&&(e=!0)}if(e)return"latn"}},getScriptTable:function(r,e){var t=this.getTable(e);if(t){r=r||"DFLT";var n=t.scripts,s=nn(t.scripts,r);if(s>=0)return n[s].script;if(e){var i={tag:r,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return n.splice(-1-s,0,i),i.script}}},getLangSysTable:function(r,e,t){var n=this.getScriptTable(r,t);if(n){if(!e||e==="dflt"||e==="DFLT")return n.defaultLangSys;var s=nn(n.langSysRecords,e);if(s>=0)return n.langSysRecords[s].langSys;if(t){var i={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return n.langSysRecords.splice(-1-s,0,i),i.langSys}}},getFeatureTable:function(r,e,t,n){var s=this.getLangSysTable(r,e,n);if(s){for(var i,o=s.featureIndexes,a=this.font.tables[this.tableName].features,u=0;u<o.length;u++)if(i=a[o[u]],i.tag===t)return i.feature;if(n){var l=a.length;return R.assert(l===0||t>=a[l-1].tag,"Features must be added in alphabetical order."),i={tag:t,feature:{params:0,lookupListIndexes:[]}},a.push(i),o.push(l),i.feature}}},getLookupTables:function(r,e,t,n,s){var i=this.getFeatureTable(r,e,t,s),o=[];if(i){for(var a,u=i.lookupListIndexes,l=this.font.tables[this.tableName].lookups,f=0;f<u.length;f++)a=l[u[f]],a.lookupType===n&&o.push(a);if(o.length===0&&s){a={lookupType:n,lookupFlag:0,subtables:[],markFilteringSet:void 0};var c=l.length;return l.push(a),u.push(c),[a]}}return o},getGlyphClass:function(r,e){switch(r.format){case 1:return r.startGlyph<=e&&e<r.startGlyph+r.classes.length?r.classes[e-r.startGlyph]:0;case 2:var t=Os(r.ranges,e);return t?t.classId:0}},getCoverageIndex:function(r,e){switch(r.format){case 1:var t=Ms(r.glyphs,e);return t>=0?t:-1;case 2:var n=Os(r.ranges,e);return n?n.index+e-n.start:-1}},expandCoverage:function(r){if(r.format===1)return r.glyphs;for(var e=[],t=r.ranges,n=0;n<t.length;n++)for(var s=t[n],i=s.start,o=s.end,a=i;a<=o;a++)e.push(a);return e}};function Zt(r){$t.call(this,r,"gpos")}Zt.prototype=$t.prototype;Zt.prototype.init=function(){var r=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(r)};Zt.prototype.getKerningValue=function(r,e,t){for(var n=0;n<r.length;n++)for(var s=r[n].subtables,i=0;i<s.length;i++){var o=s[i],a=this.getCoverageIndex(o.coverage,e);if(!(a<0))switch(o.posFormat){case 1:for(var u=o.pairSets[a],l=0;l<u.length;l++){var f=u[l];if(f.secondGlyph===t)return f.value1&&f.value1.xAdvance||0}break;case 2:var c=this.getGlyphClass(o.classDef1,e),h=this.getGlyphClass(o.classDef2,t),p=o.classRecords[c][h];return p.value1&&p.value1.xAdvance||0}}return 0};Zt.prototype.getKerningTables=function(r,e){if(this.font.tables.gpos)return this.getLookupTables(r,e,"kern",2)};function ke(r){$t.call(this,r,"gsub")}function vu(r,e){var t=r.length;if(t!==e.length)return!1;for(var n=0;n<t;n++)if(r[n]!==e[n])return!1;return!0}function In(r,e,t){for(var n=r.subtables,s=0;s<n.length;s++){var i=n[s];if(i.substFormat===e)return i}if(t)return n.push(t),t}ke.prototype=$t.prototype;ke.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:"DFLT",script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}};ke.prototype.getSingle=function(r,e,t){for(var n=[],s=this.getLookupTables(e,t,r,1),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++){var u=o[a],l=this.expandCoverage(u.coverage),f=void 0;if(u.substFormat===1){var c=u.deltaGlyphId;for(f=0;f<l.length;f++){var h=l[f];n.push({sub:h,by:h+c})}}else{var p=u.substitute;for(f=0;f<l.length;f++)n.push({sub:l[f],by:p[f]})}}return n};ke.prototype.getMultiple=function(r,e,t){for(var n=[],s=this.getLookupTables(e,t,r,2),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++){var u=o[a],l=this.expandCoverage(u.coverage),f=void 0;for(f=0;f<l.length;f++){var c=l[f],h=u.sequences[f];n.push({sub:c,by:h})}}return n};ke.prototype.getAlternates=function(r,e,t){for(var n=[],s=this.getLookupTables(e,t,r,3),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++)for(var u=o[a],l=this.expandCoverage(u.coverage),f=u.alternateSets,c=0;c<l.length;c++)n.push({sub:l[c],by:f[c]});return n};ke.prototype.getLigatures=function(r,e,t){for(var n=[],s=this.getLookupTables(e,t,r,4),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++)for(var u=o[a],l=this.expandCoverage(u.coverage),f=u.ligatureSets,c=0;c<l.length;c++)for(var h=l[c],p=f[c],g=0;g<p.length;g++){var m=p[g];n.push({sub:[h].concat(m.components),by:m.ligGlyph})}return n};ke.prototype.addSingle=function(r,e,t,n){var s=this.getLookupTables(t,n,r,1,!0)[0],i=In(s,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});R.assert(i.coverage.format===1,"Single: unable to modify coverage table format "+i.coverage.format);var o=e.sub,a=this.binSearch(i.coverage.glyphs,o);a<0&&(a=-1-a,i.coverage.glyphs.splice(a,0,o),i.substitute.splice(a,0,0)),i.substitute[a]=e.by};ke.prototype.addMultiple=function(r,e,t,n){R.assert(e.by instanceof Array&&e.by.length>1,'Multiple: "by" must be an array of two or more ids');var s=this.getLookupTables(t,n,r,2,!0)[0],i=In(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});R.assert(i.coverage.format===1,"Multiple: unable to modify coverage table format "+i.coverage.format);var o=e.sub,a=this.binSearch(i.coverage.glyphs,o);a<0&&(a=-1-a,i.coverage.glyphs.splice(a,0,o),i.sequences.splice(a,0,0)),i.sequences[a]=e.by};ke.prototype.addAlternate=function(r,e,t,n){var s=this.getLookupTables(t,n,r,3,!0)[0],i=In(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});R.assert(i.coverage.format===1,"Alternate: unable to modify coverage table format "+i.coverage.format);var o=e.sub,a=this.binSearch(i.coverage.glyphs,o);a<0&&(a=-1-a,i.coverage.glyphs.splice(a,0,o),i.alternateSets.splice(a,0,0)),i.alternateSets[a]=e.by};ke.prototype.addLigature=function(r,e,t,n){var s=this.getLookupTables(t,n,r,4,!0)[0],i=s.subtables[0];i||(i={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},s.subtables[0]=i),R.assert(i.coverage.format===1,"Ligature: unable to modify coverage table format "+i.coverage.format);var o=e.sub[0],a=e.sub.slice(1),u={ligGlyph:e.by,components:a},l=this.binSearch(i.coverage.glyphs,o);if(l>=0){for(var f=i.ligatureSets[l],c=0;c<f.length;c++)if(vu(f[c].components,a))return;f.push(u)}else l=-1-l,i.coverage.glyphs.splice(l,0,o),i.ligatureSets.splice(l,0,[u])};ke.prototype.getFeature=function(r,e,t){if(/ss\d\d/.test(r))return this.getSingle(r,e,t);switch(r){case"aalt":case"salt":return this.getSingle(r,e,t).concat(this.getAlternates(r,e,t));case"dlig":case"liga":case"rlig":return this.getLigatures(r,e,t);case"ccmp":return this.getMultiple(r,e,t).concat(this.getLigatures(r,e,t));case"stch":return this.getMultiple(r,e,t)}};ke.prototype.add=function(r,e,t,n){if(/ss\d\d/.test(r))return this.addSingle(r,e,t,n);switch(r){case"aalt":case"salt":return typeof e.by=="number"?this.addSingle(r,e,t,n):this.addAlternate(r,e,t,n);case"dlig":case"liga":case"rlig":return this.addLigature(r,e,t,n);case"ccmp":return e.by instanceof Array?this.addMultiple(r,e,t,n):this.addLigature(r,e,t,n)}};function mu(){return typeof window<"u"}function xu(r){for(var e=new Buffer(r.byteLength),t=new Uint8Array(r),n=0;n<e.length;++n)e[n]=t[n];return e}function Ht(r,e){if(!r)throw e}function Fs(r,e,t,n,s){var i;return(e&n)>0?(i=r.parseByte(),(e&s)===0&&(i=-i),i=t+i):(e&s)>0?i=t:i=t+r.parseShort(),i}function Fi(r,e,t){var n=new C.Parser(e,t);r.numberOfContours=n.parseShort(),r._xMin=n.parseShort(),r._yMin=n.parseShort(),r._xMax=n.parseShort(),r._yMax=n.parseShort();var s,i;if(r.numberOfContours>0){for(var o=r.endPointIndices=[],a=0;a<r.numberOfContours;a+=1)o.push(n.parseUShort());r.instructionLength=n.parseUShort(),r.instructions=[];for(var u=0;u<r.instructionLength;u+=1)r.instructions.push(n.parseByte());var l=o[o.length-1]+1;s=[];for(var f=0;f<l;f+=1)if(i=n.parseByte(),s.push(i),(i&8)>0)for(var c=n.parseByte(),h=0;h<c;h+=1)s.push(i),f+=1;if(R.argument(s.length===l,"Bad flags."),o.length>0){var p=[],g;if(l>0){for(var m=0;m<l;m+=1)i=s[m],g={},g.onCurve=!!(i&1),g.lastPointOfContour=o.indexOf(m)>=0,p.push(g);for(var x=0,y=0;y<l;y+=1)i=s[y],g=p[y],g.x=Fs(n,i,x,2,16),x=g.x;for(var S=0,w=0;w<l;w+=1)i=s[w],g=p[w],g.y=Fs(n,i,S,4,32),S=g.y}r.points=p}else r.points=[]}else if(r.numberOfContours===0)r.points=[];else{r.isComposite=!0,r.points=[],r.components=[];for(var F=!0;F;){s=n.parseUShort();var P={glyphIndex:n.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};(s&1)>0?(s&2)>0?(P.dx=n.parseShort(),P.dy=n.parseShort()):P.matchedPoints=[n.parseUShort(),n.parseUShort()]:(s&2)>0?(P.dx=n.parseChar(),P.dy=n.parseChar()):P.matchedPoints=[n.parseByte(),n.parseByte()],(s&8)>0?P.xScale=P.yScale=n.parseF2Dot14():(s&64)>0?(P.xScale=n.parseF2Dot14(),P.yScale=n.parseF2Dot14()):(s&128)>0&&(P.xScale=n.parseF2Dot14(),P.scale01=n.parseF2Dot14(),P.scale10=n.parseF2Dot14(),P.yScale=n.parseF2Dot14()),r.components.push(P),F=!!(s&32)}if(s&256){r.instructionLength=n.parseUShort(),r.instructions=[];for(var U=0;U<r.instructionLength;U+=1)r.instructions.push(n.parseByte())}}}function sn(r,e){for(var t=[],n=0;n<r.length;n+=1){var s=r[n],i={x:e.xScale*s.x+e.scale01*s.y+e.dx,y:e.scale10*s.x+e.yScale*s.y+e.dy,onCurve:s.onCurve,lastPointOfContour:s.lastPointOfContour};t.push(i)}return t}function yu(r){for(var e=[],t=[],n=0;n<r.length;n+=1){var s=r[n];t.push(s),s.lastPointOfContour&&(e.push(t),t=[])}return R.argument(t.length===0,"There are still points left in the current contour."),e}function Ai(r){var e=new fe;if(!r)return e;for(var t=yu(r),n=0;n<t.length;++n){var s=t[n],i=null,o=s[s.length-1],a=s[0];if(o.onCurve)e.moveTo(o.x,o.y);else if(a.onCurve)e.moveTo(a.x,a.y);else{var u={x:(o.x+a.x)*.5,y:(o.y+a.y)*.5};e.moveTo(u.x,u.y)}for(var l=0;l<s.length;++l)if(i=o,o=a,a=s[(l+1)%s.length],o.onCurve)e.lineTo(o.x,o.y);else{var f=i,c=a;i.onCurve||(f={x:(o.x+i.x)*.5,y:(o.y+i.y)*.5}),a.onCurve||(c={x:(o.x+a.x)*.5,y:(o.y+a.y)*.5}),e.quadraticCurveTo(o.x,o.y,c.x,c.y)}e.closePath()}return e}function Di(r,e){if(e.isComposite)for(var t=0;t<e.components.length;t+=1){var n=e.components[t],s=r.get(n.glyphIndex);if(s.getPath(),s.points){var i=void 0;if(n.matchedPoints===void 0)i=sn(s.points,n);else{if(n.matchedPoints[0]>e.points.length-1||n.matchedPoints[1]>s.points.length-1)throw Error("Matched points out of range in "+e.name);var o=e.points[n.matchedPoints[0]],a=s.points[n.matchedPoints[1]],u={xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:0,dy:0};a=sn([a],u)[0],u.dx=o.x-a.x,u.dy=o.y-a.y,i=sn(s.points,u)}e.points=e.points.concat(i)}}return Ai(e.points)}function bu(r,e,t,n){for(var s=new qe.GlyphSet(n),i=0;i<t.length-1;i+=1){var o=t[i],a=t[i+1];o!==a?s.push(i,qe.ttfGlyphLoader(n,i,Fi,r,e+o,Di)):s.push(i,qe.glyphLoader(n,i))}return s}function Su(r,e,t,n){var s=new qe.GlyphSet(n);return n._push=function(i){var o=t[i],a=t[i+1];o!==a?s.push(i,qe.ttfGlyphLoader(n,i,Fi,r,e+o,Di)):s.push(i,qe.glyphLoader(n,i))},s}function wu(r,e,t,n,s){return s.lowMemory?Su(r,e,t,n):bu(r,e,t,n)}var Ui={getPath:Ai,parse:wu},Ri,gt,Ni,yn;function Bi(r){this.font=r,this.getCommands=function(e){return Ui.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function ku(r){return r}function Gi(r){return Math.sign(r)*Math.round(Math.abs(r))}function Eu(r){return Math.sign(r)*Math.round(Math.abs(r*2))/2}function Pu(r){return Math.sign(r)*(Math.round(Math.abs(r)+.5)-.5)}function Lu(r){return Math.sign(r)*Math.ceil(Math.abs(r))}function Iu(r){return Math.sign(r)*Math.floor(Math.abs(r))}var Hi=function(r){var e=this.srPeriod,t=this.srPhase,n=this.srThreshold,s=1;return r<0&&(r=-r,s=-1),r+=n-t,r=Math.trunc(r/e)*e,r+=t,r<0?t*s:r*s},Xe={x:1,y:0,axis:"x",distance:function(r,e,t,n){return(t?r.xo:r.x)-(n?e.xo:e.x)},interpolate:function(r,e,t,n){var s,i,o,a,u,l,f;if(!n||n===this){if(s=r.xo-e.xo,i=r.xo-t.xo,u=e.x-e.xo,l=t.x-t.xo,o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){r.x=r.xo+(u+l)/2;return}r.x=r.xo+(u*a+l*o)/f;return}if(s=n.distance(r,e,!0,!0),i=n.distance(r,t,!0,!0),u=n.distance(e,e,!1,!0),l=n.distance(t,t,!1,!0),o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){Xe.setRelative(r,r,(u+l)/2,n,!0);return}Xe.setRelative(r,r,(u*a+l*o)/f,n,!0)},normalSlope:Number.NEGATIVE_INFINITY,setRelative:function(r,e,t,n,s){if(!n||n===this){r.x=(s?e.xo:e.x)+t;return}var i=s?e.xo:e.x,o=s?e.yo:e.y,a=i+t*n.x,u=o+t*n.y;r.x=a+(r.y-u)/n.normalSlope},slope:0,touch:function(r){r.xTouched=!0},touched:function(r){return r.xTouched},untouch:function(r){r.xTouched=!1}},$e={x:0,y:1,axis:"y",distance:function(r,e,t,n){return(t?r.yo:r.y)-(n?e.yo:e.y)},interpolate:function(r,e,t,n){var s,i,o,a,u,l,f;if(!n||n===this){if(s=r.yo-e.yo,i=r.yo-t.yo,u=e.y-e.yo,l=t.y-t.yo,o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){r.y=r.yo+(u+l)/2;return}r.y=r.yo+(u*a+l*o)/f;return}if(s=n.distance(r,e,!0,!0),i=n.distance(r,t,!0,!0),u=n.distance(e,e,!1,!0),l=n.distance(t,t,!1,!0),o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){$e.setRelative(r,r,(u+l)/2,n,!0);return}$e.setRelative(r,r,(u*a+l*o)/f,n,!0)},normalSlope:0,setRelative:function(r,e,t,n,s){if(!n||n===this){r.y=(s?e.yo:e.y)+t;return}var i=s?e.xo:e.x,o=s?e.yo:e.y,a=i+t*n.x,u=o+t*n.y;r.y=u+n.normalSlope*(r.x-a)},slope:Number.POSITIVE_INFINITY,touch:function(r){r.yTouched=!0},touched:function(r){return r.yTouched},untouch:function(r){r.yTouched=!1}};Object.freeze(Xe);Object.freeze($e);function _t(r,e){this.x=r,this.y=e,this.axis=void 0,this.slope=e/r,this.normalSlope=-r/e,Object.freeze(this)}_t.prototype.distance=function(r,e,t,n){return this.x*Xe.distance(r,e,t,n)+this.y*$e.distance(r,e,t,n)};_t.prototype.interpolate=function(r,e,t,n){var s,i,o,a,u,l,f;if(o=n.distance(r,e,!0,!0),a=n.distance(r,t,!0,!0),s=n.distance(e,e,!1,!0),i=n.distance(t,t,!1,!0),u=Math.abs(o),l=Math.abs(a),f=u+l,f===0){this.setRelative(r,r,(s+i)/2,n,!0);return}this.setRelative(r,r,(s*l+i*u)/f,n,!0)};_t.prototype.setRelative=function(r,e,t,n,s){n=n||this;var i=s?e.xo:e.x,o=s?e.yo:e.y,a=i+t*n.x,u=o+t*n.y,l=n.normalSlope,f=this.slope,c=r.x,h=r.y;r.x=(f*c-l*a+u-h)/(f-l),r.y=f*(r.x-c)+h};_t.prototype.touch=function(r){r.xTouched=!0,r.yTouched=!0};function Yt(r,e){var t=Math.sqrt(r*r+e*e);return r/=t,e/=t,r===1&&e===0?Xe:r===0&&e===1?$e:new _t(r,e)}function Ze(r,e,t,n){this.x=this.xo=Math.round(r*64)/64,this.y=this.yo=Math.round(e*64)/64,this.lastPointOfContour=t,this.onCurve=n,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}Ze.prototype.nextTouched=function(r){for(var e=this.nextPointOnContour;!r.touched(e)&&e!==this;)e=e.nextPointOnContour;return e};Ze.prototype.prevTouched=function(r){for(var e=this.prevPointOnContour;!r.touched(e)&&e!==this;)e=e.prevPointOnContour;return e};var Wt=Object.freeze(new Ze(0,0)),Tu={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function tt(r,e){switch(this.env=r,this.stack=[],this.prog=e,r){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Xe,this.round=Gi}}Bi.prototype.exec=function(r,e){if(typeof e!="number")throw new Error("Point size is not a number!");if(!(this._errorState>2)){var t=this.font,n=this._prepState;if(!n||n.ppem!==e){var s=this._fpgmState;if(!s){tt.prototype=Tu,s=this._fpgmState=new tt("fpgm",t.tables.fpgm),s.funcs=[],s.font=t,exports.DEBUG&&(console.log("---EXEC FPGM---"),s.step=-1);try{gt(s)}catch(l){console.log("Hinting error in FPGM:"+l),this._errorState=3;return}}tt.prototype=s,n=this._prepState=new tt("prep",t.tables.prep),n.ppem=e;var i=t.tables.cvt;if(i)for(var o=n.cvt=new Array(i.length),a=e/t.unitsPerEm,u=0;u<i.length;u++)o[u]=i[u]*a;else n.cvt=[];exports.DEBUG&&(console.log("---EXEC PREP---"),n.step=-1);try{gt(n)}catch(l){this._errorState<2&&console.log("Hinting error in PREP:"+l),this._errorState=2}}if(!(this._errorState>1))try{return Ni(r,n)}catch(l){this._errorState<1&&(console.log("Hinting error:"+l),console.log("Note: further hinting errors are silenced")),this._errorState=1;return}}};Ni=function(r,e){var t=e.ppem/e.font.unitsPerEm,n=t,s=r.components,i,o,a;if(tt.prototype=e,!s)a=new tt("glyf",r.instructions),exports.DEBUG&&(console.log("---EXEC GLYPH---"),a.step=-1),yn(r,a,t,n),o=a.gZone;else{var u=e.font;o=[],i=[];for(var l=0;l<s.length;l++){var f=s[l],c=u.glyphs.get(f.glyphIndex);a=new tt("glyf",c.instructions),exports.DEBUG&&(console.log("---EXEC COMP "+l+"---"),a.step=-1),yn(c,a,t,n);for(var h=Math.round(f.dx*t),p=Math.round(f.dy*n),g=a.gZone,m=a.contours,x=0;x<g.length;x++){var y=g[x];y.xTouched=y.yTouched=!1,y.xo=y.x=y.x+h,y.yo=y.y=y.y+p}var S=o.length;o.push.apply(o,g);for(var w=0;w<m.length;w++)i.push(m[w]+S)}r.instructions&&!a.inhibitGridFit&&(a=new tt("glyf",r.instructions),a.gZone=a.z0=a.z1=a.z2=o,a.contours=i,o.push(new Ze(0,0),new Ze(Math.round(r.advanceWidth*t),0)),exports.DEBUG&&(console.log("---EXEC COMPOSITE---"),a.step=-1),gt(a),o.length-=2)}return o};yn=function(r,e,t,n){for(var s=r.points||[],i=s.length,o=e.gZone=e.z0=e.z1=e.z2=[],a=e.contours=[],u,l=0;l<i;l++)u=s[l],o[l]=new Ze(u.x*t,u.y*n,u.lastPointOfContour,u.onCurve);for(var f,c,h=0;h<i;h++)u=o[h],f||(f=u,a.push(h)),u.lastPointOfContour?(u.nextPointOnContour=f,f.prevPointOnContour=u,f=void 0):(c=o[h+1],u.nextPointOnContour=c,c.prevPointOnContour=u);if(!e.inhibitGridFit){if(exports.DEBUG){console.log("PROCESSING GLYPH",e.stack);for(var p=0;p<i;p++)console.log(p,o[p].x,o[p].y)}if(o.push(new Ze(0,0),new Ze(Math.round(r.advanceWidth*t),0)),gt(e),o.length-=2,exports.DEBUG){console.log("FINISHED GLYPH",e.stack);for(var g=0;g<i;g++)console.log(g,o[g].x,o[g].y)}}};gt=function(r){var e=r.prog;if(e){var t=e.length,n;for(r.ip=0;r.ip<t;r.ip++){if(exports.DEBUG&&r.step++,n=Ri[e[r.ip]],!n)throw new Error("unknown instruction: 0x"+Number(e[r.ip]).toString(16));n(r)}}};function Fr(r){for(var e=r.tZone=new Array(r.gZone.length),t=0;t<e.length;t++)e[t]=new Ze(0,0)}function zi(r,e){var t=r.prog,n=r.ip,s=1,i;do if(i=t[++n],i===88)s++;else if(i===89)s--;else if(i===64)n+=t[n+1]+1;else if(i===65)n+=2*t[n+1]+1;else if(i>=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=(i-184+1)*2;else if(e&&s===1&&i===27)break;while(s>0);r.ip=n}function As(r,e){exports.DEBUG&&console.log(e.step,"SVTCA["+r.axis+"]"),e.fv=e.pv=e.dpv=r}function Ds(r,e){exports.DEBUG&&console.log(e.step,"SPVTCA["+r.axis+"]"),e.pv=e.dpv=r}function Us(r,e){exports.DEBUG&&console.log(e.step,"SFVTCA["+r.axis+"]"),e.fv=r}function Rs(r,e){var t=e.stack,n=t.pop(),s=t.pop(),i=e.z2[n],o=e.z1[s];exports.DEBUG&&console.log("SPVTL["+r+"]",n,s);var a,u;r?(a=i.y-o.y,u=o.x-i.x):(a=o.x-i.x,u=o.y-i.y),e.pv=e.dpv=Yt(a,u)}function Ns(r,e){var t=e.stack,n=t.pop(),s=t.pop(),i=e.z2[n],o=e.z1[s];exports.DEBUG&&console.log("SFVTL["+r+"]",n,s);var a,u;r?(a=i.y-o.y,u=o.x-i.x):(a=o.x-i.x,u=o.y-i.y),e.fv=Yt(a,u)}function Cu(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"SPVFS[]",t,n),r.pv=r.dpv=Yt(n,t)}function Mu(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"SPVFS[]",t,n),r.fv=Yt(n,t)}function Ou(r){var e=r.stack,t=r.pv;exports.DEBUG&&console.log(r.step,"GPV[]"),e.push(t.x*16384),e.push(t.y*16384)}function Fu(r){var e=r.stack,t=r.fv;exports.DEBUG&&console.log(r.step,"GFV[]"),e.push(t.x*16384),e.push(t.y*16384)}function Au(r){r.fv=r.pv,exports.DEBUG&&console.log(r.step,"SFVTPV[]")}function Du(r){var e=r.stack,t=e.pop(),n=e.pop(),s=e.pop(),i=e.pop(),o=e.pop(),a=r.z0,u=r.z1,l=a[t],f=a[n],c=u[s],h=u[i],p=r.z2[o];exports.DEBUG&&console.log("ISECT[], ",t,n,s,i,o);var g=l.x,m=l.y,x=f.x,y=f.y,S=c.x,w=c.y,F=h.x,P=h.y,U=(g-x)*(w-P)-(m-y)*(S-F),O=g*y-m*x,L=S*P-w*F;p.x=(O*(S-F)-L*(g-x))/U,p.y=(O*(w-P)-L*(m-y))/U}function Uu(r){r.rp0=r.stack.pop(),exports.DEBUG&&console.log(r.step,"SRP0[]",r.rp0)}function Ru(r){r.rp1=r.stack.pop(),exports.DEBUG&&console.log(r.step,"SRP1[]",r.rp1)}function Nu(r){r.rp2=r.stack.pop(),exports.DEBUG&&console.log(r.step,"SRP2[]",r.rp2)}function Bu(r){var e=r.stack.pop();switch(exports.DEBUG&&console.log(r.step,"SZP0[]",e),r.zp0=e,e){case 0:r.tZone||Fr(r),r.z0=r.tZone;break;case 1:r.z0=r.gZone;break;default:throw new Error("Invalid zone pointer")}}function Gu(r){var e=r.stack.pop();switch(exports.DEBUG&&console.log(r.step,"SZP1[]",e),r.zp1=e,e){case 0:r.tZone||Fr(r),r.z1=r.tZone;break;case 1:r.z1=r.gZone;break;default:throw new Error("Invalid zone pointer")}}function Hu(r){var e=r.stack.pop();switch(exports.DEBUG&&console.log(r.step,"SZP2[]",e),r.zp2=e,e){case 0:r.tZone||Fr(r),r.z2=r.tZone;break;case 1:r.z2=r.gZone;break;default:throw new Error("Invalid zone pointer")}}function zu(r){var e=r.stack.pop();switch(exports.DEBUG&&console.log(r.step,"SZPS[]",e),r.zp0=r.zp1=r.zp2=e,e){case 0:r.tZone||Fr(r),r.z0=r.z1=r.z2=r.tZone;break;case 1:r.z0=r.z1=r.z2=r.gZone;break;default:throw new Error("Invalid zone pointer")}}function Vu(r){r.loop=r.stack.pop(),exports.DEBUG&&console.log(r.step,"SLOOP[]",r.loop)}function Xu(r){exports.DEBUG&&console.log(r.step,"RTG[]"),r.round=Gi}function qu(r){exports.DEBUG&&console.log(r.step,"RTHG[]"),r.round=Pu}function Wu(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"SMD[]",e),r.minDis=e/64}function $u(r){exports.DEBUG&&console.log(r.step,"ELSE[]"),zi(r,!1)}function Zu(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"JMPR[]",e),r.ip+=e-1}function _u(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"SCVTCI[]",e),r.cvCutIn=e/64}function Yu(r){var e=r.stack;exports.DEBUG&&console.log(r.step,"DUP[]"),e.push(e[e.length-1])}function on(r){exports.DEBUG&&console.log(r.step,"POP[]"),r.stack.pop()}function ju(r){exports.DEBUG&&console.log(r.step,"CLEAR[]"),r.stack.length=0}function Ku(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"SWAP[]"),e.push(t),e.push(n)}function Ju(r){var e=r.stack;exports.DEBUG&&console.log(r.step,"DEPTH[]"),e.push(e.length)}function Qu(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"LOOPCALL[]",t,n);var s=r.ip,i=r.prog;r.prog=r.funcs[t];for(var o=0;o<n;o++)gt(r),exports.DEBUG&&console.log(++r.step,o+1<n?"next loopcall":"done loopcall",o);r.ip=s,r.prog=i}function el(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"CALL[]",e);var t=r.ip,n=r.prog;r.prog=r.funcs[e],gt(r),r.ip=t,r.prog=n,exports.DEBUG&&console.log(++r.step,"returning from",e)}function tl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"CINDEX[]",t),e.push(e[e.length-t])}function rl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"MINDEX[]",t),e.push(e.splice(e.length-t,1)[0])}function nl(r){if(r.env!=="fpgm")throw new Error("FDEF not allowed here");var e=r.stack,t=r.prog,n=r.ip,s=e.pop(),i=n;for(exports.DEBUG&&console.log(r.step,"FDEF[]",s);t[++n]!==45;);r.ip=n,r.funcs[s]=t.slice(i+1,n)}function Bs(r,e){var t=e.stack.pop(),n=e.z0[t],s=e.fv,i=e.pv;exports.DEBUG&&console.log(e.step,"MDAP["+r+"]",t);var o=i.distance(n,Wt);r&&(o=e.round(o)),s.setRelative(n,Wt,o,i),s.touch(n),e.rp0=e.rp1=t}function Gs(r,e){var t=e.z2,n=t.length-2,s,i,o;exports.DEBUG&&console.log(e.step,"IUP["+r.axis+"]");for(var a=0;a<n;a++)s=t[a],!r.touched(s)&&(i=s.prevTouched(r),i!==s&&(o=s.nextTouched(r),i===o&&r.setRelative(s,s,r.distance(i,i,!1,!0),r,!0),r.interpolate(s,i,o,r)))}function Hs(r,e){for(var t=e.stack,n=r?e.rp1:e.rp2,s=(r?e.z0:e.z1)[n],i=e.fv,o=e.pv,a=e.loop,u=e.z2;a--;){var l=t.pop(),f=u[l],c=o.distance(s,s,!1,!0);i.setRelative(f,f,c,o),i.touch(f),exports.DEBUG&&console.log(e.step,(e.loop>1?"loop "+(e.loop-a)+": ":"")+"SHP["+(r?"rp1":"rp2")+"]",l)}e.loop=1}function zs(r,e){var t=e.stack,n=r?e.rp1:e.rp2,s=(r?e.z0:e.z1)[n],i=e.fv,o=e.pv,a=t.pop(),u=e.z2[e.contours[a]],l=u;exports.DEBUG&&console.log(e.step,"SHC["+r+"]",a);var f=o.distance(s,s,!1,!0);do l!==s&&i.setRelative(l,l,f,o),l=l.nextPointOnContour;while(l!==u)}function Vs(r,e){var t=e.stack,n=r?e.rp1:e.rp2,s=(r?e.z0:e.z1)[n],i=e.fv,o=e.pv,a=t.pop();exports.DEBUG&&console.log(e.step,"SHZ["+r+"]",a);var u;switch(a){case 0:u=e.tZone;break;case 1:u=e.gZone;break;default:throw new Error("Invalid zone")}for(var l,f=o.distance(s,s,!1,!0),c=u.length-2,h=0;h<c;h++)l=u[h],i.setRelative(l,l,f,o)}function sl(r){for(var e=r.stack,t=r.loop,n=r.fv,s=e.pop()/64,i=r.z2;t--;){var o=e.pop(),a=i[o];exports.DEBUG&&console.log(r.step,(r.loop>1?"loop "+(r.loop-t)+": ":"")+"SHPIX[]",o,s),n.setRelative(a,a,s),n.touch(a)}r.loop=1}function il(r){for(var e=r.stack,t=r.rp1,n=r.rp2,s=r.loop,i=r.z0[t],o=r.z1[n],a=r.fv,u=r.dpv,l=r.z2;s--;){var f=e.pop(),c=l[f];exports.DEBUG&&console.log(r.step,(r.loop>1?"loop "+(r.loop-s)+": ":"")+"IP[]",f,t,"<->",n),a.interpolate(c,i,o,u),a.touch(c)}r.loop=1}function Xs(r,e){var t=e.stack,n=t.pop()/64,s=t.pop(),i=e.z1[s],o=e.z0[e.rp0],a=e.fv,u=e.pv;a.setRelative(i,o,n,u),a.touch(i),exports.DEBUG&&console.log(e.step,"MSIRP["+r+"]",n,s),e.rp1=e.rp0,e.rp2=s,r&&(e.rp0=s)}function ol(r){for(var e=r.stack,t=r.rp0,n=r.z0[t],s=r.loop,i=r.fv,o=r.pv,a=r.z1;s--;){var u=e.pop(),l=a[u];exports.DEBUG&&console.log(r.step,(r.loop>1?"loop "+(r.loop-s)+": ":"")+"ALIGNRP[]",u),i.setRelative(l,n,0,o),i.touch(l)}r.loop=1}function al(r){exports.DEBUG&&console.log(r.step,"RTDG[]"),r.round=Eu}function qs(r,e){var t=e.stack,n=t.pop(),s=t.pop(),i=e.z0[s],o=e.fv,a=e.pv,u=e.cvt[n];exports.DEBUG&&console.log(e.step,"MIAP["+r+"]",n,"(",u,")",s);var l=a.distance(i,Wt);r&&(Math.abs(l-u)<e.cvCutIn&&(l=u),l=e.round(l)),o.setRelative(i,Wt,l,a),e.zp0===0&&(i.xo=i.x,i.yo=i.y),o.touch(i),e.rp0=e.rp1=s}function ul(r){var e=r.prog,t=r.ip,n=r.stack,s=e[++t];exports.DEBUG&&console.log(r.step,"NPUSHB[]",s);for(var i=0;i<s;i++)n.push(e[++t]);r.ip=t}function ll(r){var e=r.ip,t=r.prog,n=r.stack,s=t[++e];exports.DEBUG&&console.log(r.step,"NPUSHW[]",s);for(var i=0;i<s;i++){var o=t[++e]<<8|t[++e];o&32768&&(o=-((o^65535)+1)),n.push(o)}r.ip=e}function fl(r){var e=r.stack,t=r.store;t||(t=r.store=[]);var n=e.pop(),s=e.pop();exports.DEBUG&&console.log(r.step,"WS",n,s),t[s]=n}function hl(r){var e=r.stack,t=r.store,n=e.pop();exports.DEBUG&&console.log(r.step,"RS",n);var s=t&&t[n]||0;e.push(s)}function cl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"WCVTP",t,n),r.cvt[n]=t/64}function pl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"RCVT",t),e.push(r.cvt[t]*64)}function Ws(r,e){var t=e.stack,n=t.pop(),s=e.z2[n];exports.DEBUG&&console.log(e.step,"GC["+r+"]",n),t.push(e.dpv.distance(s,Wt,r,!1)*64)}function $s(r,e){var t=e.stack,n=t.pop(),s=t.pop(),i=e.z1[n],o=e.z0[s],a=e.dpv.distance(o,i,r,r);exports.DEBUG&&console.log(e.step,"MD["+r+"]",n,s,"->",a),e.stack.push(Math.round(a*64))}function dl(r){exports.DEBUG&&console.log(r.step,"MPPEM[]"),r.stack.push(r.ppem)}function gl(r){exports.DEBUG&&console.log(r.step,"FLIPON[]"),r.autoFlip=!0}function vl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"LT[]",t,n),e.push(n<t?1:0)}function ml(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"LTEQ[]",t,n),e.push(n<=t?1:0)}function xl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"GT[]",t,n),e.push(n>t?1:0)}function yl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"GTEQ[]",t,n),e.push(n>=t?1:0)}function bl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"EQ[]",t,n),e.push(t===n?1:0)}function Sl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"NEQ[]",t,n),e.push(t!==n?1:0)}function wl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"ODD[]",t),e.push(Math.trunc(t)%2?1:0)}function kl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"EVEN[]",t),e.push(Math.trunc(t)%2?0:1)}function El(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"IF[]",e),e||(zi(r,!0),exports.DEBUG&&console.log(r.step,"EIF[]"))}function Pl(r){exports.DEBUG&&console.log(r.step,"EIF[]")}function Ll(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"AND[]",t,n),e.push(t&&n?1:0)}function Il(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"OR[]",t,n),e.push(t||n?1:0)}function Tl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"NOT[]",t),e.push(t?0:1)}function an(r,e){var t=e.stack,n=t.pop(),s=e.fv,i=e.pv,o=e.ppem,a=e.deltaBase+(r-1)*16,u=e.deltaShift,l=e.z0;exports.DEBUG&&console.log(e.step,"DELTAP["+r+"]",n,t);for(var f=0;f<n;f++){var c=t.pop(),h=t.pop(),p=a+((h&240)>>4);if(p===o){var g=(h&15)-8;g>=0&&g++,exports.DEBUG&&console.log(e.step,"DELTAPFIX",c,"by",g*u);var m=l[c];s.setRelative(m,m,g*u,i)}}}function Cl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"SDB[]",t),r.deltaBase=t}function Ml(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"SDS[]",t),r.deltaShift=Math.pow(.5,t)}function Ol(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"ADD[]",t,n),e.push(n+t)}function Fl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"SUB[]",t,n),e.push(n-t)}function Al(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"DIV[]",t,n),e.push(n*64/t)}function Dl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"MUL[]",t,n),e.push(n*t/64)}function Ul(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"ABS[]",t),e.push(Math.abs(t))}function Rl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"NEG[]",t),e.push(-t)}function Nl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"FLOOR[]",t),e.push(Math.floor(t/64)*64)}function Bl(r){var e=r.stack,t=e.pop();exports.DEBUG&&console.log(r.step,"CEILING[]",t),e.push(Math.ceil(t/64)*64)}function kr(r,e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,"ROUND[]"),t.push(e.round(n/64)*64)}function Gl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"WCVTF[]",t,n),r.cvt[n]=t*r.ppem/r.font.unitsPerEm}function un(r,e){var t=e.stack,n=t.pop(),s=e.ppem,i=e.deltaBase+(r-1)*16,o=e.deltaShift;exports.DEBUG&&console.log(e.step,"DELTAC["+r+"]",n,t);for(var a=0;a<n;a++){var u=t.pop(),l=t.pop(),f=i+((l&240)>>4);if(f===s){var c=(l&15)-8;c>=0&&c++;var h=c*o;exports.DEBUG&&console.log(e.step,"DELTACFIX",u,"by",h),e.cvt[u]+=h}}}function Hl(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"SROUND[]",e),r.round=Hi;var t;switch(e&192){case 0:t=.5;break;case 64:t=1;break;case 128:t=2;break;default:throw new Error("invalid SROUND value")}switch(r.srPeriod=t,e&48){case 0:r.srPhase=0;break;case 16:r.srPhase=.25*t;break;case 32:r.srPhase=.5*t;break;case 48:r.srPhase=.75*t;break;default:throw new Error("invalid SROUND value")}e&=15,e===0?r.srThreshold=0:r.srThreshold=(e/8-.5)*t}function zl(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"S45ROUND[]",e),r.round=Hi;var t;switch(e&192){case 0:t=Math.sqrt(2)/2;break;case 64:t=Math.sqrt(2);break;case 128:t=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(r.srPeriod=t,e&48){case 0:r.srPhase=0;break;case 16:r.srPhase=.25*t;break;case 32:r.srPhase=.5*t;break;case 48:r.srPhase=.75*t;break;default:throw new Error("invalid S45ROUND value")}e&=15,e===0?r.srThreshold=0:r.srThreshold=(e/8-.5)*t}function Vl(r){exports.DEBUG&&console.log(r.step,"ROFF[]"),r.round=ku}function Xl(r){exports.DEBUG&&console.log(r.step,"RUTG[]"),r.round=Lu}function ql(r){exports.DEBUG&&console.log(r.step,"RDTG[]"),r.round=Iu}function Wl(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"SCANCTRL[]",e)}function Zs(r,e){var t=e.stack,n=t.pop(),s=t.pop(),i=e.z2[n],o=e.z1[s];exports.DEBUG&&console.log(e.step,"SDPVTL["+r+"]",n,s);var a,u;r?(a=i.y-o.y,u=o.x-i.x):(a=o.x-i.x,u=o.y-i.y),e.dpv=Yt(a,u)}function $l(r){var e=r.stack,t=e.pop(),n=0;exports.DEBUG&&console.log(r.step,"GETINFO[]",t),t&1&&(n=35),t&32&&(n|=4096),e.push(n)}function Zl(r){var e=r.stack,t=e.pop(),n=e.pop(),s=e.pop();exports.DEBUG&&console.log(r.step,"ROLL[]"),e.push(n),e.push(t),e.push(s)}function _l(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"MAX[]",t,n),e.push(Math.max(n,t))}function Yl(r){var e=r.stack,t=e.pop(),n=e.pop();exports.DEBUG&&console.log(r.step,"MIN[]",t,n),e.push(Math.min(n,t))}function jl(r){var e=r.stack.pop();exports.DEBUG&&console.log(r.step,"SCANTYPE[]",e)}function Kl(r){var e=r.stack.pop(),t=r.stack.pop();switch(exports.DEBUG&&console.log(r.step,"INSTCTRL[]",e,t),e){case 1:r.inhibitGridFit=!!t;return;case 2:r.ignoreCvt=!!t;return;default:throw new Error("invalid INSTCTRL[] selector")}}function Je(r,e){var t=e.stack,n=e.prog,s=e.ip;exports.DEBUG&&console.log(e.step,"PUSHB["+r+"]");for(var i=0;i<r;i++)t.push(n[++s]);e.ip=s}function Qe(r,e){var t=e.ip,n=e.prog,s=e.stack;exports.DEBUG&&console.log(e.ip,"PUSHW["+r+"]");for(var i=0;i<r;i++){var o=n[++t]<<8|n[++t];o&32768&&(o=-((o^65535)+1)),s.push(o)}e.ip=t}function T(r,e,t,n,s,i){var o=i.stack,a=r&&o.pop(),u=o.pop(),l=i.rp0,f=i.z0[l],c=i.z1[u],h=i.minDis,p=i.fv,g=i.dpv,m,x,y,S;x=m=g.distance(c,f,!0,!0),y=x>=0?1:-1,x=Math.abs(x),r&&(S=i.cvt[a],n&&Math.abs(x-S)<i.cvCutIn&&(x=S)),t&&x<h&&(x=h),n&&(x=i.round(x)),p.setRelative(c,f,y*x,g),p.touch(c),exports.DEBUG&&console.log(i.step,(r?"MIRP[":"MDRP[")+(e?"M":"m")+(t?">":"_")+(n?"R":"_")+(s===0?"Gr":s===1?"Bl":s===2?"Wh":"")+"]",r?a+"("+i.cvt[a]+","+S+")":"",u,"(d =",m,"->",y*x,")"),i.rp1=i.rp0,i.rp2=u,e&&(i.rp0=u)}Ri=[As.bind(void 0,$e),As.bind(void 0,Xe),Ds.bind(void 0,$e),Ds.bind(void 0,Xe),Us.bind(void 0,$e),Us.bind(void 0,Xe),Rs.bind(void 0,0),Rs.bind(void 0,1),Ns.bind(void 0,0),Ns.bind(void 0,1),Cu,Mu,Ou,Fu,Au,Du,Uu,Ru,Nu,Bu,Gu,Hu,zu,Vu,Xu,qu,Wu,$u,Zu,_u,void 0,void 0,Yu,on,ju,Ku,Ju,tl,rl,void 0,void 0,void 0,Qu,el,nl,void 0,Bs.bind(void 0,0),Bs.bind(void 0,1),Gs.bind(void 0,$e),Gs.bind(void 0,Xe),Hs.bind(void 0,0),Hs.bind(void 0,1),zs.bind(void 0,0),zs.bind(void 0,1),Vs.bind(void 0,0),Vs.bind(void 0,1),sl,il,Xs.bind(void 0,0),Xs.bind(void 0,1),ol,al,qs.bind(void 0,0),qs.bind(void 0,1),ul,ll,fl,hl,cl,pl,Ws.bind(void 0,0),Ws.bind(void 0,1),void 0,$s.bind(void 0,0),$s.bind(void 0,1),dl,void 0,gl,void 0,void 0,vl,ml,xl,yl,bl,Sl,wl,kl,El,Pl,Ll,Il,Tl,an.bind(void 0,1),Cl,Ml,Ol,Fl,Al,Dl,Ul,Rl,Nl,Bl,kr.bind(void 0,0),kr.bind(void 0,1),kr.bind(void 0,2),kr.bind(void 0,3),void 0,void 0,void 0,void 0,Gl,an.bind(void 0,2),an.bind(void 0,3),un.bind(void 0,1),un.bind(void 0,2),un.bind(void 0,3),Hl,zl,void 0,void 0,Vl,void 0,Xl,ql,on,on,void 0,void 0,void 0,void 0,void 0,Wl,Zs.bind(void 0,0),Zs.bind(void 0,1),$l,void 0,Zl,_l,Yl,jl,Kl,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,Je.bind(void 0,1),Je.bind(void 0,2),Je.bind(void 0,3),Je.bind(void 0,4),Je.bind(void 0,5),Je.bind(void 0,6),Je.bind(void 0,7),Je.bind(void 0,8),Qe.bind(void 0,1),Qe.bind(void 0,2),Qe.bind(void 0,3),Qe.bind(void 0,4),Qe.bind(void 0,5),Qe.bind(void 0,6),Qe.bind(void 0,7),Qe.bind(void 0,8),T.bind(void 0,0,0,0,0,0),T.bind(void 0,0,0,0,0,1),T.bind(void 0,0,0,0,0,2),T.bind(void 0,0,0,0,0,3),T.bind(void 0,0,0,0,1,0),T.bind(void 0,0,0,0,1,1),T.bind(void 0,0,0,0,1,2),T.bind(void 0,0,0,0,1,3),T.bind(void 0,0,0,1,0,0),T.bind(void 0,0,0,1,0,1),T.bind(void 0,0,0,1,0,2),T.bind(void 0,0,0,1,0,3),T.bind(void 0,0,0,1,1,0),T.bind(void 0,0,0,1,1,1),T.bind(void 0,0,0,1,1,2),T.bind(void 0,0,0,1,1,3),T.bind(void 0,0,1,0,0,0),T.bind(void 0,0,1,0,0,1),T.bind(void 0,0,1,0,0,2),T.bind(void 0,0,1,0,0,3),T.bind(void 0,0,1,0,1,0),T.bind(void 0,0,1,0,1,1),T.bind(void 0,0,1,0,1,2),T.bind(void 0,0,1,0,1,3),T.bind(void 0,0,1,1,0,0),T.bind(void 0,0,1,1,0,1),T.bind(void 0,0,1,1,0,2),T.bind(void 0,0,1,1,0,3),T.bind(void 0,0,1,1,1,0),T.bind(void 0,0,1,1,1,1),T.bind(void 0,0,1,1,1,2),T.bind(void 0,0,1,1,1,3),T.bind(void 0,1,0,0,0,0),T.bind(void 0,1,0,0,0,1),T.bind(void 0,1,0,0,0,2),T.bind(void 0,1,0,0,0,3),T.bind(void 0,1,0,0,1,0),T.bind(void 0,1,0,0,1,1),T.bind(void 0,1,0,0,1,2),T.bind(void 0,1,0,0,1,3),T.bind(void 0,1,0,1,0,0),T.bind(void 0,1,0,1,0,1),T.bind(void 0,1,0,1,0,2),T.bind(void 0,1,0,1,0,3),T.bind(void 0,1,0,1,1,0),T.bind(void 0,1,0,1,1,1),T.bind(void 0,1,0,1,1,2),T.bind(void 0,1,0,1,1,3),T.bind(void 0,1,1,0,0,0),T.bind(void 0,1,1,0,0,1),T.bind(void 0,1,1,0,0,2),T.bind(void 0,1,1,0,0,3),T.bind(void 0,1,1,0,1,0),T.bind(void 0,1,1,0,1,1),T.bind(void 0,1,1,0,1,2),T.bind(void 0,1,1,0,1,3),T.bind(void 0,1,1,1,0,0),T.bind(void 0,1,1,1,0,1),T.bind(void 0,1,1,1,0,2),T.bind(void 0,1,1,1,0,3),T.bind(void 0,1,1,1,1,0),T.bind(void 0,1,1,1,1,1),T.bind(void 0,1,1,1,1,2),T.bind(void 0,1,1,1,1,3)];function Lt(r){this.char=r,this.state={},this.activeState=null}function Tn(r,e,t){this.contextName=t,this.startIndex=r,this.endOffset=e}function Jl(r,e,t){this.contextName=r,this.openRange=null,this.ranges=[],this.checkStart=e,this.checkEnd=t}function Ae(r,e){this.context=r,this.index=e,this.length=r.length,this.current=r[e],this.backtrack=r.slice(0,e),this.lookahead=r.slice(e+1)}function Ar(r){this.eventId=r,this.subscribers=[]}function Ql(r){var e=this,t=["start","end","next","newToken","contextStart","contextEnd","insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD","updateContextsRanges"];t.forEach(function(s){Object.defineProperty(e.events,s,{value:new Ar(s)})}),r&&t.forEach(function(s){var i=r[s];typeof i=="function"&&e.events[s].subscribe(i)});var n=["insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD"];n.forEach(function(s){e.events[s].subscribe(e.updateContextsRanges)})}function ie(r){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],Ql.call(this,r)}Lt.prototype.setState=function(r,e){return this.state[r]=e,this.activeState={key:r,value:this.state[r]},this.activeState};Lt.prototype.getState=function(r){return this.state[r]||null};ie.prototype.inboundIndex=function(r){return r>=0&&r<this.tokens.length};ie.prototype.composeRUD=function(r){var e=this,t=!0,n=r.map(function(i){return e[i[0]].apply(e,i.slice(1).concat(t))}),s=function(i){return typeof i=="object"&&i.hasOwnProperty("FAIL")};if(n.every(s))return{FAIL:"composeRUD: one or more operations hasn't completed successfully",report:n.filter(s)};this.dispatch("composeRUD",[n.filter(function(i){return!s(i)})])};ie.prototype.replaceRange=function(r,e,t,n){e=e!==null?e:this.tokens.length;var s=t.every(function(o){return o instanceof Lt});if(!isNaN(r)&&this.inboundIndex(r)&&s){var i=this.tokens.splice.apply(this.tokens,[r,e].concat(t));return n||this.dispatch("replaceToken",[r,e,t]),[i,t]}else return{FAIL:"replaceRange: invalid tokens or startIndex."}};ie.prototype.replaceToken=function(r,e,t){if(!isNaN(r)&&this.inboundIndex(r)&&e instanceof Lt){var n=this.tokens.splice(r,1,e);return t||this.dispatch("replaceToken",[r,e]),[n[0],e]}else return{FAIL:"replaceToken: invalid token or index."}};ie.prototype.removeRange=function(r,e,t){e=isNaN(e)?this.tokens.length:e;var n=this.tokens.splice(r,e);return t||this.dispatch("removeRange",[n,r,e]),n};ie.prototype.removeToken=function(r,e){if(!isNaN(r)&&this.inboundIndex(r)){var t=this.tokens.splice(r,1);return e||this.dispatch("removeToken",[t,r]),t}else return{FAIL:"removeToken: invalid token index."}};ie.prototype.insertToken=function(r,e,t){var n=r.every(function(s){return s instanceof Lt});return n?(this.tokens.splice.apply(this.tokens,[e,0].concat(r)),t||this.dispatch("insertToken",[r,e]),r):{FAIL:"insertToken: invalid token(s)."}};ie.prototype.registerModifier=function(r,e,t){this.events.newToken.subscribe(function(n,s){var i=[n,s],o=e===null||e.apply(this,i)===!0,a=[n,s];if(o){var u=t.apply(this,a);n.setState(r,u)}}),this.registeredModifiers.push(r)};Ar.prototype.subscribe=function(r){return typeof r=="function"?this.subscribers.push(r)-1:{FAIL:"invalid '"+this.eventId+"' event handler"}};Ar.prototype.unsubscribe=function(r){this.subscribers.splice(r,1)};Ae.prototype.setCurrentIndex=function(r){this.index=r,this.current=this.context[r],this.backtrack=this.context.slice(0,r),this.lookahead=this.context.slice(r+1)};Ae.prototype.get=function(r){switch(!0){case r===0:return this.current;case(r<0&&Math.abs(r)<=this.backtrack.length):return this.backtrack.slice(r)[0];case(r>0&&r<=this.lookahead.length):return this.lookahead[r-1];default:return null}};ie.prototype.rangeToText=function(r){if(r instanceof Tn)return this.getRangeTokens(r).map(function(e){return e.char}).join("")};ie.prototype.getText=function(){return this.tokens.map(function(r){return r.char}).join("")};ie.prototype.getContext=function(r){var e=this.registeredContexts[r];return e||null};ie.prototype.on=function(r,e){var t=this.events[r];return t?t.subscribe(e):null};ie.prototype.dispatch=function(r,e){var t=this,n=this.events[r];n instanceof Ar&&n.subscribers.forEach(function(s){s.apply(t,e||[])})};ie.prototype.registerContextChecker=function(r,e,t){if(this.getContext(r))return{FAIL:"context name '"+r+"' is already registered."};if(typeof e!="function")return{FAIL:"missing context start check."};if(typeof t!="function")return{FAIL:"missing context end check."};var n=new Jl(r,e,t);return this.registeredContexts[r]=n,this.contextCheckers.push(n),n};ie.prototype.getRangeTokens=function(r){var e=r.startIndex+r.endOffset;return[].concat(this.tokens.slice(r.startIndex,e))};ie.prototype.getContextRanges=function(r){var e=this.getContext(r);return e?e.ranges:{FAIL:"context checker '"+r+"' is not registered."}};ie.prototype.resetContextsRanges=function(){var r=this.registeredContexts;for(var e in r)if(r.hasOwnProperty(e)){var t=r[e];t.ranges=[]}};ie.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var r=this.tokens.map(function(n){return n.char}),e=0;e<r.length;e++){var t=new Ae(r,e);this.runContextCheck(t)}this.dispatch("updateContextsRanges",[this.registeredContexts])};ie.prototype.setEndOffset=function(r,e){var t=this.getContext(e).openRange.startIndex,n=new Tn(t,r,e),s=this.getContext(e).ranges;return n.rangeId=e+"."+s.length,s.push(n),this.getContext(e).openRange=null,n};ie.prototype.runContextCheck=function(r){var e=this,t=r.index;this.contextCheckers.forEach(function(n){var s=n.contextName,i=e.getContext(s).openRange;if(!i&&n.checkStart(r)&&(i=new Tn(t,null,s),e.getContext(s).openRange=i,e.dispatch("contextStart",[s,t])),i&&n.checkEnd(r)){var o=t-i.startIndex+1,a=e.setEndOffset(o,s);e.dispatch("contextEnd",[s,a])}})};ie.prototype.tokenize=function(r){this.tokens=[],this.resetContextsRanges();var e=Array.from(r);this.dispatch("start");for(var t=0;t<e.length;t++){var n=e[t],s=new Ae(e,t);this.dispatch("next",[s]),this.runContextCheck(s);var i=new Lt(n);this.tokens.push(i),this.dispatch("newToken",[i,s])}return this.dispatch("end",[this.tokens]),this.tokens};function rt(r){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(r)}function Vi(r){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(r)}function nt(r){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(r)}function Pr(r){return/[A-z]/.test(r)}function ef(r){return/\s/.test(r)}function Ee(r){this.font=r,this.features={}}function dt(r){this.id=r.id,this.tag=r.tag,this.substitution=r.substitution}function jt(r,e){if(!r)return-1;switch(e.format){case 1:return e.glyphs.indexOf(r);case 2:for(var t=e.ranges,n=0;n<t.length;n++){var s=t[n];if(r>=s.start&&r<=s.end){var i=r-s.start;return s.index+i}}break;default:return-1}return-1}function tf(r,e){var t=jt(r,e.coverage);return t===-1?null:r+e.deltaGlyphId}function rf(r,e){var t=jt(r,e.coverage);return t===-1?null:e.substitute[t]}function ln(r,e){for(var t=[],n=0;n<r.length;n++){var s=r[n],i=e.current;i=Array.isArray(i)?i[0]:i;var o=jt(i,s);o!==-1&&t.push(o)}return t.length!==r.length?-1:t}function nf(r,e){var t=e.inputCoverage.length+e.lookaheadCoverage.length+e.backtrackCoverage.length;if(r.context.length<t)return[];var n=ln(e.inputCoverage,r);if(n===-1)return[];var s=e.inputCoverage.length-1;if(r.lookahead.length<e.lookaheadCoverage.length)return[];for(var i=r.lookahead.slice(s);i.length&&nt(i[0].char);)i.shift();var o=new Ae(i,0),a=ln(e.lookaheadCoverage,o),u=[].concat(r.backtrack);for(u.reverse();u.length&&nt(u[0].char);)u.shift();if(u.length<e.backtrackCoverage.length)return[];var l=new Ae(u,0),f=ln(e.backtrackCoverage,l),c=n.length===e.inputCoverage.length&&a.length===e.lookaheadCoverage.length&&f.length===e.backtrackCoverage.length,h=[];if(c)for(var p=0;p<e.lookupRecords.length;p++)for(var g=e.lookupRecords[p],m=g.lookupListIndex,x=this.getLookupByIndex(m),y=0;y<x.subtables.length;y++){var S=x.subtables[y],w=this.getLookupMethod(x,S),F=this.getSubstitutionType(x,S);if(F==="12")for(var P=0;P<n.length;P++){var U=r.get(P),O=w(U);O&&h.push(O)}}return h}function sf(r,e){var t=r.current,n=jt(t,e.coverage);if(n===-1)return null;for(var s,i=e.ligatureSets[n],o=0;o<i.length;o++){s=i[o];for(var a=0;a<s.components.length;a++){var u=r.lookahead[a],l=s.components[a];if(u!==l)break;if(a===s.components.length-1)return s}}return null}function of(r,e){var t=jt(r,e.coverage);return t===-1?null:e.sequences[t]}Ee.prototype.getDefaultScriptFeaturesIndexes=function(){for(var r=this.font.tables.gsub.scripts,e=0;e<r.length;e++){var t=r[e];if(t.tag==="DFLT")return t.script.defaultLangSys.featureIndexes}return[]};Ee.prototype.getScriptFeaturesIndexes=function(r){var e=this.font.tables;if(!e.gsub)return[];if(!r)return this.getDefaultScriptFeaturesIndexes();for(var t=this.font.tables.gsub.scripts,n=0;n<t.length;n++){var s=t[n];if(s.tag===r&&s.script.defaultLangSys)return s.script.defaultLangSys.featureIndexes;var i=s.langSysRecords;if(i)for(var o=0;o<i.length;o++){var a=i[o];if(a.tag===r){var u=a.langSys;return u.featureIndexes}}}return this.getDefaultScriptFeaturesIndexes()};Ee.prototype.mapTagsToFeatures=function(r,e){for(var t={},n=0;n<r.length;n++){var s=r[n].tag,i=r[n].feature;t[s]=i}this.features[e].tags=t};Ee.prototype.getScriptFeatures=function(r){var e=this.features[r];if(this.features.hasOwnProperty(r))return e;var t=this.getScriptFeaturesIndexes(r);if(!t)return null;var n=this.font.tables.gsub;return e=t.map(function(s){return n.features[s]}),this.features[r]=e,this.mapTagsToFeatures(e,r),e};Ee.prototype.getSubstitutionType=function(r,e){var t=r.lookupType.toString(),n=e.substFormat.toString();return t+n};Ee.prototype.getLookupMethod=function(r,e){var t=this,n=this.getSubstitutionType(r,e);switch(n){case"11":return function(s){return tf.apply(t,[s,e])};case"12":return function(s){return rf.apply(t,[s,e])};case"63":return function(s){return nf.apply(t,[s,e])};case"41":return function(s){return sf.apply(t,[s,e])};case"21":return function(s){return of.apply(t,[s,e])};default:throw new Error("lookupType: "+r.lookupType+" - substFormat: "+e.substFormat+" is not yet supported")}};Ee.prototype.lookupFeature=function(r){var e=r.contextParams,t=e.index,n=this.getFeature({tag:r.tag,script:r.script});if(!n)return new Error("font '"+this.font.names.fullName.en+"' doesn't support feature '"+r.tag+"' for script '"+r.script+"'.");for(var s=this.getFeatureLookups(n),i=[].concat(e.context),o=0;o<s.length;o++)for(var a=s[o],u=this.getLookupSubtables(a),l=0;l<u.length;l++){var f=u[l],c=this.getSubstitutionType(a,f),h=this.getLookupMethod(a,f),p=void 0;switch(c){case"11":p=h(e.current),p&&i.splice(t,1,new dt({id:11,tag:r.tag,substitution:p}));break;case"12":p=h(e.current),p&&i.splice(t,1,new dt({id:12,tag:r.tag,substitution:p}));break;case"63":p=h(e),Array.isArray(p)&&p.length&&i.splice(t,1,new dt({id:63,tag:r.tag,substitution:p}));break;case"41":p=h(e),p&&i.splice(t,1,new dt({id:41,tag:r.tag,substitution:p}));break;case"21":p=h(e.current),p&&i.splice(t,1,new dt({id:21,tag:r.tag,substitution:p}));break}e=new Ae(i,t),!(Array.isArray(p)&&!p.length)&&(p=null)}return i.length?i:null};Ee.prototype.supports=function(r){if(!r.script)return!1;this.getScriptFeatures(r.script);var e=this.features.hasOwnProperty(r.script);if(!r.tag)return e;var t=this.features[r.script].some(function(n){return n.tag===r.tag});return e&&t};Ee.prototype.getLookupSubtables=function(r){return r.subtables||null};Ee.prototype.getLookupByIndex=function(r){var e=this.font.tables.gsub.lookups;return e[r]||null};Ee.prototype.getFeatureLookups=function(r){return r.lookupListIndexes.map(this.getLookupByIndex.bind(this))};Ee.prototype.getFeature=function(e){if(!this.font)return{FAIL:"No font was found"};this.features.hasOwnProperty(e.script)||this.getScriptFeatures(e.script);var t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:"No feature for script "+e.script}};function af(r){var e=r.current,t=r.get(-1);return t===null&&rt(e)||!rt(t)&&rt(e)}function uf(r){var e=r.get(1);return e===null||!rt(e)}var lf={startCheck:af,endCheck:uf};function ff(r){var e=r.current,t=r.get(-1);return(rt(e)||nt(e))&&!rt(t)}function hf(r){var e=r.get(1);switch(!0){case e===null:return!0;case(!rt(e)&&!nt(e)):var t=ef(e);if(!t)return!0;if(t){var n=!1;if(n=r.lookahead.some(function(s){return rt(s)||nt(s)}),!n)return!0}break;default:return!1}}var cf={startCheck:ff,endCheck:hf};function pf(r,e,t){e[t].setState(r.tag,r.substitution)}function df(r,e,t){e[t].setState(r.tag,r.substitution)}function gf(r,e,t){r.substitution.forEach(function(n,s){var i=e[t+s];i.setState(r.tag,n)})}function vf(r,e,t){var n=e[t];n.setState(r.tag,r.substitution.ligGlyph);for(var s=r.substitution.components.length,i=0;i<s;i++)n=e[t+i+1],n.setState("deleted",!0)}var _s={11:pf,12:df,63:gf,41:vf};function Cn(r,e,t){r instanceof dt&&_s[r.id]&&_s[r.id](r,e,t)}function mf(r){for(var e=[].concat(r.backtrack),t=e.length-1;t>=0;t--){var n=e[t],s=Vi(n),i=nt(n);if(!s&&!i)return!0;if(s)return!1}return!1}function xf(r){if(Vi(r.current))return!1;for(var e=0;e<r.lookahead.length;e++){var t=r.lookahead[e],n=nt(t);if(!n)return!0}return!1}function yf(r){var e=this,t="arab",n=this.featuresTags[t],s=this.tokenizer.getRangeTokens(r);if(s.length!==1){var i=new Ae(s.map(function(a){return a.getState("glyphIndex")}),0),o=new Ae(s.map(function(a){return a.char}),0);s.forEach(function(a,u){if(!nt(a.char)){i.setCurrentIndex(u),o.setCurrentIndex(u);var l=0;mf(o)&&(l|=1),xf(o)&&(l|=2);var f;switch(l){case 1:f="fina";break;case 2:f="init";break;case 3:f="medi";break}if(n.indexOf(f)!==-1){var c=e.query.lookupFeature({tag:f,script:t,contextParams:i});if(c instanceof Error)return console.info(c.message);c.forEach(function(h,p){h instanceof dt&&(Cn(h,s,p),i.context[p]=h.substitution)})}}})}}function Ys(r,e){var t=r.map(function(n){return n.activeState.value});return new Ae(t,e||0)}function bf(r){var e=this,t="arab",n=this.tokenizer.getRangeTokens(r),s=Ys(n);s.context.forEach(function(i,o){s.setCurrentIndex(o);var a=e.query.lookupFeature({tag:"rlig",script:t,contextParams:s});a.length&&(a.forEach(function(u){return Cn(u,n,o)}),s=Ys(n))})}function Sf(r){var e=r.current,t=r.get(-1);return t===null&&Pr(e)||!Pr(t)&&Pr(e)}function wf(r){var e=r.get(1);return e===null||!Pr(e)}var kf={startCheck:Sf,endCheck:wf};function js(r,e){var t=r.map(function(n){return n.activeState.value});return new Ae(t,e||0)}function Ef(r){var e=this,t="latn",n=this.tokenizer.getRangeTokens(r),s=js(n);s.context.forEach(function(i,o){s.setCurrentIndex(o);var a=e.query.lookupFeature({tag:"liga",script:t,contextParams:s});a.length&&(a.forEach(function(u){return Cn(u,n,o)}),s=js(n))})}function Re(r){this.baseDir=r||"ltr",this.tokenizer=new ie,this.featuresTags={}}Re.prototype.setText=function(r){this.text=r};Re.prototype.contextChecks={latinWordCheck:kf,arabicWordCheck:lf,arabicSentenceCheck:cf};function fn(r){var e=this.contextChecks[r+"Check"];return this.tokenizer.registerContextChecker(r,e.startCheck,e.endCheck)}function Pf(){return fn.call(this,"latinWord"),fn.call(this,"arabicWord"),fn.call(this,"arabicSentence"),this.tokenizer.tokenize(this.text)}function Lf(){var r=this,e=this.tokenizer.getContextRanges("arabicSentence");e.forEach(function(t){var n=r.tokenizer.getRangeTokens(t);r.tokenizer.replaceRange(t.startIndex,t.endOffset,n.reverse())})}Re.prototype.registerFeatures=function(r,e){var t=this,n=e.filter(function(s){return t.query.supports({script:r,tag:s})});this.featuresTags.hasOwnProperty(r)?this.featuresTags[r]=this.featuresTags[r].concat(n):this.featuresTags[r]=n};Re.prototype.applyFeatures=function(r,e){if(!r)throw new Error("No valid font was provided to apply features");this.query||(this.query=new Ee(r));for(var t=0;t<e.length;t++){var n=e[t];this.query.supports({script:n.script})&&this.registerFeatures(n.script,n.tags)}};Re.prototype.registerModifier=function(r,e,t){this.tokenizer.registerModifier(r,e,t)};function Mn(){if(this.tokenizer.registeredModifiers.indexOf("glyphIndex")===-1)throw new Error("glyphIndex modifier is required to apply arabic presentation features.")}function If(){var r=this,e="arab";if(this.featuresTags.hasOwnProperty(e)){Mn.call(this);var t=this.tokenizer.getContextRanges("arabicWord");t.forEach(function(n){yf.call(r,n)})}}function Tf(){var r=this,e="arab";if(this.featuresTags.hasOwnProperty(e)){var t=this.featuresTags[e];if(t.indexOf("rlig")!==-1){Mn.call(this);var n=this.tokenizer.getContextRanges("arabicWord");n.forEach(function(s){bf.call(r,s)})}}}function Cf(){var r=this,e="latn";if(this.featuresTags.hasOwnProperty(e)){var t=this.featuresTags[e];if(t.indexOf("liga")!==-1){Mn.call(this);var n=this.tokenizer.getContextRanges("latinWord");n.forEach(function(s){Ef.call(r,s)})}}}Re.prototype.checkContextReady=function(r){return!!this.tokenizer.getContext(r)};Re.prototype.applyFeaturesToContexts=function(){this.checkContextReady("arabicWord")&&(If.call(this),Tf.call(this)),this.checkContextReady("latinWord")&&Cf.call(this),this.checkContextReady("arabicSentence")&&Lf.call(this)};Re.prototype.processText=function(r){(!this.text||this.text!==r)&&(this.setText(r),Pf.call(this),this.applyFeaturesToContexts())};Re.prototype.getBidiText=function(r){return this.processText(r),this.tokenizer.getText()};Re.prototype.getTextGlyphs=function(r){this.processText(r);for(var e=[],t=0;t<this.tokenizer.tokens.length;t++){var n=this.tokenizer.tokens[t];if(!n.state.deleted){var s=n.activeState.value;e.push(Array.isArray(s)?s[0]:s)}}return e};function J(r){r=r||{},r.tables=r.tables||{},r.empty||(Ht(r.familyName,"When creating a new Font object, familyName is required."),Ht(r.styleName,"When creating a new Font object, styleName is required."),Ht(r.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Ht(r.ascender,"When creating a new Font object, ascender is required."),Ht(r.descender<=0,"When creating a new Font object, negative descender value is required."),this.names={fontFamily:{en:r.familyName||" "},fontSubfamily:{en:r.styleName||" "},fullName:{en:r.fullName||r.familyName+" "+r.styleName},postScriptName:{en:r.postScriptName||(r.familyName+r.styleName).replace(/\s/g,"")},designer:{en:r.designer||" "},designerURL:{en:r.designerURL||" "},manufacturer:{en:r.manufacturer||" "},manufacturerURL:{en:r.manufacturerURL||" "},license:{en:r.license||" "},licenseURL:{en:r.licenseURL||" "},version:{en:r.version||"Version 0.1"},description:{en:r.description||" "},copyright:{en:r.copyright||" "},trademark:{en:r.trademark||" "}},this.unitsPerEm=r.unitsPerEm||1e3,this.ascender=r.ascender,this.descender=r.descender,this.createdTimestamp=r.createdTimestamp,this.tables=Object.assign(r.tables,{os2:Object.assign({usWeightClass:r.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:r.widthClass||this.usWidthClasses.MEDIUM,fsSelection:r.fsSelection||this.fsSelectionValues.REGULAR},r.tables.os2)})),this.supported=!0,this.glyphs=new qe.GlyphSet(this,r.glyphs||[]),this.encoding=new ai(this),this.position=new Zt(this),this.substitution=new ke(this),this.tables=this.tables||{},this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){if(this._hinting)return this._hinting;if(this.outlinesFormat==="truetype")return this._hinting=new Bi(this)}})}J.prototype.hasChar=function(r){return this.encoding.charToGlyphIndex(r)!==null};J.prototype.charToGlyphIndex=function(r){return this.encoding.charToGlyphIndex(r)};J.prototype.charToGlyph=function(r){var e=this.charToGlyphIndex(r),t=this.glyphs.get(e);return t||(t=this.glyphs.get(0)),t};J.prototype.updateFeatures=function(r){return this.defaultRenderOptions.features.map(function(e){return e.script==="latn"?{script:"latn",tags:e.tags.filter(function(t){return r[t]})}:e})};J.prototype.stringToGlyphs=function(r,e){var t=this,n=new Re,s=function(c){return t.charToGlyphIndex(c.char)};n.registerModifier("glyphIndex",null,s);var i=e?this.updateFeatures(e.features):this.defaultRenderOptions.features;n.applyFeatures(this,i);for(var o=n.getTextGlyphs(r),a=o.length,u=new Array(a),l=this.glyphs.get(0),f=0;f<a;f+=1)u[f]=this.glyphs.get(o[f])||l;return u};J.prototype.nameToGlyphIndex=function(r){return this.glyphNames.nameToGlyphIndex(r)};J.prototype.nameToGlyph=function(r){var e=this.nameToGlyphIndex(r),t=this.glyphs.get(e);return t||(t=this.glyphs.get(0)),t};J.prototype.glyphIndexToName=function(r){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(r):""};J.prototype.getKerningValue=function(r,e){r=r.index||r,e=e.index||e;var t=this.position.defaultKerningTables;return t?this.position.getKerningValue(t,r,e):this.kerningPairs[r+","+e]||0};J.prototype.defaultRenderOptions={kerning:!0,features:[{script:"arab",tags:["init","medi","fina","rlig"]},{script:"latn",tags:["liga","rlig"]}]};J.prototype.forEachGlyph=function(r,e,t,n,s,i){e=e!==void 0?e:0,t=t!==void 0?t:0,n=n!==void 0?n:72,s=Object.assign({},this.defaultRenderOptions,s);var o=1/this.unitsPerEm*n,a=this.stringToGlyphs(r,s),u;if(s.kerning){var l=s.script||this.position.getDefaultScriptName();u=this.position.getKerningTables(l,s.language)}for(var f=0;f<a.length;f+=1){var c=a[f];if(i.call(this,c,e,t,n,s),c.advanceWidth&&(e+=c.advanceWidth*o),s.kerning&&f<a.length-1){var h=u?this.position.getKerningValue(u,c.index,a[f+1].index):this.getKerningValue(c,a[f+1]);e+=h*o}s.letterSpacing?e+=s.letterSpacing*n:s.tracking&&(e+=s.tracking/1e3*n)}return e};J.prototype.getPath=function(r,e,t,n,s){var i=new fe;return this.forEachGlyph(r,e,t,n,s,function(o,a,u,l){var f=o.getPath(a,u,l,s,this);i.extend(f)}),i};J.prototype.getPaths=function(r,e,t,n,s){var i=[];return this.forEachGlyph(r,e,t,n,s,function(o,a,u,l){var f=o.getPath(a,u,l,s,this);i.push(f)}),i};J.prototype.getAdvanceWidth=function(r,e,t){return this.forEachGlyph(r,0,0,e,t,function(){})};J.prototype.draw=function(r,e,t,n,s,i){this.getPath(e,t,n,s,i).draw(r)};J.prototype.drawPoints=function(r,e,t,n,s,i){this.forEachGlyph(e,t,n,s,i,function(o,a,u,l){o.drawPoints(r,a,u,l)})};J.prototype.drawMetrics=function(r,e,t,n,s,i){this.forEachGlyph(e,t,n,s,i,function(o,a,u,l){o.drawMetrics(r,a,u,l)})};J.prototype.getEnglishName=function(r){var e=this.names[r];if(e)return e.en};J.prototype.validate=function(){var r=this;function e(n,s){}function t(n){var s=r.getEnglishName(n);s&&s.trim().length>0}t("fontFamily"),t("weightName"),t("manufacturer"),t("copyright"),t("version"),this.unitsPerEm>0};J.prototype.toTables=function(){return gu.fontToTable(this)};J.prototype.toBuffer=function(){return console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."),this.toArrayBuffer()};J.prototype.toArrayBuffer=function(){for(var r=this.toTables(),e=r.encode(),t=new ArrayBuffer(e.length),n=new Uint8Array(t),s=0;s<e.length;s++)n[s]=e[s];return t};J.prototype.download=function(r){var e=this.getEnglishName("fontFamily"),t=this.getEnglishName("fontSubfamily");r=r||e.replace(/\s/g,"")+"-"+t+".otf";var n=this.toArrayBuffer();if(mu())if(window.URL=window.URL||window.webkitURL,window.URL){var s=new DataView(n),i=new Blob([s],{type:"font/opentype"}),o=document.createElement("a");o.href=window.URL.createObjectURL(i),o.download=r;var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!1),o.dispatchEvent(a)}else console.warn("Font file could not be downloaded. Try using a different browser.");else{var u=cs(),l=xu(n);u.writeFileSync(r,l)}};J.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512};J.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9};J.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function Xi(r,e){var t=JSON.stringify(r),n=256;for(var s in e){var i=parseInt(s);if(!(!i||i<256)){if(JSON.stringify(e[s])===t)return i;n<=i&&(n=i+1)}}return e[n]=r,n}function Mf(r,e,t){var n=Xi(e.name,t);return[{name:"tag_"+r,type:"TAG",value:e.tag},{name:"minValue_"+r,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+r,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+r,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+r,type:"USHORT",value:0},{name:"nameID_"+r,type:"USHORT",value:n}]}function Of(r,e,t){var n={},s=new C.Parser(r,e);return n.tag=s.parseTag(),n.minValue=s.parseFixed(),n.defaultValue=s.parseFixed(),n.maxValue=s.parseFixed(),s.skip("uShort",1),n.name=t[s.parseUShort()]||{},n}function Ff(r,e,t,n){for(var s=Xi(e.name,n),i=[{name:"nameID_"+r,type:"USHORT",value:s},{name:"flags_"+r,type:"USHORT",value:0}],o=0;o<t.length;++o){var a=t[o].tag;i.push({name:"axis_"+r+" "+a,type:"FIXED",value:e.coordinates[a]<<16})}return i}function Af(r,e,t,n){var s={},i=new C.Parser(r,e);s.name=n[i.parseUShort()]||{},i.skip("uShort",1),s.coordinates={};for(var o=0;o<t.length;++o)s.coordinates[t[o].tag]=i.parseFixed();return s}function Df(r,e){var t=new I.Table("fvar",[{name:"version",type:"ULONG",value:65536},{name:"offsetToData",type:"USHORT",value:0},{name:"countSizePairs",type:"USHORT",value:2},{name:"axisCount",type:"USHORT",value:r.axes.length},{name:"axisSize",type:"USHORT",value:20},{name:"instanceCount",type:"USHORT",value:r.instances.length},{name:"instanceSize",type:"USHORT",value:4+r.axes.length*4}]);t.offsetToData=t.sizeOf();for(var n=0;n<r.axes.length;n++)t.fields=t.fields.concat(Mf(n,r.axes[n],e));for(var s=0;s<r.instances.length;s++)t.fields=t.fields.concat(Ff(s,r.instances[s],r.axes,e));return t}function Uf(r,e,t){var n=new C.Parser(r,e),s=n.parseULong();R.argument(s===65536,"Unsupported fvar table version.");var i=n.parseOffset16();n.skip("uShort",1);for(var o=n.parseUShort(),a=n.parseUShort(),u=n.parseUShort(),l=n.parseUShort(),f=[],c=0;c<o;c++)f.push(Of(r,e+i+c*a,t));for(var h=[],p=e+i+o*a,g=0;g<u;g++)h.push(Af(r,p+g*l,f,t));return{axes:f,instances:h}}var Rf={make:Df,parse:Uf},Nf=function(){return{coverage:this.parsePointer(v.coverage),attachPoints:this.parseList(v.pointer(v.uShortList))}},Bf=function(){var r=this.parseUShort();if(R.argument(r===1||r===2||r===3,"Unsupported CaretValue table version."),r===1)return{coordinate:this.parseShort()};if(r===2)return{pointindex:this.parseShort()};if(r===3)return{coordinate:this.parseShort()}},Gf=function(){return this.parseList(v.pointer(Bf))},Hf=function(){return{coverage:this.parsePointer(v.coverage),ligGlyphs:this.parseList(v.pointer(Gf))}},zf=function(){return this.parseUShort(),this.parseList(v.pointer(v.coverage))};function Vf(r,e){e=e||0;var t=new v(r,e),n=t.parseVersion(1);R.argument(n===1||n===1.2||n===1.3,"Unsupported GDEF table version.");var s={version:n,classDef:t.parsePointer(v.classDef),attachList:t.parsePointer(Nf),ligCaretList:t.parsePointer(Hf),markAttachClassDef:t.parsePointer(v.classDef)};return n>=1.2&&(s.markGlyphSets=t.parsePointer(zf)),s}var Xf={parse:Vf},De=new Array(10);De[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(v.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(v.coverage),values:this.parseValueRecordList()};R.assert(!1,"0x"+e.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")};De[2]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();R.assert(t===1||t===2,"0x"+e.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");var n=this.parsePointer(v.coverage),s=this.parseUShort(),i=this.parseUShort();if(t===1)return{posFormat:t,coverage:n,valueFormat1:s,valueFormat2:i,pairSets:this.parseList(v.pointer(v.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(s),value2:this.parseValueRecord(i)}})))};if(t===2){var o=this.parsePointer(v.classDef),a=this.parsePointer(v.classDef),u=this.parseUShort(),l=this.parseUShort();return{posFormat:t,coverage:n,valueFormat1:s,valueFormat2:i,classDef1:o,classDef2:a,class1Count:u,class2Count:l,classRecords:this.parseList(u,v.list(l,function(){return{value1:this.parseValueRecord(s),value2:this.parseValueRecord(i)}}))}}};De[3]=function(){return{error:"GPOS Lookup 3 not supported"}};De[4]=function(){return{error:"GPOS Lookup 4 not supported"}};De[5]=function(){return{error:"GPOS Lookup 5 not supported"}};De[6]=function(){return{error:"GPOS Lookup 6 not supported"}};De[7]=function(){return{error:"GPOS Lookup 7 not supported"}};De[8]=function(){return{error:"GPOS Lookup 8 not supported"}};De[9]=function(){return{error:"GPOS Lookup 9 not supported"}};function qf(r,e){e=e||0;var t=new v(r,e),n=t.parseVersion(1);return R.argument(n===1||n===1.1,"Unsupported GPOS table version "+n),n===1?{version:n,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(De)}:{version:n,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(De),variations:t.parseFeatureVariationsList()}}var Wf=new Array(10);function $f(r){return new I.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new I.ScriptList(r.scripts)},{name:"features",type:"TABLE",value:new I.FeatureList(r.features)},{name:"lookups",type:"TABLE",value:new I.LookupList(r.lookups,Wf)}])}var Zf={parse:qf,make:$f};function _f(r){var e={};r.skip("uShort");var t=r.parseUShort();R.argument(t===0,"Unsupported kern sub-table version."),r.skip("uShort",2);var n=r.parseUShort();r.skip("uShort",3);for(var s=0;s<n;s+=1){var i=r.parseUShort(),o=r.parseUShort(),a=r.parseShort();e[i+","+o]=a}return e}function Yf(r){var e={};r.skip("uShort");var t=r.parseULong();t>1&&console.warn("Only the first kern subtable is supported."),r.skip("uLong");var n=r.parseUShort(),s=n&255;if(r.skip("uShort"),s===0){var i=r.parseUShort();r.skip("uShort",3);for(var o=0;o<i;o+=1){var a=r.parseUShort(),u=r.parseUShort(),l=r.parseShort();e[a+","+u]=l}}return e}function jf(r,e){var t=new C.Parser(r,e),n=t.parseUShort();if(n===0)return _f(t);if(n===1)return Yf(t);throw new Error("Unsupported kern table version ("+n+").")}var Kf={parse:jf};function Jf(r,e,t,n){for(var s=new C.Parser(r,e),i=n?s.parseUShort:s.parseULong,o=[],a=0;a<t+1;a+=1){var u=i.call(s);n&&(u*=2),o.push(u)}return o}var Qf={parse:Jf};function Ks(r,e){for(var t=[],n=12,s=0;s<e;s+=1){var i=C.getTag(r,n),o=C.getULong(r,n+4),a=C.getULong(r,n+8),u=C.getULong(r,n+12);t.push({tag:i,checksum:o,offset:a,length:u,compression:!1}),n+=16}return t}function eh(r,e){for(var t=[],n=44,s=0;s<e;s+=1){var i=C.getTag(r,n),o=C.getULong(r,n+4),a=C.getULong(r,n+8),u=C.getULong(r,n+12),l=void 0;a<u?l="WOFF":l=!1,t.push({tag:i,offset:o,compression:l,compressedLength:a,length:u}),n+=20}return t}function ae(r,e){if(e.compression==="WOFF"){var t=new Uint8Array(r.buffer,e.offset+2,e.compressedLength-2),n=new Uint8Array(e.length);if($o(t,n),n.byteLength!==e.length)throw new Error("Decompression error: "+e.tag+" decompressed length doesn't match recorded length");var s=new DataView(n.buffer,0);return{data:s,offset:0}}else return{data:r,offset:e.offset}}function qi(r,e){e=e??{};var t,n,s=new J({empty:!0}),i=new DataView(r,0),o,a=[],u=C.getTag(i,0);if(u==="\0\0\0"||u==="true"||u==="typ1")s.outlinesFormat="truetype",o=C.getUShort(i,4),a=Ks(i,o);else if(u==="OTTO")s.outlinesFormat="cff",o=C.getUShort(i,4),a=Ks(i,o);else if(u==="wOFF"){var l=C.getTag(i,4);if(l==="\0\0\0")s.outlinesFormat="truetype";else if(l==="OTTO")s.outlinesFormat="cff";else throw new Error("Unsupported OpenType flavor "+u);o=C.getUShort(i,12),a=eh(i,o)}else throw new Error("Unsupported OpenType signature "+u);for(var f,c,h,p,g,m,x,y,S,w,F,P,U=0;U<o;U+=1){var O=a[U],L=void 0;switch(O.tag){case"cmap":L=ae(i,O),s.tables.cmap=oi.parse(L.data,L.offset),s.encoding=new ui(s.tables.cmap);break;case"cvt ":L=ae(i,O),P=new C.Parser(L.data,L.offset),s.tables.cvt=P.parseShortList(O.length/2);break;case"fvar":c=O;break;case"fpgm":L=ae(i,O),P=new C.Parser(L.data,L.offset),s.tables.fpgm=P.parseByteList(O.length);break;case"head":L=ae(i,O),s.tables.head=xi.parse(L.data,L.offset),s.unitsPerEm=s.tables.head.unitsPerEm,t=s.tables.head.indexToLocFormat;break;case"hhea":L=ae(i,O),s.tables.hhea=yi.parse(L.data,L.offset),s.ascender=s.tables.hhea.ascender,s.descender=s.tables.hhea.descender,s.numberOfHMetrics=s.tables.hhea.numberOfHMetrics;break;case"hmtx":x=O;break;case"ltag":L=ae(i,O),n=Si.parse(L.data,L.offset);break;case"maxp":L=ae(i,O),s.tables.maxp=wi.parse(L.data,L.offset),s.numGlyphs=s.tables.maxp.numGlyphs;break;case"name":w=O;break;case"OS/2":L=ae(i,O),s.tables.os2=xn.parse(L.data,L.offset);break;case"post":L=ae(i,O),s.tables.post=Ti.parse(L.data,L.offset),s.glyphNames=new En(s.tables.post);break;case"prep":L=ae(i,O),P=new C.Parser(L.data,L.offset),s.tables.prep=P.parseByteList(O.length);break;case"glyf":h=O;break;case"loca":S=O;break;case"CFF ":f=O;break;case"kern":y=O;break;case"GDEF":p=O;break;case"GPOS":g=O;break;case"GSUB":m=O;break;case"meta":F=O;break}}var W=ae(i,w);if(s.tables.name=Ii.parse(W.data,W.offset,n),s.names=s.tables.name,h&&S){var _=t===0,Y=ae(i,S),he=Qf.parse(Y.data,Y.offset,s.numGlyphs,_),ce=ae(i,h);s.glyphs=Ui.parse(ce.data,ce.offset,he,s,e)}else if(f){var Q=ae(i,f);mi.parse(Q.data,Q.offset,s,e)}else throw new Error("Font doesn't contain TrueType or CFF outlines.");var X=ae(i,x);if(bi.parse(s,X.data,X.offset,s.numberOfHMetrics,s.numGlyphs,s.glyphs,e),pa(s,e),y){var ee=ae(i,y);s.kerningPairs=Kf.parse(ee.data,ee.offset)}else s.kerningPairs={};if(p){var k=ae(i,p);s.tables.gdef=Xf.parse(k.data,k.offset)}if(g){var M=ae(i,g);s.tables.gpos=Zf.parse(M.data,M.offset),s.position.init()}if(m){var A=ae(i,m);s.tables.gsub=Ci.parse(A.data,A.offset)}if(c){var G=ae(i,c);s.tables.fvar=Rf.parse(G.data,G.offset,s.names)}if(F){var D=ae(i,F);s.tables.meta=Mi.parse(D.data,D.offset),s.metas=s.tables.meta}return s}var Dr=class{constructor(e,t){this.sources=e;this.fallback=t;this.parsed=new Map;this.missing=new Set}names(){return Object.keys(this.sources)}get(e){let t=e||this.fallback||Object.keys(this.sources)[0];if(!t)throw this.missing.add(""),new Error("text() needs a font. Pass fonts to render(), or --font on the command line.");let n=this.parsed.get(t);if(n)return n;let s=this.sources[t];if(!s)throw this.missing.add(t),new Error(`Font "${t}" is not available.${this.names().length?` Available fonts: ${this.names().join(", ")}`:""}`);let i=s instanceof Uint8Array?s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength):s,o=qi(i);return this.parsed.set(t,o),o}};function Wi(r,e,t){let n={kerning:!0};if(t.spacing===1)return{cmds:r.getPath(e,0,0,t.size,n).commands,advance:r.getAdvanceWidth(e,t.size,n)};let s=[],i=0,o=[...e];return o.forEach((a,u)=>{s.push(...r.getPath(a,i,0,t.size,n).commands),i+=r.getAdvanceWidth(a,t.size,n)*(u<o.length-1?t.spacing:1)}),{cmds:s,advance:i}}function On(r,e,t){if(!e)return[];let n=r.get(t.font),{cmds:s,advance:i}=Wi(n,e,t),o=s.map(h=>h.type==="Z"?h:h.type==="C"?{...h,y1:-h.y1,y2:-h.y2,y:-h.y}:h.type==="Q"?{...h,y1:-h.y1,y:-h.y}:{...h,y:-h.y}),a=xr(o,Math.max(.005,t.size/2e3)),u=de([...a.closed,...a.open.filter(h=>h.length>=3)]),l=gr(u);if(!l)return[];let f=t.halign==="center"?-i/2:t.halign==="right"?-i:0,c=t.valign==="top"?-l[3]:t.valign==="center"?-(l[1]+l[3])/2:t.valign==="bottom"?-l[1]:0;return u.map(h=>h.map(([p,g])=>[p+f,g+c]))}function $i(r,e,t){let n=r.get(t.font),{advance:s}=Wi(n,e,t),i=On(r,e,{...t,halign:"left",valign:"baseline"}),o=gr(i)??[0,0,0,0];return{advance:s,bounds:[[o[0],o[1]],[o[2],o[3]]],ascent:n.ascender/n.unitsPerEm*t.size,descent:n.descender/n.unitsPerEm*t.size}}var _i=[{name:"engrave",mode:"fill",color:"#000000"},{name:"score",mode:"line",color:"#0000ff"},{name:"cut",mode:"cut",color:"#ff0000"},{name:"guide",mode:"guide",color:"#00a0ff"}],Yi={maxParts:1e4,maxSegments:1e4,maxListLength:1e6,maxListItems:3e6,maxTextLength:2e3,maxPoints:2e6,maxOutputPoints:1e6,maxSheets:200},th=100,Kt=4,Zi=8,rh=r=>{let e=th,t=n=>{for(let s of n.values()){for(let i of s.regions)e+=i.length;for(let i of s.lines)e+=i.length}};t(r.layers);for(let n of r.parts)t(n.layers);return e},ve=class{constructor(e,t){this.parent=e;this.caller=t;this.vars=new Map;this.fns=new Map;this.mods=new Map}get(e){let t=this,n=e.startsWith("$");for(;t;){if(t.vars.has(e))return{found:!0,value:t.vars.get(e)};t=n?t.caller??t.parent:t.parent}return{found:!1}}fn(e){for(let t=this;t;t=t.parent){let n=t.fns.get(e);if(n)return n}}mod(e){for(let t=this;t;t=t.parent){let n=t.mods.get(e);if(n)return n}}childCtx(){for(let e=this;e;e=e.parent)if(e.children)return e.children}},nh=ls,Ur=class{constructor(e={}){this.opts=e;this.steps=0;this.depth=0;this.pointCount=0;this.itemCount=0;this.copies=0;this.echoes=[];this.warnings=[];this.layers=new Map(_i.map(e=>[e.name,e]));this.loaded=new Map;this.maxSteps=e.maxSteps??5e6,this.limits={...Yi,...e.limits},this.builtins=this.makeBuiltins()}run(e){let t=new ve,n={$fn:0,$fa:2,$fs:.2,$thickness:3,$kerf:0,$material:"material",$sheet:[600,400],$gap:3,$layout:"pack",PI:Math.PI};for(let[o,a]of Object.entries(n))t.vars.set(o,a);let s=new ve(t);return{shape:this.block(e.body,s,!0),globals:s,layers:this.layers,echoes:this.echoes,warnings:this.warnings}}tick(e){if(++this.steps>this.maxSteps)throw new N(`Stopped after ${this.maxSteps} steps. Is there an endless loop?`,e)}load(e,t){let n=this.loaded.get(e);if(n)return n;let s=nh[e]??this.opts.resolve?.(e);if(s===void 0)throw new N(`Library <${e}> not found`,t);this.loaded.set(e,{body:[]});let{program:i}=ht(s);return this.loaded.set(e,i),i}hoist(e,t){for(let n of e)if(n.kind==="module")t.mods.set(n.name,{params:n.params,body:n.body,env:t});else if(n.kind==="function")t.fns.set(n.name,{params:n.params,body:n.body,env:t});else if(n.kind==="use"&&!n.include){let s=this.included(this.load(n.path,n.pos).body,new Set([n.path])),i=new ve(t);this.hoist(s,i);for(let o of s)o.kind==="assign"&&this.assign(o.name,this.expr(o.value,i),i);for(let[o,a]of i.mods)t.mods.set(o,a);for(let[o,a]of i.fns)t.fns.set(o,a)}}included(e,t){let n=[];for(let s of e)if(s.kind!=="use"||!s.include)n.push(s);else if(!t.has(s.path)){t.add(s.path);for(let i of this.included(this.load(s.path,s.pos).body,t))n.push(i)}return n}assign(e,t,n){n.vars.set(e,t)}block(e,t,n=!1){this.hoist(e,t);let s=[];for(let i of e){let o=this.stmt(i,t,n);o&&!Jn(o)&&s.push(o)}return s.length===1?s[0]:Nt(s)}stmt(e,t,n=!1){switch(this.tick(e.pos),e.kind){case"assign":{let s=this.opts.overrides,i=n&&s&&Object.prototype.hasOwnProperty.call(s,e.name)?s[e.name]:this.expr(e.value,t);return this.assign(e.name,i,t),null}case"module":case"function":return null;case"use":{if(!e.include)return null;let s=this.load(e.path,e.pos);return this.block(s.body,t)}case"block":return this.block(e.body,new ve(t));case"if":return Se(this.expr(e.cond,t))?this.block(e.then,new ve(t)):this.block(e.else,new ve(t));case"let":{let s=new ve(t);return this.bindSeq(e.assigns,s),this.block(e.body,s)}case"for":{let s=[];return this.loop(e.assigns,t,i=>s.push(this.block(e.body,i))),Nt(s)}case"call":if(e.modifier==="*")return null;{let s=this.callModule(e,t);return e.modifier==="#"||e.modifier==="%"?dr(s,"guide"):s}}}bindSeq(e,t){for(let n of e)this.assign(n.name,this.expr(n.value,t),t)}iterable(e,t){if(Be(e))try{return Qt(e,1e6)}catch(n){throw new N(n.message,t)}return Array.isArray(e)?e:typeof e=="string"?[...e]:e===void 0?[]:[e]}loop(e,t,n,s=0,i=new ve(t)){if(s===e.length)return n(i);let o=e[s];for(let a of this.iterable(this.expr(o.value,i),o.pos)){this.tick(o.pos);let u=new ve(i);u.vars.set(o.name,a),this.loop(e,t,n,s+1,u)}}evalArgs(e,t,n){let s=[],i=new Map;for(let o of e){let a=this.expr(o.value,t);o.name===null?s.push(a):i.set(o.name,a)}return{pos:s,named:i,at:n}}bindParams(e,t,n,s,i){let o=new Set(e.map(a=>a.name));e.forEach((a,u)=>{let l;t.named.has(a.name)?l=t.named.get(a.name):u<t.pos.length?l=t.pos[u]:l=a.default?this.expr(a.default,n):void 0,n.vars.set(a.name,l)});for(let a of t.named.keys())if(a.startsWith("$"))n.vars.set(a,t.named.get(a));else if(!o.has(a)){let u=`${i}: unknown argument "${a}" (line ${t.at.line})`;this.warnings.includes(u)||this.warnings.push(u)}}callModule(e,t){let n=this.evalArgs(e.args,t,e.pos),s=t.mod(e.name);if(s){if(++this.depth>1e3)throw new N(`Recursion too deep in module ${e.name}()`,e.pos);try{let c=new ve(s.env,t);return this.bindParams(s.params,n,c,s.env,`${e.name}()`),c.children={stmts:e.children,env:t},c.vars.set("$children",this.childStmts(e.children).length),this.block(s.body,c)}finally{this.depth--}}let i=this.builtins[e.name];if(!i){let c=e.name==="color"?" Use layer(), cut(), score() or engrave() instead.":e.name==="square"?" Use rect().":"";throw new N(`Unknown module ${e.name}().${c}`,e.pos)}let o=new ve(t,t);for(let[c,h]of n.named)c.startsWith("$")&&o.vars.set(c,h);let a=this.childStmts(e.children),u=()=>new ve(t,o),l={args:n,env:o,children:()=>e.children.length?this.block(e.children,u()):ft(),childList:()=>{let c=u();this.hoist(e.children,c);let h=[];for(let p of e.children){let g=this.stmt(p,c);a.includes(p)&&h.push(g??ft())}return h}},f;try{f=i(l)}catch(c){throw c instanceof N?c:new N(`${e.name}(): ${c.message}`,e.pos)}if(this.pointCount+=rh(f),this.pointCount>this.limits.maxPoints)throw new N(`The shapes have more than ${this.limits.maxPoints} points, the limit. Use fewer or simpler shapes, or a lower $fn.`,e.pos);return f}childStmts(e){return e.filter(t=>t.kind!=="assign"&&t.kind!=="module"&&t.kind!=="function"&&t.kind!=="use")}callFunction(e,t,n,s){if(++this.depth>2e3)throw new N(`Recursion too deep in ${s}()`,t.at);try{this.tick(t.at);let i=_e(e)?e.scope:e.env,o=new ve(i,n);return this.bindParams(e.params,t,o,i,`${s}()`),this.expr(e.body,o)}finally{this.depth--}}expr(e,t){switch(e.kind){case"num":case"str":case"bool":return e.value;case"undef":return;case"var":{let n=t.get(e.name);if(n.found)return n.value;let s=t.fn(e.name);if(s)return{type:"function",params:s.params,body:s.body,scope:s.env,name:e.name};if(e.name.startsWith("$"))return;throw new N(`Unknown variable "${e.name}"`,e.pos)}case"list":{let n=[];for(let s of e.items)this.listItem(s,t,n,e.pos);return this.charge(Kt,e.pos),n}case"range":{let n=this.expr(e.start,t),s=this.expr(e.end,t),i=e.step?this.expr(e.step,t):1;if(typeof n!="number"||typeof s!="number"||typeof i!="number")throw new N("Range values must be numbers",e.pos);return{type:"range",start:n,step:i,end:s}}case"unary":{let n=this.expr(e.arg,t);return e.op==="!"?!Se(n):e.op==="+"?n:this.arith("*",-1,n,e.pos)}case"binary":{if(e.op==="&&")return Se(this.expr(e.left,t))&&Se(this.expr(e.right,t));if(e.op==="||")return Se(this.expr(e.left,t))||Se(this.expr(e.right,t));let n=this.expr(e.left,t),s=this.expr(e.right,t);if(e.op==="==")return ot(n,s);if(e.op==="!=")return!ot(n,s);if(e.op==="<"||e.op==="<="||e.op===">"||e.op===">="){if(!(typeof n=="number"&&typeof s=="number"||typeof n=="string"&&typeof s=="string"))throw new N(`Can't compare ${Pe(n)} ${e.op} ${Pe(s)}`,e.pos);return e.op==="<"?n<s:e.op==="<="?n<=s:e.op===">"?n>s:n>=s}return this.arith(e.op,n,s,e.pos)}case"ternary":return Se(this.expr(e.cond,t))?this.expr(e.then,t):this.expr(e.else,t);case"index":{let n=this.expr(e.target,t),s=this.expr(e.index,t);if(typeof s!="number")throw new N(`List index must be a number, got ${Pe(s)}`,e.pos);return Array.isArray(n)?n[Math.floor(s)]:typeof n=="string"?[...n][Math.floor(s)]:Be(n)?[n.start,n.step,n.end][Math.floor(s)]:void 0}case"member":{let n=this.expr(e.target,t),s={x:0,y:1,z:2}[e.name];return Array.isArray(n)&&s!==void 0?n[s]:Be(n)&&(e.name==="begin"||e.name==="step"||e.name==="end")?e.name==="begin"?n.start:e.name==="step"?n.step:n.end:void 0}case"call":return this.call(e,t);case"lambda":return{type:"function",params:e.params,body:e.body,scope:t};case"let":{let n=new ve(t);return this.bindSeq(e.assigns,n),this.expr(e.body,n)}}}listItem(e,t,n,s){switch(e.kind){case"item":{let i=this.expr(e.expr,t);this.grow(n,1,s),n.push(i);return}case"each":{let i=this.iterable(this.expr(e.expr,t),s);this.grow(n,i.length,s);for(let o of i)n.push(o);return}case"for":this.loop(e.assigns,t,i=>this.listItem(e.body,i,n,s));return;case"if":Se(this.expr(e.cond,t))?this.listItem(e.then,t,n,s):e.else&&this.listItem(e.else,t,n,s);return;case"let":{let i=new ve(t);this.bindSeq(e.assigns,i),this.listItem(e.body,i,n,s)}}}grow(e,t,n){if(e.length+t>this.limits.maxListLength)throw new N(`a list of ${e.length+t} items is more than the limit of ${this.limits.maxListLength}`,n);this.charge(t,n)}charge(e,t){if(this.itemCount+=e,!(this.itemCount<=this.limits.maxListItems))throw new N(`The lists and strings hold more than ${this.limits.maxListItems} items in all, the limit. Is a loop building more than it needs?`,t)}call(e,t){if(e.callee.kind==="var"){let s=e.callee.name,i=t.get(s);if(!i.found){let o=t.fn(s);if(o)return this.callFunction(o,this.evalArgs(e.args,t,e.pos),t,s);let a=this.specialFunction(s,e,t);if(a.handled)return a.value;let u=Gn[s];if(u){let l=this.evalArgs(e.args,t,e.pos),f;try{f=u(l.pos,l.named)}catch(c){throw new N(c instanceof RangeError?`${s}(): the result is too large`:c.message,e.pos)}return this.checkValue(f,e.pos,s),f}throw new N(`Unknown function ${s}()`,e.pos)}if(!_e(i.value))throw new N(`"${s}" is a ${Pe(i.value)}, not a function`,e.pos);return this.callFunction(i.value,this.evalArgs(e.args,t,e.pos),t,s)}let n=this.expr(e.callee,t);if(!_e(n))throw new N(`Can't call a ${Pe(n)}`,e.pos);return this.callFunction(n,this.evalArgs(e.args,t,e.pos),t,"function")}specialFunction(e,t,n){if(e==="echo"){let s=this.evalArgs(t.args,n,t.pos);return this.echo(this.echoText(s),t.pos),{handled:!0,value:void 0}}if(e==="assert"){let s=this.evalArgs(t.args,n,t.pos);if(!Se(s.pos[0]))throw new N(`Assertion failed${s.pos[1]!==void 0?": "+(typeof s.pos[1]=="string"?s.pos[1]:Le(s.pos[1])):""}`,t.pos);return{handled:!0,value:!0}}if(e==="text_width"||e==="text_metrics"){let s=this.evalArgs(t.args,n,t.pos),i=this.measure(s,n);return e==="text_width"?{handled:!0,value:i.advance}:{handled:!0,value:[i.advance,i.bounds,i.ascent,i.descent]}}if(e==="finger_count"){let s=this.evalArgs(t.args,n,t.pos),i=this.num(this.arg(s,"length",0),"finger_count","length");return{handled:!0,value:mr(i,this.fingerWidth(s,n,1))}}return{handled:!1}}echo(e,t){this.charge(Math.ceil(e.length/Zi),t),this.echoes.push(e)}echoText(e){let t=e.pos.map(n=>typeof n=="string"?n:Le(n));for(let[n,s]of e.named)t.push(`${n} = ${Le(s)}`);return t.join(", ")}arith(e,t,n,s){if(typeof t=="number"&&typeof n=="number")switch(e){case"+":return t+n;case"-":return t-n;case"*":return t*n;case"/":return t/n;case"%":return t%n;case"^":return Math.pow(t,n)}if(e==="+"&&typeof t=="string"&&typeof n=="string")return this.checkSize(t.length+n.length,!0,s),t+n;if(Array.isArray(t)&&Array.isArray(n)){if(e==="+"||e==="-"){if(t.length!==n.length)throw new N(`Can't ${e==="+"?"add":"subtract"} lists of length ${t.length} and ${n.length}`,s);return this.charge(t.length+Kt,s),t.map((o,a)=>this.arith(e,o,n[a],s))}if(e==="*"){if(Array.isArray(t[0]))return t.map(o=>this.arith("*",o,n,s));if(Array.isArray(n[0])){let o=n[0].length;return this.checkSize(o,!1,s),Array.from({length:o},(a,u)=>t.reduce((l,f,c)=>l+this.arith("*",f,n[c][u],s),0))}if(t.length!==n.length)throw new N(`Can't multiply lists of length ${t.length} and ${n.length}`,s);return t.reduce((o,a,u)=>o+this.arith("*",a,n[u],s),0)}}if(Array.isArray(t)&&typeof n=="number"&&(e==="*"||e==="/"))return this.charge(t.length+Kt,s),t.map(o=>this.arith(e,o,n,s));if(typeof t=="number"&&Array.isArray(n)&&e==="*")return this.charge(n.length+Kt,s),n.map(o=>this.arith(e,t,o,s));let i={"+":"add","-":"subtract","*":"multiply","/":"divide","%":"take remainder of","^":"raise"};throw new N(`Can't ${i[e]??e} ${Pe(t)} and ${Pe(n)}`,s)}arg(e,t,n,s){return e.named.has(t)?e.named.get(t):n>=0&&n<e.pos.length?e.pos[n]:s}num(e,t,n){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${n} must be a finite number, got ${Le(e)}`);return e}vec2(e,t,n=!0){let s=i=>typeof i=="number"&&Number.isFinite(i);if(s(e)&&n)return[e,e];if(Array.isArray(e)&&s(e[0])&&(e[1]===void 0||s(e[1])))return[e[0],e[1]??0];throw new Error(`${t} must be a number or [x, y], got ${Le(e)}`)}points(e,t){if(!Array.isArray(e))throw new Error(`${t} must be a list of [x, y] points`);return e.map((n,s)=>{if(!Array.isArray(n)||!Number.isFinite(n[0])||!Number.isFinite(n[1]))throw new Error(`${t}[${s}] must be an [x, y] point, got ${Le(n)}`);return[n[0],n[1]]})}dyn(e,t){return e.get(t).value}spend(e){if(this.pointCount+=e,!(this.pointCount<=this.limits.maxPoints))throw new Error(`the shapes need more than ${this.limits.maxPoints} points, the limit. Use fewer or simpler shapes.`)}checkValue(e,t,n){(Array.isArray(e)||typeof e=="string")&&this.checkSize(e.length,typeof e=="string",t,n)}checkSize(e,t,n,s){if(e>this.limits.maxListLength)throw new N(`${s?`${s}(): `:""}${t?`a string of ${e} characters`:`a list of ${e} items`} is more than the limit of ${this.limits.maxListLength}`,n);this.charge(t?Math.ceil(e/Zi):e+Kt,n)}segs(e){let t=Number(this.dyn(e,"$fn"))||0,n=Number(this.dyn(e,"$fa"))||2,s=Number(this.dyn(e,"$fs"))||.2,i=this.limits.maxSegments;return o=>{let a=ns(o,t,n,s);if(!(a<=i))throw new Error(`a circle with ${a} segments is more than the limit of ${i}. Lower $fn, or raise $fa or $fs.`);return a}}thickness(e){let t=this.dyn(e,"$thickness");if(typeof t!="number"||t<=0)throw new Error("$thickness must be a positive number");return t}fingerWidth(e,t,n){let s=this.arg(e,"finger",n);return typeof s=="number"&&s>0?s:Math.max(3*this.thickness(t),6)}measure(e,t){if(!this.opts.fonts)throw new N("text needs a font. Pass fonts to render(), or --font on the command line.",e.at);let n=String(this.arg(e,"text",0,""));try{return $i(this.opts.fonts,n,this.textOpts(e,t))}catch(s){throw s instanceof N?s:new N(s.message,e.at)}}textOpts(e,t){return{size:this.num(this.arg(e,"size",1,10),"text","size"),font:String(this.arg(e,"font",2,this.dyn(t,"$font")??"")),halign:String(this.arg(e,"halign",-1,"left")),valign:String(this.arg(e,"valign",-1,"baseline")),spacing:Number(this.arg(e,"spacing",-1,1))}}edges(e){let t=n=>{if(n==="out"||n==="in"||n==="flat")return n;throw new Error(`edges must be "out", "in" or "flat", got ${Le(n)}`)};if(typeof e=="string")return[t(e),t(e),t(e),t(e)];if(Array.isArray(e)&&e.length===4)return e.map(t);throw new Error("edges must be one value or a list of 4: [bottom, right, top, left]")}makeBuiltins(){let e=(i,o)=>pr(i.children(),o),t=i=>o=>dr(o.children(),i);return{rect:i=>{let[o,a]=this.vec2(this.arg(i.args,"size",0,1),"size"),u=Number(this.arg(i.args,"r",-1,0))||0,l=Se(this.arg(i.args,"center",1,!1)),f=ss(o,a,u,this.segs(i.env));return Te(de([l?f.map(([c,h])=>[c-o/2,h-a/2]):f]))},square:i=>this.builtins.rect(i),circle:i=>{let o=this.arg(i.args,"d",-1),a=o!==void 0?this.num(o,"circle","d")/2:this.num(this.arg(i.args,"r",0,1),"circle","r");return Te([vr(a,a,this.segs(i.env)(a))])},ellipse:i=>{let[o,a]=this.vec2(this.arg(i.args,"r",0,1),"r");return Te([vr(o,a,this.segs(i.env)(Math.max(o,a)))])},regular_polygon:i=>{let o=Math.max(3,Math.floor(this.num(this.arg(i.args,"n",0,6),"regular_polygon","n"))),a=this.num(this.arg(i.args,"r",1,10),"regular_polygon","r");if(!(o<=this.limits.maxSegments))throw new Error(`${o} corners is more than the limit of ${this.limits.maxSegments}`);return Te([vr(a,a,o)])},star:i=>{let o=Math.max(2,Math.floor(this.num(this.arg(i.args,"n",0,5),"star","n"))),a=this.num(this.arg(i.args,"r",1,10),"star","r"),u=this.num(this.arg(i.args,"inner",2,a*.45),"star","inner");if(!(o*2<=this.limits.maxSegments))throw new Error(`${o} points is more than the limit of ${this.limits.maxSegments/2}`);let l=[];for(let f=0;f<o*2;f++){let c=Math.PI/2+Math.PI*f/o,h=f%2?u:a;l.push([h*Math.cos(c),h*Math.sin(c)])}return Te(de([l]))},polygon:i=>{let o=this.points(this.arg(i.args,"points",0),"points"),a=this.arg(i.args,"paths",1),u=Array.isArray(a)?a.map(l=>(Array.isArray(l)?l:[]).map(f=>o[Number(f)]).filter(Boolean)):[o];return Te(de(u,"evenodd"))},path:i=>{let o=this.arg(i.args,"d",0);if(typeof o!="string")throw new Error('path() needs SVG path data, like path("M0 0 L10 0 L5 8 Z")');let a=xr(fs(o),.01),u=String(this.arg(i.args,"fill",-1,"evenodd"))==="nonzero"?"nonzero":"evenodd";return Nt([Te(de(a.closed,u)),bt(a.open)])},line:i=>{let o=this.vec2(this.arg(i.args,"from",0,[0,0]),"from",!1),a=this.vec2(this.arg(i.args,"to",1,[10,0]),"to",!1);return bt([[o,a]])},polyline:i=>{let o=this.points(this.arg(i.args,"points",0),"points"),a=Se(this.arg(i.args,"closed",1,!1));return bt([a&&o.length?[...o,o[0]]:o])},arc:i=>{let o=this.num(this.arg(i.args,"r",0,10),"arc","r"),a=this.num(this.arg(i.args,"start",1,0),"arc","start"),u=this.num(this.arg(i.args,"end",2,90),"arc","end"),l=Math.max(2,Math.ceil(this.segs(i.env)(o)*Math.abs(u-a)/360));if(!(l<=this.limits.maxSegments))throw new Error(`an arc with ${l} segments is more than the limit of ${this.limits.maxSegments}`);let f=[];for(let c=0;c<=l;c++){let h=(a+(u-a)*c/l)*Math.PI/180;f.push([o*Math.cos(h),o*Math.sin(h)])}return bt([f])},text:i=>{if(!this.opts.fonts)throw new Error("text() needs a font. Pass fonts to render(), or --font on the command line.");let o=this.arg(i.args,"text",0,""),a=typeof o=="string"?o:Le(o);if(a.length>this.limits.maxTextLength)throw new Error(`${a.length} characters is more than the limit of ${this.limits.maxTextLength} for one text()`);return Te(On(this.opts.fonts,a,this.textOpts(i.args,i.env)))},translate:i=>{let[o,a]=this.vec2(this.arg(i.args,"v",0,[0,0]),"v",!1);return e(i,[1,0,0,1,o,a])},rotate:i=>{let o=this.arg(i.args,"a",0,0),u=(Array.isArray(o)?Number(o[2]??0):this.num(o,"rotate","a"))*Math.PI/180,l=Math.cos(u),f=Math.sin(u),c=this.arg(i.args,"center",-1),h=[l,f,-f,l,0,0];if(c!==void 0){let[p,g]=this.vec2(c,"center",!1);h=[l,f,-f,l,p-l*p+f*g,g-f*p-l*g]}return e(i,h)},scale:i=>{let[o,a]=this.vec2(this.arg(i.args,"v",0,1),"v");return e(i,[o,0,0,a,0,0])},mirror:i=>{let[o,a]=this.vec2(this.arg(i.args,"v",0,[1,0]),"v",!1),u=Math.hypot(o,a)||1,l=o/u,f=a/u;return e(i,[1-2*l*l,-2*l*f,-2*l*f,1-2*f*f,0,0])},multmatrix:i=>{let o=this.arg(i.args,"m",0);if(!Array.isArray(o)||o.length<2)throw new Error("m must be a 2x3 or 3x3 matrix");let a=o[0],u=o[1];return e(i,[a[0],u[0],a[1],u[1],a[2]??0,u[2]??0])},union:i=>i.children(),group:i=>i.children(),difference:i=>{let[o,...a]=i.childList();if(!o)return ft();let u=n(a,"difference");return s(o,l=>({regions:fr(l.regions,u.regions),lines:Rt(l.lines,de(u.regions),"outside")}))},intersection:i=>{let[o,...a]=i.childList();if(!o)return ft();let u=o;for(let l of a){let f=de(n([l],"intersection").regions);u=s(u,c=>({regions:hr(c.regions,f),lines:Rt(c.lines,f,"inside")}))}return u},hull:i=>{let o=i.children(),a=[],u="cut",l=!0;for(let[c,h]of o.layers){l&&(h.regions.length||h.lines.length)&&(u=c,l=!1);for(let p of[...h.regions,...h.lines])for(let g of p)a.push(g)}let f=rs(a);return{layers:new Map([[u,{regions:f.length>=3?[f]:[],lines:[]}]]),parts:o.parts}},offset:i=>{let o=this.arg(i.args,"r",0),a=this.arg(i.args,"delta",-1),u=Se(this.arg(i.args,"chamfer",-1,!1)),l=o!==void 0?this.num(o,"offset","r"):this.num(a??0,"offset","delta"),f=o!==void 0?"round":u?"square":"miter";return s(i.children(),c=>({regions:cr(c.regions,l,f),lines:c.lines}))},stroke:i=>{let o=this.num(this.arg(i.args,"width",0,1),"stroke","width");return s(i.children(),a=>({regions:de([...a.regions,...es(a.lines,o)]),lines:[]}))},outline:i=>s(i.children(),o=>({regions:[],lines:[...o.lines,...de(o.regions).map(a=>[...a,a[0]])]})),cut:t("cut"),score:t("score"),engrave:t("engrave"),guide:t("guide"),layer:i=>{let o=this.arg(i.args,"name",0);if(typeof o!="string"||!o)throw new Error("layer() needs a name");let a=this.arg(i.args,"mode",1),u=this.arg(i.args,"color",2),l=this.layers.get(o);if(a!==void 0||u!==void 0||!l){let f=a??l?.mode??"line";if(!["cut","line","fill","guide"].includes(f))throw new Error('mode must be "cut", "line", "fill" or "guide"');let c=String(u??l?.color??"#00aa00");if(!/^#[0-9a-fA-F]{6}$/.test(c))throw new Error('color must look like "#00aa00"');this.layers.set(o,{name:o,mode:f,color:c})}return dr(i.children(),o)},part:i=>{let o=String(this.arg(i.args,"name",0,"part")),a=Math.max(1,Math.floor(Number(this.arg(i.args,"qty",1,1))||1));if(this.copies+=a,!(this.copies<=this.limits.maxParts))throw new Error(`more than ${this.limits.maxParts} part copies in total, the limit`);let u=i.children();return{layers:new Map,parts:[...u.parts,{name:o,qty:a,layers:u.layers,thickness:this.thickness(i.env),kerf:Number(this.dyn(i.env,"$kerf"))||0,material:String(this.dyn(i.env,"$material")??"material")}]}},material:i=>{let o=this.arg(i.args,"thickness",0),a=this.arg(i.args,"kerf",1),u=this.arg(i.args,"name",2);return o!==void 0&&i.env.vars.set("$thickness",this.num(o,"material","thickness")),a!==void 0&&i.env.vars.set("$kerf",this.num(a,"material","kerf")),u!==void 0&&i.env.vars.set("$material",String(u)),i.children()},children:i=>{let o=i.env.childCtx();if(!o)return ft();let a=this.childStmts(o.stmts),u=this.arg(i.args,"index",0),l=new ve(o.env,i.env);this.hoist(o.stmts,l);let f=new Set;if(u===void 0)a.forEach(h=>f.add(h));else for(let h of this.iterable(u,i.args.at))a[Number(h)]&&f.add(a[Number(h)]);let c=[];for(let h of o.stmts)if(h.kind==="assign")this.stmt(h,l);else if(f.has(h)){let p=this.stmt(h,l);p&&c.push(p)}return Nt(c)},echo:i=>(this.echo(this.echoText(i.args),i.args.at),i.children()),assert:i=>{let o=i.args;if(!Se(o.pos[0]??o.named.get("condition")))throw new N(`Assertion failed${o.pos[1]!==void 0?": "+(typeof o.pos[1]=="string"?o.pos[1]:Le(o.pos[1])):""}`,o.at);return i.children()},finger_rect:i=>{let[o,a]=this.vec2(this.arg(i.args,"size",0),"size"),u=this.edges(this.arg(i.args,"edges",1,"out")),l=this.thickness(i.env),f=this.fingerWidth(i.args,i.env,2);return this.spend(2*(Math.abs(o)+Math.abs(a))/f*4),Te(is(o,a,u,l,f))},finger_holes:i=>{let o=this.num(this.arg(i.args,"length",0),"finger_holes","length"),a=this.edges(this.arg(i.args,"edge",1,"out"))[0];if(a==="flat")throw new Error('edge must be "out" or "in"');let u=this.fingerWidth(i.args,i.env,2);return this.spend(Math.abs(o)/u*4),Te(os(o,a,this.thickness(i.env),u))},tslot:i=>{let o=this.num(this.arg(i.args,"d",0,3),"tslot","d"),a=this.num(this.arg(i.args,"length",1,12),"tslot","length"),[u,l]=this.vec2(this.arg(i.args,"nut",2,[o*1.85,o*.8]),"nut",!1),f=this.num(this.arg(i.args,"nut_at",3,a/2),"tslot","nut_at");return Te(de(as(o,a,u,l,f)))},living_hinge:i=>{let[o,a]=this.vec2(this.arg(i.args,"size",0),"size"),u=this.num(this.arg(i.args,"spacing",1,1.5),"living_hinge","spacing"),l=this.num(this.arg(i.args,"bridge",2,3),"living_hinge","bridge"),f=this.num(this.arg(i.args,"cut",3,Math.max(l*2,(a-3*l)/2)),"living_hinge","cut");if(u<=0||l<=0||f<=0)throw new Error("spacing, bridge and cut must be positive");return this.spend((Math.abs(o)/u+1)*(Math.abs(a)/(f+l)+2)*2),bt(us(o,a,u,l,f))}};function n(i,o){let a={regions:[],lines:[]};for(let u of i){if(u.parts.length)throw new Error(`part() can only be the first child of ${o}()`);for(let l of u.layers.values())for(let f of l.regions)a.regions.push(f)}return a}function s(i,o){let a=u=>{let l=new Map;for(let[f,c]of u)l.set(f,o(c));return l};return{layers:a(i.layers),parts:i.parts.map(u=>({...u,layers:a(u.layers)}))}}}};var It=r=>{let e=Math.round(r*1e3)/1e3;return Object.is(e,-0)?"0":String(e)},Fn=r=>r.replace(/&/g,"&").replace(/</g,"<").replace(/"/g,""");function An(r,e){let t=[];for(let[n,s]of r){let i=[It(n),It(s)],o=t[t.length-1];(!o||o[0]!==i[0]||o[1]!==i[1])&&t.push(i)}for(;e&&t.length>1&&t[0][0]===t[t.length-1][0]&&t[0][1]===t[t.length-1][1];)t.pop();return t}var Tt=(r,e)=>`M${An(r,e).map(([t,n])=>`${t} ${n}`).join("L")}${e?"Z":""}`;function Dn(r,e){let t=[];for(let n of e){let s=[],i=[],o=[];for(let a of r){let u=a.layers.get(n.name);if(u){for(let l of u.lines)s.push(Tt(l,!1));for(let l of u.regions)(Ke(l)<0?i:o).push(Tt(l,!0))}}(s.length||i.length||o.length)&&t.push({name:n.name,mode:n.mode,color:n.color,d:[...s,...i,...o].join(""),regions:[...i,...o].join(""),lines:s.join("")})}return t}function Un(r,e,t,n){let s=['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="${It(e)}mm" height="${It(t)}mm" viewBox="0 0 ${It(e)} ${It(t)}">`];for(let i of n){let o=[],a=[];for(let l of r){let f=l.layers.get(i.name);if(!f)continue;let c=` data-part="${Fn(l.part)}"`;if(i.mode==="fill"){f.regions.length&&a.push(`<path${c} d="${f.regions.map(h=>Tt(h,!0)).join("")}"/>`);for(let h of f.lines)a.push(`<path${c} fill="none" stroke="${i.color}" stroke-width="0.1" d="${Tt(h,!1)}"/>`);continue}for(let h of f.lines)o.push(`<path${c} d="${Tt(h,!1)}"/>`);for(let h of f.regions)(Ke(h)<0?o:a).push(`<path${c} d="${Tt(h,!0)}"/>`)}if(!o.length&&!a.length)continue;let u=i.mode==="fill"?`fill="${i.color}" fill-rule="evenodd" stroke="none"`:`fill="none" stroke="${i.color}" stroke-width="0.1"${i.mode==="guide"?' stroke-dasharray="1 1"':""}`;s.push(`<g id="${Fn(i.name)}" inkscape:groupmode="layer" inkscape:label="${Fn(i.name)}" data-mode="${i.mode}" ${u}>`,...o,...a,"</g>")}return s.push("</svg>",""),s.join(`
|
|
37
|
+
`)}var sh={"#ff0000":1,"#ffff00":2,"#00ff00":3,"#00ffff":4,"#0000ff":5,"#ff00ff":6,"#000000":7},ih=r=>{let e=sh[r.toLowerCase()];if(e)return e;let[t,n,s]=[1,3,5].map(i=>parseInt(r.slice(i,i+2),16));return t>n&&t>s?1:n>t&&n>s?3:s>t&&s>n?5:7};function ji(r,e,t,n){let s=[],i=(u,l)=>s.push(String(u),String(l)),o=u=>u.toUpperCase().replace(/[^A-Z0-9_-]/g,"_");i(0,"SECTION"),i(2,"HEADER"),i(9,"$ACADVER"),i(1,"AC1009"),i(9,"$INSUNITS"),i(70,4),i(0,"ENDSEC"),i(0,"SECTION"),i(2,"TABLES"),i(0,"TABLE"),i(2,"LAYER"),i(70,n.length);for(let u of n)i(0,"LAYER"),i(2,o(u.name)),i(70,0),i(62,ih(u.color)),i(6,"CONTINUOUS");i(0,"ENDTAB"),i(0,"ENDSEC"),i(0,"SECTION"),i(2,"ENTITIES");let a=(u,l,f)=>{i(0,"POLYLINE"),i(8,u),i(66,1),i(10,0),i(20,0),i(30,0),i(70,f?1:0);for(let[c,h]of An(l.map(([p,g])=>[p,t-g]),f))i(0,"VERTEX"),i(8,u),i(10,c),i(20,h),i(30,0);i(0,"SEQEND"),i(8,u)};for(let u of n){let l=o(u.name),f=[];for(let c of r){let h=c.layers.get(u.name);if(h){for(let p of h.lines)a(l,p,!1);for(let p of h.regions)Ke(p)<0?a(l,p,!0):f.push(p)}}for(let c of f)a(l,c,!0)}return i(0,"ENDSEC"),i(0,"EOF"),s.join(`
|
|
38
|
+
`)+`
|
|
39
|
+
`}var Ki=(r,e)=>{let t=0;for(let n=1;n<r.length;n++)t+=Math.hypot(r[n][0]-r[n-1][0],r[n][1]-r[n-1][1]);return e&&r.length>2&&(t+=Math.hypot(r[0][0]-r[r.length-1][0],r[0][1]-r[r.length-1][1])),t},it=r=>Math.round(r*100)/100;function oh(r,e={}){let{program:t}=ht(r),n=e.fonts?new Dr(e.fonts,e.defaultFont):void 0,s=new Ur({overrides:e.params,resolve:e.resolve,fonts:n,maxSteps:e.maxSteps,limits:e.limits}),i=s.limits,o;try{o=s.run(t)}catch(k){let M=k instanceof RangeError?new N(/call stack/i.test(k.message)?"Recursion too deep: the program calls itself without stopping":"A value grew too large. Is a list or string doubling without end?"):k;throw M instanceof N&&(M.echoes=s.echoes,n?.missing.size&&(M.missingFonts=[...n.missing])),M}let a=k=>o.globals.get(k).value,u=o.warnings,l=o.layers,f=k=>l.get(k)?.mode??"line",c=[...o.shape.parts];[...o.shape.layers.values()].some(k=>k.regions.length||k.lines.length)&&c.unshift({name:"part",qty:1,layers:o.shape.layers,thickness:Number(a("$thickness"))||3,kerf:Number(a("$kerf"))||0,material:String(a("$material")??"material")}),c.length||u.push("Nothing to cut: the program made no shapes.");let p=[],g=[];for(let k of c){let M=de([...k.layers].filter(([te])=>f(te)==="cut").flatMap(([,te])=>te.regions)),A=new Map;for(let[te,le]of k.layers){if(f(te)==="guide"&&!e.guides)continue;let ue=de(le.regions),pe=le.lines.filter(K=>K.length>=2);(f(te)==="line"||f(te)==="guide")&&(pe=[...pe,...ue.map(K=>[...K,K[0]])],ue=[]),M.length&&f(te)!=="guide"&&(f(te)!=="cut"&&(ue=hr(ue,M)),pe=Rt(pe,M,"inside")),(ue.length||pe.length)&&A.set(te,{regions:ue,lines:pe})}let G=ts(M).length;G>1&&u.push(`Part "${k.name}" cuts into ${G} separate pieces. Join them, or make them separate parts.`);let D=0;for(let[te,le]of A)if(f(te)==="cut"){for(let ue of le.regions)D+=Ki(ue,!0);for(let ue of le.lines)D+=Ki(ue,!1)}let H=Kr(A)??[0,0,0,0],se=e.kerf??k.kerf;if(!(Number.isFinite(se)&&se>=0))throw new N("$kerf must be a number, 0 or more");let be={name:k.name,qty:k.qty,width:it(H[2]-H[0]),height:it(H[3]-H[1]),pieces:G,cutLength:Math.round(D),thickness:k.thickness,kerf:se,material:k.material};if(se>0){for(let[te,le]of A)if(f(te)==="cut"){let ue=le.regions.filter(K=>Ke(K)<0).length;le.regions=cr(le.regions,se/2,"round",Math.min(.01,se/20));let pe=ue-le.regions.filter(K=>Ke(K)<0).length;pe>0&&u.push(`Part "${k.name}": ${pe} hole${pe===1?" is":"s are"} narrower than the ${se} mm kerf and will not be cut.`)}}p.push(be),g.push({info:be,layers:A})}let m=0;for(let k of g){let M=0;for(let A of k.layers.values()){for(let G of A.regions)M+=G.length;for(let G of A.lines)M+=G.length}m+=M*k.info.qty}if(m>i.maxOutputPoints)throw new N(`The files would have ${m} points, more than the limit of ${i.maxOutputPoints}. Use fewer copies or simpler shapes.`);let x=e.sheet??a("$sheet");if(!Array.isArray(x)||!(Number.isFinite(x[0])&&x[0]>0)||!(Number.isFinite(x[1])&&x[1]>0))throw new N("$sheet must be [width, height], both more than 0");let y=e.gap??Number(a("$gap")??3),S=e.margin??y;if(!(Number.isFinite(y)&&y>=0))throw new N("$gap must be a number, 0 or more");if(!(Number.isFinite(S)&&S>=0))throw new N("margin must be a number, 0 or more");let w=e.layout??(a("$layout")==="none"?"none":"pack"),P=["engrave",...[...l.keys()].filter(k=>!["engrave","score","cut","guide"].includes(k)),"score","cut","guide"].map(k=>l.get(k)).filter(Boolean),U=[],O=[1,0,0,-1,0,0],L=k=>Kr(k)??[0,0,0,0],W=(k,M)=>pr({layers:k,parts:[]},M).layers;if(w==="none"){let k=[];for(let D of g)for(let H=0;H<D.info.qty;H++)k.push({part:D.info.name,copy:H+1,layers:W(D.layers,O),rotated:!1});let M=new Map;for(let D of k)for(let[H,se]of D.layers){let be=M.get(H)??{regions:[],lines:[]};for(let te of se.regions)be.regions.push(te);for(let te of se.lines)be.lines.push(te);M.set(H,be)}let A=L(M),G=[1,0,0,1,S-A[0],S-A[1]];for(let D of k)D.layers=W(D.layers,G);U.push(_(k,A[2]-A[0]+2*S,A[3]-A[1]+2*S,g[0]?.info))}else{let k=new Map;for(let M of g){let A=`${M.info.material}|${M.info.thickness}`;k.set(A,[...k.get(A)??[],M])}for(let M of k.values()){let[A,G]=x,D=[];for(let K of M){let Ne=W(K.layers,O),Me=L(Ne),vt=Me[2]-Me[0],mt=Me[3]-Me[1],Rn=!1;(vt>A-2*S||mt>G-2*S)&&mt<=A-2*S&&vt<=G-2*S&&(Ne=W(Ne,[0,1,-1,0,0,0]),Me=L(Ne),vt=Me[2]-Me[0],mt=Me[3]-Me[1],Rn=!0),(vt>A-2*S||mt>G-2*S)&&u.push(`Part "${K.info.name}" (${it(vt)} x ${it(mt)} mm) is bigger than the ${A} x ${G} mm sheet.`),Ne=W(Ne,[1,0,0,1,-Me[0],-Me[1]]);for(let Rr=0;Rr<K.info.qty;Rr++)D.push({info:K.info,layers:Ne,w:vt,h:mt,copy:Rr+1,rotated:Rn})}D.sort((K,Ne)=>Ne.h-K.h||Ne.w-K.w);let H=[],se=S,be=S,te=0,le=0,ue=0,pe=()=>{if(H.length&&U.length>=i.maxSheets)throw new N(`The parts need more than ${i.maxSheets} sheets, the limit. Use fewer copies or a bigger $sheet.`);H.length&&U.push(_(H,Math.max(le+S,1),Math.max(ue+S,1),M[0].info)),H=[],se=S,be=S,te=0,le=0,ue=0};for(let K of D)se>S&&se+K.w>A-S&&(se=S,be+=te+y,te=0),H.length&&be+K.h>G-S&&pe(),H.push({part:K.info.name,copy:K.copy,layers:W(K.layers,[1,0,0,1,se,be]),rotated:K.rotated}),le=Math.max(le,se+K.w),ue=Math.max(ue,be+K.h),se+=K.w+y,te=Math.max(te,K.h);pe()}}function _(k,M,A,G){let D=it(M),H=it(A);return{width:D,height:H,material:G?.material??"material",thickness:G?.thickness??0,items:k,paths:Dn(k,P),svg:Un(k,D,H,P),dxf:ji(k,D,H,P)}}let Y=U.length===1?U[0]:void 0,he=Y?[]:U.flatMap((k,M)=>{let A=U.slice(0,M).reduce((G,D)=>G+D.height+10,0);return k.items.map(G=>({...G,layers:W(G.layers,[1,0,0,1,0,A])}))}),ce=it(Math.max(1,...U.map(k=>k.width))),Q=it(Math.max(1,U.reduce((k,M)=>k+M.height,0)+10*Math.max(0,U.length-1))),X=Y?Y.svg:Un(he,ce,Q,P),ee=Y?Y.paths:Dn(he,P);return{sheets:U,width:Y?.width??ce,height:Y?.height??Q,paths:ee,svg:X,parts:p,layers:P,warnings:u,echoes:o.echoes}}function Qi(r){switch(r.kind){case"num":case"str":case"bool":return{ok:!0,value:r.value};case"unary":return r.op==="-"&&r.arg.kind==="num"?{ok:!0,value:-r.arg.value}:{ok:!1};case"list":{let e=[];for(let t of r.items){if(t.kind!=="item")return{ok:!1};let n=Qi(t.expr);if(!n.ok||typeof n.value!="number")return{ok:!1};e.push(n.value)}return{ok:!0,value:e}}default:return{ok:!1}}}function Ji(r){let e=Number(r.trim());return r.trim()!==""&&Number.isFinite(e)?e:void 0}function ah(r){let{program:e,comments:t}=ht(r),n=t.filter(a=>a.block&&/^\[[^\]]+\]$/.test(a.text)),s=new Map(t.filter(a=>!a.block&&!a.own).map(a=>[a.line,a.text])),i=new Map(t.filter(a=>!a.block&&a.own).map(a=>[a.line,a.text])),o=[];for(let a of e.body){if(a.kind!=="assign"||/^\$f[nas]$/.test(a.name))continue;let u=Qi(a.value);if(!u.ok)continue;let l=n.filter(m=>m.line<=a.pos.line).pop()?.text.slice(1,-1).trim()??"Parameters";if(l.toLowerCase()==="hidden")continue;let f=s.get(a.pos.line),c=i.get(a.pos.line-1)??"",h=u.value,p={name:a.name,caption:c,group:l,type:typeof h=="number"||Array.isArray(h)?"number":typeof h=="boolean"?"boolean":"string",initial:h,span:a.span},g=f?/^\[(.*)\]$/.exec(f.trim()):null;if(g){let m=g[1];if(m.includes(",")||/[a-zA-Z"]/.test(m)&&!/^-?[\d.]+(:-?[\d.]+){0,2}$/.test(m))p.options=m.split(",").map(x=>{let[y,S]=x.split(":").map(P=>P.trim().replace(/^"|"$/g,"")),w=Ji(y),F=p.type==="number"&&w!==void 0?w:y;return{name:S??y,value:F}});else{let x=m.split(":").map(Ji);x.every(y=>y!==void 0)&&(x.length===1?p.max=x[0]:x.length===2?(p.min=x[0],p.max=x[1]):(p.min=x[0],p.step=x[1],p.max=x[2]))}}o.push(p)}return{parameters:o}}var Ip="0.2.1",Tp="0.1";export{_i as DEFAULT_LAYERS,Yi as DEFAULT_LIMITS,N as KerfError,Tp as LANGUAGE_VERSION,Ip as VERSION,ah as parameters,ht as parse,oh as render,Jr as tokenize};
|
|
40
|
+
/*! Bundled license information:
|
|
41
|
+
|
|
42
|
+
opentype.js/dist/opentype.module.js:
|
|
43
|
+
(*! https://mths.be/codepointat v0.2.0 by @mathias *)
|
|
44
|
+
*/
|