@konoui/mjimage 0.0.31 → 0.0.33
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/dist/index.cjs +30 -0
- package/dist/index.d.cts +1389 -0
- package/dist/index.d.ts +1389 -0
- package/dist/index.js +10971 -0
- package/package.json +23 -14
- package/dist/mjs/cmd/index.d.ts +0 -1
- package/dist/mjs/cmd/index.js +0 -49
- package/dist/mjs/index.d.ts +0 -6
- package/dist/mjs/index.js +0 -22
- package/dist/mjs/lib/calculator/calc.d.ts +0 -275
- package/dist/mjs/lib/calculator/calc.js +0 -1397
- package/dist/mjs/lib/calculator/efficiency.d.ts +0 -24
- package/dist/mjs/lib/calculator/efficiency.js +0 -82
- package/dist/mjs/lib/calculator/helper.d.ts +0 -6
- package/dist/mjs/lib/calculator/helper.js +0 -21
- package/dist/mjs/lib/calculator/index.d.ts +0 -3
- package/dist/mjs/lib/calculator/index.js +0 -19
- package/dist/mjs/lib/controller/controller.d.ts +0 -168
- package/dist/mjs/lib/controller/controller.js +0 -897
- package/dist/mjs/lib/controller/events.d.ts +0 -171
- package/dist/mjs/lib/controller/events.js +0 -102
- package/dist/mjs/lib/controller/game.d.ts +0 -5
- package/dist/mjs/lib/controller/game.js +0 -29
- package/dist/mjs/lib/controller/index.d.ts +0 -10
- package/dist/mjs/lib/controller/index.js +0 -26
- package/dist/mjs/lib/controller/managers.d.ts +0 -83
- package/dist/mjs/lib/controller/managers.js +0 -194
- package/dist/mjs/lib/controller/player-efficiency.d.ts +0 -24
- package/dist/mjs/lib/controller/player-efficiency.js +0 -153
- package/dist/mjs/lib/controller/player.d.ts +0 -12
- package/dist/mjs/lib/controller/player.js +0 -85
- package/dist/mjs/lib/controller/replay.d.ts +0 -10
- package/dist/mjs/lib/controller/replay.js +0 -31
- package/dist/mjs/lib/controller/river.d.ts +0 -19
- package/dist/mjs/lib/controller/river.js +0 -52
- package/dist/mjs/lib/controller/state-machine.d.ts +0 -67
- package/dist/mjs/lib/controller/state-machine.js +0 -771
- package/dist/mjs/lib/controller/wall.d.ts +0 -24
- package/dist/mjs/lib/controller/wall.js +0 -117
- package/dist/mjs/lib/core/constants.d.ts +0 -73
- package/dist/mjs/lib/core/constants.js +0 -73
- package/dist/mjs/lib/core/index.d.ts +0 -2
- package/dist/mjs/lib/core/index.js +0 -18
- package/dist/mjs/lib/core/lexer.d.ts +0 -14
- package/dist/mjs/lib/core/lexer.js +0 -53
- package/dist/mjs/lib/core/parser.d.ts +0 -120
- package/dist/mjs/lib/core/parser.js +0 -612
- package/dist/mjs/lib/image/image.d.ts +0 -42
- package/dist/mjs/lib/image/image.js +0 -361
- package/dist/mjs/lib/image/index.d.ts +0 -1
- package/dist/mjs/lib/image/index.js +0 -17
- package/dist/mjs/lib/measure-text/index.d.ts +0 -19
- package/dist/mjs/lib/measure-text/index.js +0 -49
- package/dist/mjs/lib/myassert/index.d.ts +0 -1
- package/dist/mjs/lib/myassert/index.js +0 -8
- package/dist/mjs/lib/table/index.d.ts +0 -2
- package/dist/mjs/lib/table/index.js +0 -18
- package/dist/mjs/lib/table/table-parser.d.ts +0 -127
- package/dist/mjs/lib/table/table-parser.js +0 -105
- package/dist/mjs/lib/table/table.d.ts +0 -12
- package/dist/mjs/lib/table/table.js +0 -248
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";var Qs=Object.defineProperty;var to=(e,t,n)=>t in e?Qs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var v=(e,t,n)=>to(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const fi="MS Gothic, sans-serif",Ot={WIDTH:66,HEIGHT:90,TEXT_SCALE:.8,BLOCK_MARGIN_SCALE:.3},kr={BASE:40},Se=",",m={M:"m",P:"p",S:"s",Z:"z",BACK:"_"},A={TSUMO:"t",RON:"r",DORA:"d",HORIZONTAL:"-",COLOR_GRAYSCALE:"^"},x={PON:"pon",CHI:"chi",SHO_KAN:"shokan",DAI_KAN:"daikan",AN_KAN:"ankan",TSUMO:"tsumo",THREE:"three",PAIR:"pair",ISOLATED:"isolated",RUN:"run",HAND:"hand",IMAGE_DORA:"dora",IMAGE_DISCARD:"simple-discard",UNKNOWN:"unknown"},_={E:"1w",S:"2w",W:"3w",N:"4w"},L={E1:_.E+"1",E2:_.E+"2",E3:_.E+"3",E4:_.E+"4",S1:_.S+"1",S2:_.S+"2",S3:_.S+"3",S4:_.S+"4",W1:_.W+"1",W2:_.W+"2",W3:_.W+"3",W4:_.W+"4",N1:_.N+"1",N2:_.N+"2",N3:_.N+"3",N4:_.N+"4"},di={[_.E]:"東",[_.S]:"南",[_.W]:"西",[_.N]:"北"},pi={[L.E1]:"東1局",[L.E2]:"東2局",[L.E3]:"東3局",[L.E4]:"東4局",[L.N1]:"南1局",[L.N2]:"南2局",[L.N3]:"南3局",[L.N4]:"南4局",[L.W1]:"西1局",[L.W2]:"西2局",[L.W3]:"西3局",[L.W4]:"西4局",[L.N1]:"北1局",[L.N2]:"北2局",[L.N3]:"北3局",[L.N4]:"北4局"};function R(e,t){if(!e)throw new Error(t)}class eo{constructor(t="東",n="2"){v(this,"ctx",null);v(this,"strText");v(this,"numText");v(this,"measure",(t,n)=>{this.ctx==null&&(this.ctx=document.createElement("canvas").getContext("2d"),R(this.ctx,"context is null"));const i=this.ctx;i.font=n;const r=i.measureText(t);let s=r.width,o=r.actualBoundingBoxAscent+r.actualBoundingBoxDescent;return[s,o]});v(this,"measureFontContext",(t,n)=>{const i={family:t,size:n},r=`${i.size}px ${i.family}`,[s,o]=this.measure(this.strText,r),[a,c]=this.measure(this.numText,r);return{font:{family:t,size:n},textWidth:s,textHeight:o,numWidth:a,numHeight:c}});v(this,"measureTableFontContext",t=>{const n=this.measureFontContext(fi,kr.BASE*t);return n.textHeight=n.textWidth,n.numHeight=n.numWidth,n});this.strText=t,this.numText=n}}class no{constructor(t){v(this,"input");v(this,"position");v(this,"nextPosition");v(this,"char");v(this,"eof","\0");this.input=t,this.position=0,this.nextPosition=0,this.char=this.readChar()}readChar(){return this.nextPosition>=this.input.length?(this.char=this.eof,this.char):(this.char=this.input[this.nextPosition],this.position=this.nextPosition,this.nextPosition++,this.char)}peekChar(){return this.nextPosition>=this.input.length?this.eof:this.input[this.nextPosition]}peekCharN(t){if(t<0)throw new Error("arg must be positive value");return this.position+t>=this.input.length?this.eof:this.input[this.position+t]}prevChar(){return this.position>=this.input.length?this.eof:this.position>0?this.input[this.position-1]:this.eof}skipWhitespace(){for(;this.isWhitespace(this.char);)this.readChar()}isWhitespace(t){return/\s/.test(t)}}const Ee=(e,t)=>{if(e.t==t.t)return e.n==0?5-t.n:t.n==0?e.n-5:e.n-t.n;const n={[m.M]:1,[m.P]:2,[m.S]:3,[m.Z]:4,[m.BACK]:5};return n[e.t]-n[t.t]};function io(e){for(let t of Object.values(m))if(t==e)return[t,!0];return[m.BACK,!1]}class w{constructor(t,n,i=[]){this.t=t,this.n=n,this.ops=i}static from(t){const n=new at(t).tiles();if(n.length!=1)throw new Error(`input is not a single tile ${t}`);return n[0]}toString(){return this.t===m.BACK?this.t:`${this.ops.join("")}${this.n}${this.t}`}toJSON(){return this.toString()}clone(t){const n=(t==null?void 0:t.t)??this.t,i=(t==null?void 0:t.n)??this.n,r=this.ops.filter(o=>(t==null?void 0:t.remove)!=o),s=new Set([...r]);return t!=null&&t.add&&s.add(t.add),new w(n,i,Array.from(s))}has(t){return this.ops.includes(t)}isNum(){return this.t==m.M||this.t==m.P||this.t==m.S}equals(t,n=!1){let i=this.n==t.n;return n&&(i||(i=Ce(this)&&Ce(t))),this.t==t.t&&i}imageSize(t){const n=parseFloat((Ot.HEIGHT*t).toPrecision(5)),i=parseFloat((Ot.WIDTH*t).toPrecision(5)),r=this.has(A.HORIZONTAL)?{width:n,height:i,baseWidth:i,baseHeight:n}:{width:i,height:n,w:i,baseWidth:i,baseHeight:n};return(this.has(A.TSUMO)||this.has(A.DORA))&&(r.width+=i*Ot.TEXT_SCALE),r}}function Ce(e){return it(e)||nt(e)}function nt(e){return e.isNum()&&e.n==5}function it(e){return e.isNum()&&e.n==0}class z{constructor(t,n){v(this,"_tiles");v(this,"_type");if(this._tiles=t,this._type=n,this._type==x.CHI){this._tiles=[...this._tiles].sort((i,r)=>i.has(A.HORIZONTAL)?-1:r.has(A.HORIZONTAL)?1:Ee(i,r));return}this._type!=x.SHO_KAN&&this._type!=x.IMAGE_DISCARD&&(this._tiles=[...this._tiles].sort(Ee))}static from(t){const n=new at(t.tiles).tiles();return rn(n,t.type)}serialize(){return{tiles:this.toString(),type:this.type}}toJSON(){return this.serialize()}get type(){return this._type}get tiles(){return this._tiles}is(t){return this._type==t}isCalled(){return[x.PON.toString(),x.CHI.toString(),x.DAI_KAN.toString(),x.SHO_KAN.toString(),x.AN_KAN.toString()].includes(this._type.toString())}clone(t){const n=t==null?void 0:t.replace;let i=[...this.tiles];return n&&(i[n.idx]=n.tile),rn(i,this._type)}imageSize(t){const n=this.tiles[0].imageSize(t).baseHeight,i=this.tiles[0].imageSize(t).baseWidth;if(this.is(x.SHO_KAN))return{width:i*2+n,height:Math.max(i*2,n)};const r=this.tiles.reduce((o,a)=>{const c=a.imageSize(t).height;return c>o?c:o},0);return{width:this.tiles.reduce((o,a)=>o+a.imageSize(t).width,0),height:r}}}const Xt=e=>{let t="";for(let n of e){if(n.t==m.BACK)return e.join("");t+=n.toString().slice(0,-1)}return`${t}${e[0].t}`},mi=e=>{let t=e[0].t,n="";for(let r=0;r<e.length;r++){const s=e[r],o=s.t,a=o==m.BACK?s.toString():s.toString().slice(0,-1);o!=t&&t!=m.BACK&&(n+=t),t=o,n+=a}const i=e.at(-1);return i.t!=m.BACK&&(n+=i.t),n};class ft extends z{constructor(t){super(t,x.CHI)}toString(){return Xt(this.tiles)}}class pt extends z{constructor(t){super(t,x.PON)}toString(){return Xt(this.tiles)}}class Z extends z{constructor(t){const n=t.filter(r=>r.t!=m.BACK),i=n[0];if(n.length<t.length){if(Ce(i)){const r=new w(i.t,5);super([new w(i.t,0),r,r,r],x.AN_KAN);return}super([i,i,i,i],x.AN_KAN);return}super(t,x.AN_KAN)}get tilesWithBack(){const t=this.tiles[0];return Ce(t)?[new w(m.BACK,0),new w(t.t,0),new w(t.t,5),new w(m.BACK,0)]:[new w(m.BACK,0),t,t,new w(m.BACK,0)]}static from(t){return super.from(t)}toString(){return mi(this.tilesWithBack)}}class xt extends z{constructor(t){super(t,x.DAI_KAN)}toString(){return Xt(this.tiles)}}class vt extends z{constructor(t){super(t,x.SHO_KAN)}toString(){return Xt(this.tiles)}}class J extends z{constructor(t,n){super([t,n],x.PAIR)}toString(){return Xt(this.tiles)}}class ut extends z{constructor(t){super(t,x.THREE)}toString(){return Xt(this.tiles)}}class Tt extends z{constructor(t){super(t,x.RUN)}toString(){return Xt(this.tiles)}}class gi extends z{constructor(t){super([t],x.ISOLATED)}toString(){return this.tiles[0].toString()}}class yn extends z{constructor(t){super(t,x.HAND)}toString(){return mi(this.tiles)}}class yi extends z{constructor(t,n){super(t,n)}toString(){return this.is(x.IMAGE_DISCARD)?this.tiles.join(""):mi(this.tiles)}}const rn=(e,t)=>{switch(t){case x.CHI:return new ft([e[0],e[1],e[2]]);case x.PON:return new pt([e[0],e[1],e[2]]);case x.AN_KAN:return new Z(e);case x.DAI_KAN:return new xt(e);case x.SHO_KAN:return new vt(e);case x.THREE:return new ut(e);case x.RUN:return new Tt(e);case x.PAIR:return new J(e[0],e[1]);case x.ISOLATED:return new gi(e[0]);case x.HAND:return new yn(e);default:return new yi(e,t)}};class at{constructor(t){v(this,"maxInputLength",600);this.input=t,this.input=t.replace(/\s/g,"")}parse(){const t=this.tileSeparators();return this.makeBlocks(t)}tiles(){return this.tileSeparators().filter(t=>t!=Se)}tileSeparators(){const t=new no(this.input),n=[];let i=[];for(this.validate(this.input);;){t.skipWhitespace();let r=t.char;if(r===t.eof)break;if(r==Se){n.push(Se),t.readChar();continue}let[s,o]=Vi(r,i);if(o){if(s==m.BACK){n.push(new w(s,0)),t.readChar();continue}n.push(...so(i,s)),i=[],t.readChar();continue}else{const[a,c]=oo(t);if(c){i.push(a),t.readChar();continue}const[l,u]=Tr(r);if(!u)throw new Error(`encounter unexpected number. n: ${l}, current: ${r}, input: ${t.input}`);i.push(new w(m.BACK,l))}t.readChar()}if(i.length>0)throw new Error(`remaining values ${i.toString()}`);return n}makeBlocks(t){let n=[];const i=[];if(t.length==0)return i;for(const o of t){if(o==Se){const a=Ji(n),c=rn(n,a);i.push(c),n=[];continue}n.push(o)}const r=Ji(n),s=rn(n,r);return i.push(s),n=[],i}validate(t){if(t.length==0)return;if(t.length>this.maxInputLength)throw new Error(`exceeded maximum input length(${t.length})`);const n=t.charAt(t.length-1),[i,r]=Vi(n,[new w(m.BACK,1)]);if(!r)throw new Error(`last character(${n}) is not type value`)}}function Ji(e){if(e.length===0)return x.UNKNOWN;if(e.length===1)return e[0].has(A.DORA)?x.IMAGE_DORA:e[0].has(A.TSUMO)?x.TSUMO:x.HAND;const t=e.every(s=>s.equals(e[0],!0)),n=e.filter(s=>s.has(A.HORIZONTAL)).length,i=e.filter(s=>s.has(A.TSUMO)||s.has(A.DORA)).length,r=e.filter(s=>s.t==m.BACK).length;if(i>0)return x.UNKNOWN;if(n==0&&r==0)return x.HAND;if(e.length===3&&r===0)return t?x.PON:n==1&&ro(e)?x.CHI:x.IMAGE_DISCARD;if(e.length==4&&r==2)return x.AN_KAN;if(e.length==4&&t){if(n==1)return x.DAI_KAN;if(n==2)return x.SHO_KAN}return n==1?x.IMAGE_DISCARD:x.UNKNOWN}function ro(e){e=[...e].sort(Ee);for(let t=0;t<e.length-1;t++){let n=e[t].n,i=e[t+1].n;const r=e[t].t,s=e[t+1].t;if(n==0&&(n=5),i==0&&(i=5),r!==s||n+1!==i)return!1}return!0}function so(e,t){return e.map(n=>new w(t,n.n,n.ops))}function Vi(e,t){const[n,i]=io(e);if(i)return[n,!0];if((e==="w"||e==="d")&&t.length>0){for(let s=0;s<t.length;s++){const o=t[s];e==="d"&&(t[s]=o.clone({n:o.n+4}))}return[m.Z,!0]}return[m.BACK,!1]}function Tr(e){const t=["0","1","2","3","4","5","6","7","8","9"];return[Number(e),t.includes(e)]}function oo(e){const t=Object.values(A);if(!t.includes(e.char))return[new w(m.BACK,0),!1];const n=[];for(let i=0;i<4;i++){const r=e.peekCharN(i);if(t.includes(r))n.push(r);else{const[s,o]=Tr(r);if(!o)break;for(let a=0;a<n.length;a++)e.readChar();return[new w(m.BACK,s,n),!0]}}return[new w(m.BACK,0),!1]}const jn={},Ir=[];function O(e,t){if(Array.isArray(e)){for(const n of e)O(n,t);return}if(typeof e=="object"){for(const n in e)O(n,e[n]);return}Or(Object.getOwnPropertyNames(t)),jn[e]=Object.assign(jn[e]||{},t)}function tt(e){return jn[e]||{}}function ao(){return[...new Set(Ir)]}function Or(e){Ir.push(...e)}function wi(e,t){let n;const i=e.length,r=[];for(n=0;n<i;n++)r.push(t(e[n]));return r}function co(e,t){let n;const i=e.length,r=[];for(n=0;n<i;n++)t(e[n])&&r.push(e[n]);return r}function kn(e){return e%360*Math.PI/180}function lo(e){return e.replace(/([A-Z])/g,function(t,n){return"-"+n.toLowerCase()})}function Er(e){return e.charAt(0).toUpperCase()+e.slice(1)}function _e(e,t,n,i){return(t==null||n==null)&&(i=i||e.bbox(),t==null?t=i.width/i.height*n:n==null&&(n=i.height/i.width*t)),{width:t,height:n}}function Ln(e,t){const n=e.origin;let i=e.ox!=null?e.ox:e.originX!=null?e.originX:"center",r=e.oy!=null?e.oy:e.originY!=null?e.originY:"center";n!=null&&([i,r]=Array.isArray(n)?n:typeof n=="object"?[n.x,n.y]:[n,n]);const s=typeof i=="string",o=typeof r=="string";if(s||o){const{height:a,width:c,x:l,y:u}=t.bbox();s&&(i=i.includes("left")?l:i.includes("right")?l+c:l+c/2),o&&(r=r.includes("top")?u:r.includes("bottom")?u+a:u+a/2)}return[i,r]}const uo=new Set(["desc","metadata","title"]),zn=e=>uo.has(e.nodeName),Cr=(e,t,n={})=>{const i={...t};for(const r in i)i[r].valueOf()===n[r]&&delete i[r];Object.keys(i).length?e.node.setAttribute("data-svgjs",JSON.stringify(i)):(e.node.removeAttribute("data-svgjs"),e.node.removeAttribute("svgjs:data"))},_i="http://www.w3.org/2000/svg",ho="http://www.w3.org/1999/xhtml",Tn="http://www.w3.org/2000/xmlns/",je="http://www.w3.org/1999/xlink",C={window:typeof window>"u"?null:window,document:typeof document>"u"?null:document};function fo(){return C.window}class bi{}const zt={},xi="___SYMBOL___ROOT___";function Ne(e,t=_i){return C.document.createElementNS(t,e)}function V(e,t=!1){if(e instanceof bi)return e;if(typeof e=="object")return In(e);if(e==null)return new zt[xi];if(typeof e=="string"&&e.charAt(0)!=="<")return In(C.document.querySelector(e));const n=t?C.document.createElement("div"):Ne("svg");return n.innerHTML=e,e=In(n.firstChild),n.removeChild(n.firstChild),e}function $(e,t){return t&&(t instanceof C.window.Node||t.ownerDocument&&t instanceof t.ownerDocument.defaultView.Node)?t:Ne(e)}function ct(e){if(!e)return null;if(e.instance instanceof bi)return e.instance;if(e.nodeName==="#document-fragment")return new zt.Fragment(e);let t=Er(e.nodeName||"Dom");return t==="LinearGradient"||t==="RadialGradient"?t="Gradient":zt[t]||(t="Dom"),new zt[t](e)}let In=ct;function N(e,t=e.name,n=!1){return zt[t]=e,n&&(zt[xi]=e),Or(Object.getOwnPropertyNames(e.prototype)),e}function po(e){return zt[e]}let mo=1e3;function Nr(e){return"Svgjs"+Er(e)+mo++}function Mr(e){for(let t=e.children.length-1;t>=0;t--)Mr(e.children[t]);return e.id&&(e.id=Nr(e.nodeName)),e}function E(e,t){let n,i;for(e=Array.isArray(e)?e:[e],i=e.length-1;i>=0;i--)for(n in t)e[i].prototype[n]=t[n]}function B(e){return function(...t){const n=t[t.length-1];return n&&n.constructor===Object&&!(n instanceof Array)?e.apply(this,t.slice(0,-1)).attr(n):e.apply(this,t)}}function go(){return this.parent().children()}function yo(){return this.parent().index(this)}function wo(){return this.siblings()[this.position()+1]}function _o(){return this.siblings()[this.position()-1]}function bo(){const e=this.position();return this.parent().add(this.remove(),e+1),this}function xo(){const e=this.position();return this.parent().add(this.remove(),e?e-1:0),this}function vo(){return this.parent().add(this.remove()),this}function Ao(){return this.parent().add(this.remove(),0),this}function So(e){e=V(e),e.remove();const t=this.position();return this.parent().add(e,t),this}function ko(e){e=V(e),e.remove();const t=this.position();return this.parent().add(e,t+1),this}function To(e){return e=V(e),e.before(this),this}function Io(e){return e=V(e),e.after(this),this}O("Dom",{siblings:go,position:yo,next:wo,prev:_o,forward:bo,backward:xo,front:vo,back:Ao,before:So,after:ko,insertBefore:To,insertAfter:Io});const Dr=/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,Oo=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,Eo=/rgb\((\d+),(\d+),(\d+)\)/,Co=/(#[a-z_][a-z0-9\-_]*)/i,No=/\)\s*,?\s*/,Mo=/\s/g,Qi=/^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i,tr=/^rgb\(/,er=/^(\s+)?$/,nr=/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Do=/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,St=/[\s,]+/,vi=/[MLHVCSQTAZ]/i;function Ro(){const e=this.attr("class");return e==null?[]:e.trim().split(St)}function Bo(e){return this.classes().indexOf(e)!==-1}function $o(e){if(!this.hasClass(e)){const t=this.classes();t.push(e),this.attr("class",t.join(" "))}return this}function Ho(e){return this.hasClass(e)&&this.attr("class",this.classes().filter(function(t){return t!==e}).join(" ")),this}function Po(e){return this.hasClass(e)?this.removeClass(e):this.addClass(e)}O("Dom",{classes:Ro,hasClass:Bo,addClass:$o,removeClass:Ho,toggleClass:Po});function Wo(e,t){const n={};if(arguments.length===0)return this.node.style.cssText.split(/\s*;\s*/).filter(function(i){return!!i.length}).forEach(function(i){const r=i.split(/\s*:\s*/);n[r[0]]=r[1]}),n;if(arguments.length<2){if(Array.isArray(e)){for(const i of e){const r=i;n[i]=this.node.style.getPropertyValue(r)}return n}if(typeof e=="string")return this.node.style.getPropertyValue(e);if(typeof e=="object")for(const i in e)this.node.style.setProperty(i,e[i]==null||er.test(e[i])?"":e[i])}return arguments.length===2&&this.node.style.setProperty(e,t==null||er.test(t)?"":t),this}function jo(){return this.css("display","")}function Lo(){return this.css("display","none")}function zo(){return this.css("display")!=="none"}O("Dom",{css:Wo,show:jo,hide:Lo,visible:zo});function Fo(e,t,n){if(e==null)return this.data(wi(co(this.node.attributes,i=>i.nodeName.indexOf("data-")===0),i=>i.nodeName.slice(5)));if(e instanceof Array){const i={};for(const r of e)i[r]=this.data(r);return i}else if(typeof e=="object")for(t in e)this.data(t,e[t]);else if(arguments.length<2)try{return JSON.parse(this.attr("data-"+e))}catch{return this.attr("data-"+e)}else this.attr("data-"+e,t===null?null:n===!0||typeof t=="string"||typeof t=="number"?t:JSON.stringify(t));return this}O("Dom",{data:Fo});function Ko(e,t){if(typeof arguments[0]=="object")for(const n in e)this.remember(n,e[n]);else{if(arguments.length===1)return this.memory()[e];this.memory()[e]=t}return this}function Uo(){if(arguments.length===0)this._memory={};else for(let e=arguments.length-1;e>=0;e--)delete this.memory()[arguments[e]];return this}function Yo(){return this._memory=this._memory||{}}O("Dom",{remember:Ko,forget:Uo,memory:Yo});function qo(e){return e.length===4?["#",e.substring(1,2),e.substring(1,2),e.substring(2,3),e.substring(2,3),e.substring(3,4),e.substring(3,4)].join(""):e}function Go(e){const t=Math.round(e),i=Math.max(0,Math.min(255,t)).toString(16);return i.length===1?"0"+i:i}function Vt(e,t){for(let n=t.length;n--;)if(e[t[n]]==null)return!1;return!0}function Zo(e,t){const n=Vt(e,"rgb")?{_a:e.r,_b:e.g,_c:e.b,_d:0,space:"rgb"}:Vt(e,"xyz")?{_a:e.x,_b:e.y,_c:e.z,_d:0,space:"xyz"}:Vt(e,"hsl")?{_a:e.h,_b:e.s,_c:e.l,_d:0,space:"hsl"}:Vt(e,"lab")?{_a:e.l,_b:e.a,_c:e.b,_d:0,space:"lab"}:Vt(e,"lch")?{_a:e.l,_b:e.c,_c:e.h,_d:0,space:"lch"}:Vt(e,"cmyk")?{_a:e.c,_b:e.m,_c:e.y,_d:e.k,space:"cmyk"}:{_a:0,_b:0,_c:0,space:"rgb"};return n.space=t||n.space,n}function Xo(e){return e==="lab"||e==="xyz"||e==="lch"}function On(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}class D{constructor(...t){this.init(...t)}static isColor(t){return t&&(t instanceof D||this.isRgb(t)||this.test(t))}static isRgb(t){return t&&typeof t.r=="number"&&typeof t.g=="number"&&typeof t.b=="number"}static random(t="vibrant",n){const{random:i,round:r,sin:s,PI:o}=Math;if(t==="vibrant"){const a=24*i()+57,c=38*i()+45,l=360*i();return new D(a,c,l,"lch")}else if(t==="sine"){n=n??i();const a=r(80*s(2*o*n/.5+.01)+150),c=r(50*s(2*o*n/.5+4.6)+200),l=r(100*s(2*o*n/.5+2.3)+150);return new D(a,c,l)}else if(t==="pastel"){const a=8*i()+86,c=17*i()+9,l=360*i();return new D(a,c,l,"lch")}else if(t==="dark"){const a=10+10*i(),c=50*i()+86,l=360*i();return new D(a,c,l,"lch")}else if(t==="rgb"){const a=255*i(),c=255*i(),l=255*i();return new D(a,c,l)}else if(t==="lab"){const a=100*i(),c=256*i()-128,l=256*i()-128;return new D(a,c,l,"lab")}else if(t==="grey"){const a=255*i();return new D(a,a,a)}else throw new Error("Unsupported random color mode")}static test(t){return typeof t=="string"&&(Qi.test(t)||tr.test(t))}cmyk(){const{_a:t,_b:n,_c:i}=this.rgb(),[r,s,o]=[t,n,i].map(f=>f/255),a=Math.min(1-r,1-s,1-o);if(a===1)return new D(0,0,0,1,"cmyk");const c=(1-r-a)/(1-a),l=(1-s-a)/(1-a),u=(1-o-a)/(1-a);return new D(c,l,u,a,"cmyk")}hsl(){const{_a:t,_b:n,_c:i}=this.rgb(),[r,s,o]=[t,n,i].map(g=>g/255),a=Math.max(r,s,o),c=Math.min(r,s,o),l=(a+c)/2,u=a===c,h=a-c,f=u?0:l>.5?h/(2-a-c):h/(a+c),p=u?0:a===r?((s-o)/h+(s<o?6:0))/6:a===s?((o-r)/h+2)/6:a===o?((r-s)/h+4)/6:0;return new D(360*p,100*f,100*l,"hsl")}init(t=0,n=0,i=0,r=0,s="rgb"){if(t=t||0,this.space)for(const h in this.space)delete this[this.space[h]];if(typeof t=="number")s=typeof r=="string"?r:s,r=typeof r=="string"?0:r,Object.assign(this,{_a:t,_b:n,_c:i,_d:r,space:s});else if(t instanceof Array)this.space=n||(typeof t[3]=="string"?t[3]:t[4])||"rgb",Object.assign(this,{_a:t[0],_b:t[1],_c:t[2],_d:t[3]||0});else if(t instanceof Object){const h=Zo(t,n);Object.assign(this,h)}else if(typeof t=="string")if(tr.test(t)){const h=t.replace(Mo,""),[f,p,d]=Eo.exec(h).slice(1,4).map(g=>parseInt(g));Object.assign(this,{_a:f,_b:p,_c:d,_d:0,space:"rgb"})}else if(Qi.test(t)){const h=g=>parseInt(g,16),[,f,p,d]=Oo.exec(qo(t)).map(h);Object.assign(this,{_a:f,_b:p,_c:d,_d:0,space:"rgb"})}else throw Error("Unsupported string format, can't construct Color");const{_a:o,_b:a,_c:c,_d:l}=this,u=this.space==="rgb"?{r:o,g:a,b:c}:this.space==="xyz"?{x:o,y:a,z:c}:this.space==="hsl"?{h:o,s:a,l:c}:this.space==="lab"?{l:o,a,b:c}:this.space==="lch"?{l:o,c:a,h:c}:this.space==="cmyk"?{c:o,m:a,y:c,k:l}:{};Object.assign(this,u)}lab(){const{x:t,y:n,z:i}=this.xyz(),r=116*n-16,s=500*(t-n),o=200*(n-i);return new D(r,s,o,"lab")}lch(){const{l:t,a:n,b:i}=this.lab(),r=Math.sqrt(n**2+i**2);let s=180*Math.atan2(i,n)/Math.PI;return s<0&&(s*=-1,s=360-s),new D(t,r,s,"lch")}rgb(){if(this.space==="rgb")return this;if(Xo(this.space)){let{x:t,y:n,z:i}=this;if(this.space==="lab"||this.space==="lch"){let{l:p,a:d,b:g}=this;if(this.space==="lch"){const{c:lt,h:yt}=this,Jt=Math.PI/180;d=lt*Math.cos(Jt*yt),g=lt*Math.sin(Jt*yt)}const y=(p+16)/116,S=d/500+y,b=y-g/200,H=16/116,ot=.008856,K=7.787;t=.95047*(S**3>ot?S**3:(S-H)/K),n=1*(y**3>ot?y**3:(y-H)/K),i=1.08883*(b**3>ot?b**3:(b-H)/K)}const r=t*3.2406+n*-1.5372+i*-.4986,s=t*-.9689+n*1.8758+i*.0415,o=t*.0557+n*-.204+i*1.057,a=Math.pow,c=.0031308,l=r>c?1.055*a(r,1/2.4)-.055:12.92*r,u=s>c?1.055*a(s,1/2.4)-.055:12.92*s,h=o>c?1.055*a(o,1/2.4)-.055:12.92*o;return new D(255*l,255*u,255*h)}else if(this.space==="hsl"){let{h:t,s:n,l:i}=this;if(t/=360,n/=100,i/=100,n===0)return i*=255,new D(i,i,i);const r=i<.5?i*(1+n):i+n-i*n,s=2*i-r,o=255*On(s,r,t+1/3),a=255*On(s,r,t),c=255*On(s,r,t-1/3);return new D(o,a,c)}else if(this.space==="cmyk"){const{c:t,m:n,y:i,k:r}=this,s=255*(1-Math.min(1,t*(1-r)+r)),o=255*(1-Math.min(1,n*(1-r)+r)),a=255*(1-Math.min(1,i*(1-r)+r));return new D(s,o,a)}else return this}toArray(){const{_a:t,_b:n,_c:i,_d:r,space:s}=this;return[t,n,i,r,s]}toHex(){const[t,n,i]=this._clamped().map(Go);return`#${t}${n}${i}`}toRgb(){const[t,n,i]=this._clamped();return`rgb(${t},${n},${i})`}toString(){return this.toHex()}xyz(){const{_a:t,_b:n,_c:i}=this.rgb(),[r,s,o]=[t,n,i].map(S=>S/255),a=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92,c=s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92,l=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92,u=(a*.4124+c*.3576+l*.1805)/.95047,h=(a*.2126+c*.7152+l*.0722)/1,f=(a*.0193+c*.1192+l*.9505)/1.08883,p=u>.008856?Math.pow(u,1/3):7.787*u+16/116,d=h>.008856?Math.pow(h,1/3):7.787*h+16/116,g=f>.008856?Math.pow(f,1/3):7.787*f+16/116;return new D(p,d,g,"xyz")}_clamped(){const{_a:t,_b:n,_c:i}=this.rgb(),{max:r,min:s,round:o}=Math,a=c=>r(0,s(o(c),255));return[t,n,i].map(a)}}class P{constructor(...t){this.init(...t)}clone(){return new P(this)}init(t,n){const i={x:0,y:0},r=Array.isArray(t)?{x:t[0],y:t[1]}:typeof t=="object"?{x:t.x,y:t.y}:{x:t,y:n};return this.x=r.x==null?i.x:r.x,this.y=r.y==null?i.y:r.y,this}toArray(){return[this.x,this.y]}transform(t){return this.clone().transformO(t)}transformO(t){T.isMatrixLike(t)||(t=new T(t));const{x:n,y:i}=this;return this.x=t.a*n+t.c*i+t.e,this.y=t.b*n+t.d*i+t.f,this}}function Jo(e,t){return new P(e,t).transformO(this.screenCTM().inverseO())}function Qt(e,t,n){return Math.abs(t-e)<1e-6}class T{constructor(...t){this.init(...t)}static formatTransforms(t){const n=t.flip==="both"||t.flip===!0,i=t.flip&&(n||t.flip==="x")?-1:1,r=t.flip&&(n||t.flip==="y")?-1:1,s=t.skew&&t.skew.length?t.skew[0]:isFinite(t.skew)?t.skew:isFinite(t.skewX)?t.skewX:0,o=t.skew&&t.skew.length?t.skew[1]:isFinite(t.skew)?t.skew:isFinite(t.skewY)?t.skewY:0,a=t.scale&&t.scale.length?t.scale[0]*i:isFinite(t.scale)?t.scale*i:isFinite(t.scaleX)?t.scaleX*i:i,c=t.scale&&t.scale.length?t.scale[1]*r:isFinite(t.scale)?t.scale*r:isFinite(t.scaleY)?t.scaleY*r:r,l=t.shear||0,u=t.rotate||t.theta||0,h=new P(t.origin||t.around||t.ox||t.originX,t.oy||t.originY),f=h.x,p=h.y,d=new P(t.position||t.px||t.positionX||NaN,t.py||t.positionY||NaN),g=d.x,y=d.y,S=new P(t.translate||t.tx||t.translateX,t.ty||t.translateY),b=S.x,H=S.y,ot=new P(t.relative||t.rx||t.relativeX,t.ry||t.relativeY),K=ot.x,lt=ot.y;return{scaleX:a,scaleY:c,skewX:s,skewY:o,shear:l,theta:u,rx:K,ry:lt,tx:b,ty:H,ox:f,oy:p,px:g,py:y}}static fromArray(t){return{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}}static isMatrixLike(t){return t.a!=null||t.b!=null||t.c!=null||t.d!=null||t.e!=null||t.f!=null}static matrixMultiply(t,n,i){const r=t.a*n.a+t.c*n.b,s=t.b*n.a+t.d*n.b,o=t.a*n.c+t.c*n.d,a=t.b*n.c+t.d*n.d,c=t.e+t.a*n.e+t.c*n.f,l=t.f+t.b*n.e+t.d*n.f;return i.a=r,i.b=s,i.c=o,i.d=a,i.e=c,i.f=l,i}around(t,n,i){return this.clone().aroundO(t,n,i)}aroundO(t,n,i){const r=t||0,s=n||0;return this.translateO(-r,-s).lmultiplyO(i).translateO(r,s)}clone(){return new T(this)}decompose(t=0,n=0){const i=this.a,r=this.b,s=this.c,o=this.d,a=this.e,c=this.f,l=i*o-r*s,u=l>0?1:-1,h=u*Math.sqrt(i*i+r*r),f=Math.atan2(u*r,u*i),p=180/Math.PI*f,d=Math.cos(f),g=Math.sin(f),y=(i*s+r*o)/l,S=s*h/(y*i-r)||o*h/(y*r+i),b=a-t+t*d*h+n*(y*d*h-g*S),H=c-n+t*g*h+n*(y*g*h+d*S);return{scaleX:h,scaleY:S,shear:y,rotate:p,translateX:b,translateY:H,originX:t,originY:n,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}equals(t){if(t===this)return!0;const n=new T(t);return Qt(this.a,n.a)&&Qt(this.b,n.b)&&Qt(this.c,n.c)&&Qt(this.d,n.d)&&Qt(this.e,n.e)&&Qt(this.f,n.f)}flip(t,n){return this.clone().flipO(t,n)}flipO(t,n){return t==="x"?this.scaleO(-1,1,n,0):t==="y"?this.scaleO(1,-1,0,n):this.scaleO(-1,-1,t,n||t)}init(t){const n=T.fromArray([1,0,0,1,0,0]);return t=t instanceof gt?t.matrixify():typeof t=="string"?T.fromArray(t.split(St).map(parseFloat)):Array.isArray(t)?T.fromArray(t):typeof t=="object"&&T.isMatrixLike(t)?t:typeof t=="object"?new T().transform(t):arguments.length===6?T.fromArray([].slice.call(arguments)):n,this.a=t.a!=null?t.a:n.a,this.b=t.b!=null?t.b:n.b,this.c=t.c!=null?t.c:n.c,this.d=t.d!=null?t.d:n.d,this.e=t.e!=null?t.e:n.e,this.f=t.f!=null?t.f:n.f,this}inverse(){return this.clone().inverseO()}inverseO(){const t=this.a,n=this.b,i=this.c,r=this.d,s=this.e,o=this.f,a=t*r-n*i;if(!a)throw new Error("Cannot invert "+this);const c=r/a,l=-n/a,u=-i/a,h=t/a,f=-(c*s+u*o),p=-(l*s+h*o);return this.a=c,this.b=l,this.c=u,this.d=h,this.e=f,this.f=p,this}lmultiply(t){return this.clone().lmultiplyO(t)}lmultiplyO(t){const n=this,i=t instanceof T?t:new T(t);return T.matrixMultiply(i,n,this)}multiply(t){return this.clone().multiplyO(t)}multiplyO(t){const n=this,i=t instanceof T?t:new T(t);return T.matrixMultiply(n,i,this)}rotate(t,n,i){return this.clone().rotateO(t,n,i)}rotateO(t,n=0,i=0){t=kn(t);const r=Math.cos(t),s=Math.sin(t),{a:o,b:a,c,d:l,e:u,f:h}=this;return this.a=o*r-a*s,this.b=a*r+o*s,this.c=c*r-l*s,this.d=l*r+c*s,this.e=u*r-h*s+i*s-n*r+n,this.f=h*r+u*s-n*s-i*r+i,this}scale(){return this.clone().scaleO(...arguments)}scaleO(t,n=t,i=0,r=0){arguments.length===3&&(r=i,i=n,n=t);const{a:s,b:o,c:a,d:c,e:l,f:u}=this;return this.a=s*t,this.b=o*n,this.c=a*t,this.d=c*n,this.e=l*t-i*t+i,this.f=u*n-r*n+r,this}shear(t,n,i){return this.clone().shearO(t,n,i)}shearO(t,n=0,i=0){const{a:r,b:s,c:o,d:a,e:c,f:l}=this;return this.a=r+s*t,this.c=o+a*t,this.e=c+l*t-i*t,this}skew(){return this.clone().skewO(...arguments)}skewO(t,n=t,i=0,r=0){arguments.length===3&&(r=i,i=n,n=t),t=kn(t),n=kn(n);const s=Math.tan(t),o=Math.tan(n),{a,b:c,c:l,d:u,e:h,f}=this;return this.a=a+c*s,this.b=c+a*o,this.c=l+u*s,this.d=u+l*o,this.e=h+f*s-r*s,this.f=f+h*o-i*o,this}skewX(t,n,i){return this.skew(t,0,n,i)}skewY(t,n,i){return this.skew(0,t,n,i)}toArray(){return[this.a,this.b,this.c,this.d,this.e,this.f]}toString(){return"matrix("+this.a+","+this.b+","+this.c+","+this.d+","+this.e+","+this.f+")"}transform(t){if(T.isMatrixLike(t))return new T(t).multiplyO(this);const n=T.formatTransforms(t),i=this,{x:r,y:s}=new P(n.ox,n.oy).transform(i),o=new T().translateO(n.rx,n.ry).lmultiplyO(i).translateO(-r,-s).scaleO(n.scaleX,n.scaleY).skewO(n.skewX,n.skewY).shearO(n.shear).rotateO(n.theta).translateO(r,s);if(isFinite(n.px)||isFinite(n.py)){const a=new P(r,s).transform(o),c=isFinite(n.px)?n.px-a.x:0,l=isFinite(n.py)?n.py-a.y:0;o.translateO(c,l)}return o.translateO(n.tx,n.ty),o}translate(t,n){return this.clone().translateO(t,n)}translateO(t,n){return this.e+=t||0,this.f+=n||0,this}valueOf(){return{a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}}function Vo(){return new T(this.node.getCTM())}function Qo(){try{if(typeof this.isRoot=="function"&&!this.isRoot()){const e=this.rect(1,1),t=e.node.getScreenCTM();return e.remove(),new T(t)}return new T(this.node.getScreenCTM())}catch{return console.warn(`Cannot get CTM from SVG node ${this.node.nodeName}. Is the element rendered?`),new T}}N(T,"Matrix");function kt(){if(!kt.nodes){const e=V().size(2,0);e.node.style.cssText=["opacity: 0","position: absolute","left: -100%","top: -100%","overflow: hidden"].join(";"),e.attr("focusable","false"),e.attr("aria-hidden","true");const t=e.path().node;kt.nodes={svg:e,path:t}}if(!kt.nodes.svg.node.parentNode){const e=C.document.body||C.document.documentElement;kt.nodes.svg.addTo(e)}return kt.nodes}function Rr(e){return!e.width&&!e.height&&!e.x&&!e.y}function ta(e){return e===C.document||(C.document.documentElement.contains||function(t){for(;t.parentNode;)t=t.parentNode;return t===C.document}).call(C.document.documentElement,e)}class F{constructor(...t){this.init(...t)}addOffset(){return this.x+=C.window.pageXOffset,this.y+=C.window.pageYOffset,new F(this)}init(t){const n=[0,0,0,0];return t=typeof t=="string"?t.split(St).map(parseFloat):Array.isArray(t)?t:typeof t=="object"?[t.left!=null?t.left:t.x,t.top!=null?t.top:t.y,t.width,t.height]:arguments.length===4?[].slice.call(arguments):n,this.x=t[0]||0,this.y=t[1]||0,this.width=this.w=t[2]||0,this.height=this.h=t[3]||0,this.x2=this.x+this.w,this.y2=this.y+this.h,this.cx=this.x+this.w/2,this.cy=this.y+this.h/2,this}isNulled(){return Rr(this)}merge(t){const n=Math.min(this.x,t.x),i=Math.min(this.y,t.y),r=Math.max(this.x+this.width,t.x+t.width)-n,s=Math.max(this.y+this.height,t.y+t.height)-i;return new F(n,i,r,s)}toArray(){return[this.x,this.y,this.width,this.height]}toString(){return this.x+" "+this.y+" "+this.width+" "+this.height}transform(t){t instanceof T||(t=new T(t));let n=1/0,i=-1/0,r=1/0,s=-1/0;return[new P(this.x,this.y),new P(this.x2,this.y),new P(this.x,this.y2),new P(this.x2,this.y2)].forEach(function(a){a=a.transform(t),n=Math.min(n,a.x),i=Math.max(i,a.x),r=Math.min(r,a.y),s=Math.max(s,a.y)}),new F(n,r,i-n,s-r)}}function Br(e,t,n){let i;try{if(i=t(e.node),Rr(i)&&!ta(e.node))throw new Error("Element not in the dom")}catch{i=n(e)}return i}function ea(){const n=Br(this,r=>r.getBBox(),r=>{try{const s=r.clone().addTo(kt().svg).show(),o=s.node.getBBox();return s.remove(),o}catch(s){throw new Error(`Getting bbox of element "${r.node.nodeName}" is not possible: ${s.toString()}`)}});return new F(n)}function na(e){const i=Br(this,s=>s.getBoundingClientRect(),s=>{throw new Error(`Getting rbox of element "${s.node.nodeName}" is not possible`)}),r=new F(i);return e?r.transform(e.screenCTM().inverseO()):r.addOffset()}function ia(e,t){const n=this.bbox();return e>n.x&&t>n.y&&e<n.x+n.width&&t<n.y+n.height}O({viewbox:{viewbox(e,t,n,i){return e==null?new F(this.attr("viewBox")):this.attr("viewBox",new F(e,t,n,i))},zoom(e,t){let{width:n,height:i}=this.attr(["width","height"]);if((!n&&!i||typeof n=="string"||typeof i=="string")&&(n=this.node.clientWidth,i=this.node.clientHeight),!n||!i)throw new Error("Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element");const r=this.viewbox(),s=n/r.width,o=i/r.height,a=Math.min(s,o);if(e==null)return a;let c=a/e;c===1/0&&(c=Number.MAX_SAFE_INTEGER/100),t=t||new P(n/2/s+r.x,i/2/o+r.y);const l=new F(r).transform(new T({scale:c,origin:t}));return this.viewbox(l)}}});N(F,"Box");class Ut extends Array{constructor(t=[],...n){if(super(t,...n),typeof t=="number")return this;this.length=0,this.push(...t)}}E([Ut],{each(e,...t){return typeof e=="function"?this.map((n,i,r)=>e.call(n,n,i,r)):this.map(n=>n[e](...t))},toArray(){return Array.prototype.concat.apply([],this)}});const ra=["toArray","constructor","each"];Ut.extend=function(e){e=e.reduce((t,n)=>(ra.includes(n)||n[0]==="_"||(n in Array.prototype&&(t["$"+n]=Array.prototype[n]),t[n]=function(...i){return this.each(n,...i)}),t),{}),E([Ut],e)};function be(e,t){return new Ut(wi((t||C.document).querySelectorAll(e),function(n){return ct(n)}))}function sa(e){return be(e,this.node)}function oa(e){return ct(this.node.querySelector(e))}let aa=0;const $r={};function Hr(e){let t=e.getEventHolder();return t===C.window&&(t=$r),t.events||(t.events={}),t.events}function Ai(e){return e.getEventTarget()}function ca(e){let t=e.getEventHolder();t===C.window&&(t=$r),t.events&&(t.events={})}function Fn(e,t,n,i,r){const s=n.bind(i||e),o=V(e),a=Hr(o),c=Ai(o);t=Array.isArray(t)?t:t.split(St),n._svgjsListenerId||(n._svgjsListenerId=++aa),t.forEach(function(l){const u=l.split(".")[0],h=l.split(".")[1]||"*";a[u]=a[u]||{},a[u][h]=a[u][h]||{},a[u][h][n._svgjsListenerId]=s,c.addEventListener(u,s,r||!1)})}function ie(e,t,n,i){const r=V(e),s=Hr(r),o=Ai(r);typeof n=="function"&&(n=n._svgjsListenerId,!n)||(t=Array.isArray(t)?t:(t||"").split(St),t.forEach(function(a){const c=a&&a.split(".")[0],l=a&&a.split(".")[1];let u,h;if(n)s[c]&&s[c][l||"*"]&&(o.removeEventListener(c,s[c][l||"*"][n],i||!1),delete s[c][l||"*"][n]);else if(c&&l){if(s[c]&&s[c][l]){for(h in s[c][l])ie(o,[c,l].join("."),h);delete s[c][l]}}else if(l)for(a in s)for(u in s[a])l===u&&ie(o,[a,l].join("."));else if(c){if(s[c]){for(u in s[c])ie(o,[c,u].join("."));delete s[c]}}else{for(a in s)ie(o,a);ca(r)}}))}function la(e,t,n,i){const r=Ai(e);return t instanceof C.window.Event||(t=new C.window.CustomEvent(t,{detail:n,cancelable:!0,...i})),r.dispatchEvent(t),t}class Le extends bi{addEventListener(){}dispatch(t,n,i){return la(this,t,n,i)}dispatchEvent(t){const n=this.getEventHolder().events;if(!n)return!0;const i=n[t.type];for(const r in i)for(const s in i[r])i[r][s](t);return!t.defaultPrevented}fire(t,n,i){return this.dispatch(t,n,i),this}getEventHolder(){return this}getEventTarget(){return this}off(t,n,i){return ie(this,t,n,i),this}on(t,n,i,r){return Fn(this,t,n,i,r),this}removeEventListener(){}}N(Le,"EventTarget");function ir(){}const ke={duration:400,ease:">",delay:0},ua={"fill-opacity":1,"stroke-opacity":1,"stroke-width":0,"stroke-linejoin":"miter","stroke-linecap":"butt",fill:"#000000",stroke:"#000000",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,"stop-opacity":1,"stop-color":"#000000","text-anchor":"start"};class ue extends Array{constructor(...t){super(...t),this.init(...t)}clone(){return new this.constructor(this)}init(t){return typeof t=="number"?this:(this.length=0,this.push(...this.parse(t)),this)}parse(t=[]){return t instanceof Array?t:t.trim().split(St).map(parseFloat)}toArray(){return Array.prototype.concat.apply([],this)}toSet(){return new Set(this)}toString(){return this.join(" ")}valueOf(){const t=[];return t.push(...this),t}}class I{constructor(...t){this.init(...t)}convert(t){return new I(this.value,t)}divide(t){return t=new I(t),new I(this/t,this.unit||t.unit)}init(t,n){return n=Array.isArray(t)?t[1]:n,t=Array.isArray(t)?t[0]:t,this.value=0,this.unit=n||"",typeof t=="number"?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:typeof t=="string"?(n=t.match(Dr),n&&(this.value=parseFloat(n[1]),n[5]==="%"?this.value/=100:n[5]==="s"&&(this.value*=1e3),this.unit=n[5])):t instanceof I&&(this.value=t.valueOf(),this.unit=t.unit),this}minus(t){return t=new I(t),new I(this-t,this.unit||t.unit)}plus(t){return t=new I(t),new I(this+t,this.unit||t.unit)}times(t){return t=new I(t),new I(this*t,this.unit||t.unit)}toArray(){return[this.value,this.unit]}toJSON(){return this.toString()}toString(){return(this.unit==="%"?~~(this.value*1e8)/1e6:this.unit==="s"?this.value/1e3:this.value)+this.unit}valueOf(){return this.value}}const ha=new Set(["fill","stroke","color","bgcolor","stop-color","flood-color","lighting-color"]),Pr=[];function fa(e){Pr.push(e)}function da(e,t,n){if(e==null){e={},t=this.node.attributes;for(const i of t)e[i.nodeName]=nr.test(i.nodeValue)?parseFloat(i.nodeValue):i.nodeValue;return e}else{if(e instanceof Array)return e.reduce((i,r)=>(i[r]=this.attr(r),i),{});if(typeof e=="object"&&e.constructor===Object)for(t in e)this.attr(t,e[t]);else if(t===null)this.node.removeAttribute(e);else{if(t==null)return t=this.node.getAttribute(e),t==null?ua[e]:nr.test(t)?parseFloat(t):t;t=Pr.reduce((i,r)=>r(e,i,this),t),typeof t=="number"?t=new I(t):ha.has(e)&&D.isColor(t)?t=new D(t):t.constructor===Array&&(t=new ue(t)),e==="leading"?this.leading&&this.leading(t):typeof n=="string"?this.node.setAttributeNS(n,e,t.toString()):this.node.setAttribute(e,t.toString()),this.rebuild&&(e==="font-size"||e==="x")&&this.rebuild()}}return this}class Nt extends Le{constructor(t,n){super(),this.node=t,this.type=t.nodeName,n&&t!==n&&this.attr(n)}add(t,n){return t=V(t),t.removeNamespace&&this.node instanceof C.window.SVGElement&&t.removeNamespace(),n==null?this.node.appendChild(t.node):t.node!==this.node.childNodes[n]&&this.node.insertBefore(t.node,this.node.childNodes[n]),this}addTo(t,n){return V(t).put(this,n)}children(){return new Ut(wi(this.node.children,function(t){return ct(t)}))}clear(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return this}clone(t=!0,n=!0){this.writeDataToDom();let i=this.node.cloneNode(t);return n&&(i=Mr(i)),new this.constructor(i)}each(t,n){const i=this.children();let r,s;for(r=0,s=i.length;r<s;r++)t.apply(i[r],[r,i]),n&&i[r].each(t,n);return this}element(t,n){return this.put(new Nt(Ne(t),n))}first(){return ct(this.node.firstChild)}get(t){return ct(this.node.childNodes[t])}getEventHolder(){return this.node}getEventTarget(){return this.node}has(t){return this.index(t)>=0}html(t,n){return this.xml(t,n,ho)}id(t){return typeof t>"u"&&!this.node.id&&(this.node.id=Nr(this.type)),this.attr("id",t)}index(t){return[].slice.call(this.node.childNodes).indexOf(t.node)}last(){return ct(this.node.lastChild)}matches(t){const n=this.node,i=n.matches||n.matchesSelector||n.msMatchesSelector||n.mozMatchesSelector||n.webkitMatchesSelector||n.oMatchesSelector||null;return i&&i.call(n,t)}parent(t){let n=this;if(!n.node.parentNode)return null;if(n=ct(n.node.parentNode),!t)return n;do if(typeof t=="string"?n.matches(t):n instanceof t)return n;while(n=ct(n.node.parentNode));return n}put(t,n){return t=V(t),this.add(t,n),t}putIn(t,n){return V(t).add(this,n)}remove(){return this.parent()&&this.parent().removeElement(this),this}removeElement(t){return this.node.removeChild(t.node),this}replace(t){return t=V(t),this.node.parentNode&&this.node.parentNode.replaceChild(t.node,this.node),t}round(t=2,n=null){const i=10**t,r=this.attr(n);for(const s in r)typeof r[s]=="number"&&(r[s]=Math.round(r[s]*i)/i);return this.attr(r),this}svg(t,n){return this.xml(t,n,_i)}toString(){return this.id()}words(t){return this.node.textContent=t,this}wrap(t){const n=this.parent();if(!n)return this.addTo(t);const i=n.index(this);return n.put(t,i).put(this)}writeDataToDom(){return this.each(function(){this.writeDataToDom()}),this}xml(t,n,i){if(typeof t=="boolean"&&(i=n,n=t,t=null),t==null||typeof t=="function"){n=n??!0,this.writeDataToDom();let a=this;if(t!=null){if(a=ct(a.node.cloneNode(!0)),n){const c=t(a);if(a=c||a,c===!1)return""}a.each(function(){const c=t(this),l=c||this;c===!1?this.remove():c&&this!==l&&this.replace(l)},!0)}return n?a.node.outerHTML:a.node.innerHTML}n=n??!1;const r=Ne("wrapper",i),s=C.document.createDocumentFragment();r.innerHTML=t;for(let a=r.children.length;a--;)s.appendChild(r.firstElementChild);const o=this.parent();return n?this.replace(s)&&o:this.add(s)}}E(Nt,{attr:da,find:sa,findOne:oa});N(Nt,"Dom");class gt extends Nt{constructor(t,n){super(t,n),this.dom={},this.node.instance=this,(t.hasAttribute("data-svgjs")||t.hasAttribute("svgjs:data"))&&this.setData(JSON.parse(t.getAttribute("data-svgjs"))??JSON.parse(t.getAttribute("svgjs:data"))??{})}center(t,n){return this.cx(t).cy(n)}cx(t){return t==null?this.x()+this.width()/2:this.x(t-this.width()/2)}cy(t){return t==null?this.y()+this.height()/2:this.y(t-this.height()/2)}defs(){const t=this.root();return t&&t.defs()}dmove(t,n){return this.dx(t).dy(n)}dx(t=0){return this.x(new I(t).plus(this.x()))}dy(t=0){return this.y(new I(t).plus(this.y()))}getEventHolder(){return this}height(t){return this.attr("height",t)}move(t,n){return this.x(t).y(n)}parents(t=this.root()){const n=typeof t=="string";n||(t=V(t));const i=new Ut;let r=this;for(;(r=r.parent())&&r.node!==C.document&&r.nodeName!=="#document-fragment"&&(i.push(r),!(!n&&r.node===t.node||n&&r.matches(t)));)if(r.node===this.root().node)return null;return i}reference(t){if(t=this.attr(t),!t)return null;const n=(t+"").match(Co);return n?V(n[1]):null}root(){const t=this.parent(po(xi));return t&&t.root()}setData(t){return this.dom=t,this}size(t,n){const i=_e(this,t,n);return this.width(new I(i.width)).height(new I(i.height))}width(t){return this.attr("width",t)}writeDataToDom(){return Cr(this,this.dom),super.writeDataToDom()}x(t){return this.attr("x",t)}y(t){return this.attr("y",t)}}E(gt,{bbox:ea,rbox:na,inside:ia,point:Jo,ctm:Vo,screenCTM:Qo});N(gt,"Element");const ve={stroke:["color","width","opacity","linecap","linejoin","miterlimit","dasharray","dashoffset"],fill:["color","opacity","rule"],prefix:function(e,t){return t==="color"?e:e+"-"+t}};["fill","stroke"].forEach(function(e){const t={};let n;t[e]=function(i){if(typeof i>"u")return this.attr(e);if(typeof i=="string"||i instanceof D||D.isRgb(i)||i instanceof gt)this.attr(e,i);else for(n=ve[e].length-1;n>=0;n--)i[ve[e][n]]!=null&&this.attr(ve.prefix(e,ve[e][n]),i[ve[e][n]]);return this},O(["Element","Runner"],t)});O(["Element","Runner"],{matrix:function(e,t,n,i,r,s){return e==null?new T(this):this.attr("transform",new T(e,t,n,i,r,s))},rotate:function(e,t,n){return this.transform({rotate:e,ox:t,oy:n},!0)},skew:function(e,t,n,i){return arguments.length===1||arguments.length===3?this.transform({skew:e,ox:t,oy:n},!0):this.transform({skew:[e,t],ox:n,oy:i},!0)},shear:function(e,t,n){return this.transform({shear:e,ox:t,oy:n},!0)},scale:function(e,t,n,i){return arguments.length===1||arguments.length===3?this.transform({scale:e,ox:t,oy:n},!0):this.transform({scale:[e,t],ox:n,oy:i},!0)},translate:function(e,t){return this.transform({translate:[e,t]},!0)},relative:function(e,t){return this.transform({relative:[e,t]},!0)},flip:function(e="both",t="center"){return"xybothtrue".indexOf(e)===-1&&(t=e,e="both"),this.transform({flip:e,origin:t},!0)},opacity:function(e){return this.attr("opacity",e)}});O("radius",{radius:function(e,t=e){return(this._element||this).type==="radialGradient"?this.attr("r",new I(e)):this.rx(e).ry(t)}});O("Path",{length:function(){return this.node.getTotalLength()},pointAt:function(e){return new P(this.node.getPointAtLength(e))}});O(["Element","Runner"],{font:function(e,t){if(typeof e=="object"){for(t in e)this.font(t,e[t]);return this}return e==="leading"?this.leading(t):e==="anchor"?this.attr("text-anchor",t):e==="size"||e==="family"||e==="weight"||e==="stretch"||e==="variant"||e==="style"?this.attr("font-"+e,t):this.attr(e,t)}});const pa=["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","mouseenter","mouseleave","touchstart","touchmove","touchleave","touchend","touchcancel","contextmenu","wheel","pointerdown","pointermove","pointerup","pointerleave","pointercancel"].reduce(function(e,t){const n=function(i){return i===null?this.off(t):this.on(t,i),this};return e[t]=n,e},{});O("Element",pa);function ma(){return this.attr("transform",null)}function ga(){return(this.attr("transform")||"").split(No).slice(0,-1).map(function(t){const n=t.trim().split("(");return[n[0],n[1].split(St).map(function(i){return parseFloat(i)})]}).reverse().reduce(function(t,n){return n[0]==="matrix"?t.lmultiply(T.fromArray(n[1])):t[n[0]].apply(t,n[1])},new T)}function ya(e,t){if(this===e)return this;if(zn(this.node))return this.addTo(e,t);const n=this.screenCTM(),i=e.screenCTM().inverse();return this.addTo(e,t).untransform().transform(i.multiply(n)),this}function wa(e){return this.toParent(this.root(),e)}function _a(e,t){if(e==null||typeof e=="string"){const r=new T(this).decompose();return e==null?r:r[e]}T.isMatrixLike(e)||(e={...e,origin:Ln(e,this)});const n=t===!0?this:t||!1,i=new T(n).transform(e);return this.attr("transform",i)}O("Element",{untransform:ma,matrixify:ga,toParent:ya,toRoot:wa,transform:_a});class et extends gt{flatten(){return this.each(function(){if(this instanceof et)return this.flatten().ungroup()}),this}ungroup(t=this.parent(),n=t.index(this)){return n=n===-1?t.children().length:n,this.each(function(i,r){return r[r.length-i-1].toParent(t,n)}),this.remove()}}N(et,"Container");class Si extends et{constructor(t,n=t){super($("defs",t),n)}flatten(){return this}ungroup(){return this}}N(Si,"Defs");class st extends gt{}N(st,"Shape");function ki(e){return this.attr("rx",e)}function Ti(e){return this.attr("ry",e)}function Wr(e){return e==null?this.cx()-this.rx():this.cx(e+this.rx())}function jr(e){return e==null?this.cy()-this.ry():this.cy(e+this.ry())}function Lr(e){return this.attr("cx",e)}function zr(e){return this.attr("cy",e)}function Fr(e){return e==null?this.rx()*2:this.rx(new I(e).divide(2))}function Kr(e){return e==null?this.ry()*2:this.ry(new I(e).divide(2))}const ba=Object.freeze(Object.defineProperty({__proto__:null,cx:Lr,cy:zr,height:Kr,rx:ki,ry:Ti,width:Fr,x:Wr,y:jr},Symbol.toStringTag,{value:"Module"}));class wn extends st{constructor(t,n=t){super($("ellipse",t),n)}size(t,n){const i=_e(this,t,n);return this.rx(new I(i.width).divide(2)).ry(new I(i.height).divide(2))}}E(wn,ba);O("Container",{ellipse:B(function(e=0,t=e){return this.put(new wn).size(e,t).move(0,0)})});N(wn,"Ellipse");class Ur extends Nt{constructor(t=C.document.createDocumentFragment()){super(t)}xml(t,n,i){if(typeof t=="boolean"&&(i=n,n=t,t=null),t==null||typeof t=="function"){const r=new Nt(Ne("wrapper",i));return r.add(this.node.cloneNode(!0)),r.xml(!1,i)}return super.xml(t,!1,i)}}N(Ur,"Fragment");function Yr(e,t){return(this._element||this).type==="radialGradient"?this.attr({fx:new I(e),fy:new I(t)}):this.attr({x1:new I(e),y1:new I(t)})}function qr(e,t){return(this._element||this).type==="radialGradient"?this.attr({cx:new I(e),cy:new I(t)}):this.attr({x2:new I(e),y2:new I(t)})}const xa=Object.freeze(Object.defineProperty({__proto__:null,from:Yr,to:qr},Symbol.toStringTag,{value:"Module"}));class ze extends et{constructor(t,n){super($(t+"Gradient",typeof t=="string"?null:t),n)}attr(t,n,i){return t==="transform"&&(t="gradientTransform"),super.attr(t,n,i)}bbox(){return new F}targets(){return be("svg [fill*="+this.id()+"]")}toString(){return this.url()}update(t){return this.clear(),typeof t=="function"&&t.call(this,this),this}url(){return"url(#"+this.id()+")"}}E(ze,xa);O({Container:{gradient(...e){return this.defs().gradient(...e)}},Defs:{gradient:B(function(e,t){return this.put(new ze(e)).update(t)})}});N(ze,"Gradient");class Me extends et{constructor(t,n=t){super($("pattern",t),n)}attr(t,n,i){return t==="transform"&&(t="patternTransform"),super.attr(t,n,i)}bbox(){return new F}targets(){return be("svg [fill*="+this.id()+"]")}toString(){return this.url()}update(t){return this.clear(),typeof t=="function"&&t.call(this,this),this}url(){return"url(#"+this.id()+")"}}O({Container:{pattern(...e){return this.defs().pattern(...e)}},Defs:{pattern:B(function(e,t,n){return this.put(new Me).update(n).attr({x:0,y:0,width:e,height:t,patternUnits:"userSpaceOnUse"})})}});N(Me,"Pattern");class Fe extends st{constructor(t,n=t){super($("image",t),n)}load(t,n){if(!t)return this;const i=new C.window.Image;return Fn(i,"load",function(r){const s=this.parent(Me);this.width()===0&&this.height()===0&&this.size(i.width,i.height),s instanceof Me&&s.width()===0&&s.height()===0&&s.size(this.width(),this.height()),typeof n=="function"&&n.call(this,r)},this),Fn(i,"load error",function(){ie(i)}),this.attr("href",i.src=t,je)}}fa(function(e,t,n){return(e==="fill"||e==="stroke")&&Do.test(t)&&(t=n.root().defs().image(t)),t instanceof Fe&&(t=n.root().defs().pattern(0,0,i=>{i.add(t)})),t});O({Container:{image:B(function(e,t){return this.put(new Fe).size(0,0).load(e,t)})}});N(Fe,"Image");class Mt extends ue{bbox(){let t=-1/0,n=-1/0,i=1/0,r=1/0;return this.forEach(function(s){t=Math.max(s[0],t),n=Math.max(s[1],n),i=Math.min(s[0],i),r=Math.min(s[1],r)}),new F(i,r,t-i,n-r)}move(t,n){const i=this.bbox();if(t-=i.x,n-=i.y,!isNaN(t)&&!isNaN(n))for(let r=this.length-1;r>=0;r--)this[r]=[this[r][0]+t,this[r][1]+n];return this}parse(t=[0,0]){const n=[];t instanceof Array?t=Array.prototype.concat.apply([],t):t=t.trim().split(St).map(parseFloat),t.length%2!==0&&t.pop();for(let i=0,r=t.length;i<r;i=i+2)n.push([t[i],t[i+1]]);return n}size(t,n){let i;const r=this.bbox();for(i=this.length-1;i>=0;i--)r.width&&(this[i][0]=(this[i][0]-r.x)*t/r.width+r.x),r.height&&(this[i][1]=(this[i][1]-r.y)*n/r.height+r.y);return this}toLine(){return{x1:this[0][0],y1:this[0][1],x2:this[1][0],y2:this[1][1]}}toString(){const t=[];for(let n=0,i=this.length;n<i;n++)t.push(this[n].join(","));return t.join(" ")}transform(t){return this.clone().transformO(t)}transformO(t){T.isMatrixLike(t)||(t=new T(t));for(let n=this.length;n--;){const[i,r]=this[n];this[n][0]=t.a*i+t.c*r+t.e,this[n][1]=t.b*i+t.d*r+t.f}return this}}const va=Mt;function Aa(e){return e==null?this.bbox().x:this.move(e,this.bbox().y)}function Sa(e){return e==null?this.bbox().y:this.move(this.bbox().x,e)}function ka(e){const t=this.bbox();return e==null?t.width:this.size(e,t.height)}function Ta(e){const t=this.bbox();return e==null?t.height:this.size(t.width,e)}const Ii=Object.freeze(Object.defineProperty({__proto__:null,MorphArray:va,height:Ta,width:ka,x:Aa,y:Sa},Symbol.toStringTag,{value:"Module"}));class De extends st{constructor(t,n=t){super($("line",t),n)}array(){return new Mt([[this.attr("x1"),this.attr("y1")],[this.attr("x2"),this.attr("y2")]])}move(t,n){return this.attr(this.array().move(t,n).toLine())}plot(t,n,i,r){return t==null?this.array():(typeof n<"u"?t={x1:t,y1:n,x2:i,y2:r}:t=new Mt(t).toLine(),this.attr(t))}size(t,n){const i=_e(this,t,n);return this.attr(this.array().size(i.width,i.height).toLine())}}E(De,Ii);O({Container:{line:B(function(...e){return De.prototype.plot.apply(this.put(new De),e[0]!=null?e:[0,0,0,0])})}});N(De,"Line");class sn extends et{constructor(t,n=t){super($("marker",t),n)}height(t){return this.attr("markerHeight",t)}orient(t){return this.attr("orient",t)}ref(t,n){return this.attr("refX",t).attr("refY",n)}toString(){return"url(#"+this.id()+")"}update(t){return this.clear(),typeof t=="function"&&t.call(this,this),this}width(t){return this.attr("markerWidth",t)}}O({Container:{marker(...e){return this.defs().marker(...e)}},Defs:{marker:B(function(e,t,n){return this.put(new sn).size(e,t).ref(e/2,t/2).viewbox(0,0,e,t).attr("orient","auto").update(n)})},marker:{marker(e,t,n,i){let r=["marker"];return e!=="all"&&r.push(e),r=r.join("-"),e=arguments[1]instanceof sn?arguments[1]:this.defs().marker(t,n,i),this.attr(r,e)}}});N(sn,"Marker");function re(e,t){return function(n){return n==null?this[e]:(this[e]=n,t&&t.call(this),this)}}const Ia={"-":function(e){return e},"<>":function(e){return-Math.cos(e*Math.PI)/2+.5},">":function(e){return Math.sin(e*Math.PI/2)},"<":function(e){return-Math.cos(e*Math.PI/2)+1},bezier:function(e,t,n,i){return function(r){return r<0?e>0?t/e*r:n>0?i/n*r:0:r>1?n<1?(1-i)/(1-n)*r+(i-n)/(1-n):e<1?(1-t)/(1-e)*r+(t-e)/(1-e):1:3*r*(1-r)**2*t+3*r**2*(1-r)*i+r**3}},steps:function(e,t="end"){t=t.split("-").reverse()[0];let n=e;return t==="none"?--n:t==="both"&&++n,(i,r=!1)=>{let s=Math.floor(i*e);const o=i*s%1===0;return(t==="start"||t==="both")&&++s,r&&o&&--s,i>=0&&s<0&&(s=0),i<=1&&s>n&&(s=n),s/n}}};class Oi{done(){return!1}}class Kn extends Oi{constructor(t=ke.ease){super(),this.ease=Ia[t]||t}step(t,n,i){return typeof t!="number"?i<1?t:n:t+(n-t)*this.ease(i)}}let on=class extends Oi{constructor(t){super(),this.stepper=t}done(t){return t.done}step(t,n,i,r){return this.stepper(t,n,i,r)}};function rr(){const e=(this._duration||500)/1e3,t=this._overshoot||0,n=1e-10,i=Math.PI,r=Math.log(t/100+n),s=-r/Math.sqrt(i*i+r*r),o=3.9/(s*e);this.d=2*s*o,this.k=o*o}class Oa extends on{constructor(t=500,n=0){super(),this.duration(t).overshoot(n)}step(t,n,i,r){if(typeof t=="string")return t;if(r.done=i===1/0,i===1/0)return n;if(i===0)return t;i>100&&(i=16),i/=1e3;const s=r.velocity||0,o=-this.d*s-this.k*(t-n),a=t+s*i+o*i*i/2;return r.velocity=s+o*i,r.done=Math.abs(n-a)+Math.abs(s)<.002,r.done?n:a}}E(Oa,{duration:re("_duration",rr),overshoot:re("_overshoot",rr)});class Ea extends on{constructor(t=.1,n=.01,i=0,r=1e3){super(),this.p(t).i(n).d(i).windup(r)}step(t,n,i,r){if(typeof t=="string")return t;if(r.done=i===1/0,i===1/0)return n;if(i===0)return t;const s=n-t;let o=(r.integral||0)+s*i;const a=(s-(r.error||0))/i,c=this._windup;return c!==!1&&(o=Math.max(-c,Math.min(o,c))),r.error=s,r.integral=o,r.done=Math.abs(s)<.001,r.done?n:t+(this.P*s+this.I*o+this.D*a)}}E(Ea,{windup:re("_windup"),p:re("P"),i:re("I"),d:re("D")});const Ca={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0},Un={M:function(e,t,n){return t.x=n.x=e[0],t.y=n.y=e[1],["M",t.x,t.y]},L:function(e,t){return t.x=e[0],t.y=e[1],["L",e[0],e[1]]},H:function(e,t){return t.x=e[0],["H",e[0]]},V:function(e,t){return t.y=e[0],["V",e[0]]},C:function(e,t){return t.x=e[4],t.y=e[5],["C",e[0],e[1],e[2],e[3],e[4],e[5]]},S:function(e,t){return t.x=e[2],t.y=e[3],["S",e[0],e[1],e[2],e[3]]},Q:function(e,t){return t.x=e[2],t.y=e[3],["Q",e[0],e[1],e[2],e[3]]},T:function(e,t){return t.x=e[0],t.y=e[1],["T",e[0],e[1]]},Z:function(e,t,n){return t.x=n.x,t.y=n.y,["Z"]},A:function(e,t){return t.x=e[5],t.y=e[6],["A",e[0],e[1],e[2],e[3],e[4],e[5],e[6]]}},En="mlhvqtcsaz".split("");for(let e=0,t=En.length;e<t;++e)Un[En[e]]=function(n){return function(i,r,s){if(n==="H")i[0]=i[0]+r.x;else if(n==="V")i[0]=i[0]+r.y;else if(n==="A")i[5]=i[5]+r.x,i[6]=i[6]+r.y;else for(let o=0,a=i.length;o<a;++o)i[o]=i[o]+(o%2?r.y:r.x);return Un[n](i,r,s)}}(En[e].toUpperCase());function Na(e){const t=e.segment[0];return Un[t](e.segment.slice(1),e.p,e.p0)}function Yn(e){return e.segment.length&&e.segment.length-1===Ca[e.segment[0].toUpperCase()]}function Ma(e,t){e.inNumber&&Pt(e,!1);const n=vi.test(t);if(n)e.segment=[t];else{const i=e.lastCommand,r=i.toLowerCase(),s=i===r;e.segment=[r==="m"?s?"l":"L":i]}return e.inSegment=!0,e.lastCommand=e.segment[0],n}function Pt(e,t){if(!e.inNumber)throw new Error("Parser Error");e.number&&e.segment.push(parseFloat(e.number)),e.inNumber=t,e.number="",e.pointSeen=!1,e.hasExponent=!1,Yn(e)&&qn(e)}function qn(e){e.inSegment=!1,e.absolute&&(e.segment=Na(e)),e.segments.push(e.segment)}function Da(e){if(!e.segment.length)return!1;const t=e.segment[0].toUpperCase()==="A",n=e.segment.length;return t&&(n===4||n===5)}function Ra(e){return e.lastToken.toUpperCase()==="E"}const Ba=new Set([" ",","," ",`
|
|
2
|
+
`,"\r","\f"]);function $a(e,t=!0){let n=0,i="";const r={segment:[],inNumber:!1,number:"",lastToken:"",inSegment:!1,segments:[],pointSeen:!1,hasExponent:!1,absolute:t,p0:new P,p:new P};for(;r.lastToken=i,i=e.charAt(n++);)if(!(!r.inSegment&&Ma(r,i))){if(i==="."){if(r.pointSeen||r.hasExponent){Pt(r,!1),--n;continue}r.inNumber=!0,r.pointSeen=!0,r.number+=i;continue}if(!isNaN(parseInt(i))){if(r.number==="0"||Da(r)){r.inNumber=!0,r.number=i,Pt(r,!0);continue}r.inNumber=!0,r.number+=i;continue}if(Ba.has(i)){r.inNumber&&Pt(r,!1);continue}if(i==="-"||i==="+"){if(r.inNumber&&!Ra(r)){Pt(r,!1),--n;continue}r.number+=i,r.inNumber=!0;continue}if(i.toUpperCase()==="E"){r.number+=i,r.hasExponent=!0;continue}if(vi.test(i)){if(r.inNumber)Pt(r,!1);else if(Yn(r))qn(r);else throw new Error("parser Error");--n}}return r.inNumber&&Pt(r,!1),r.inSegment&&Yn(r)&&qn(r),r.segments}function Ha(e){let t="";for(let n=0,i=e.length;n<i;n++)t+=e[n][0],e[n][1]!=null&&(t+=e[n][1],e[n][2]!=null&&(t+=" ",t+=e[n][2],e[n][3]!=null&&(t+=" ",t+=e[n][3],t+=" ",t+=e[n][4],e[n][5]!=null&&(t+=" ",t+=e[n][5],t+=" ",t+=e[n][6],e[n][7]!=null&&(t+=" ",t+=e[n][7])))));return t+" "}class Yt extends ue{bbox(){return kt().path.setAttribute("d",this.toString()),new F(kt.nodes.path.getBBox())}move(t,n){const i=this.bbox();if(t-=i.x,n-=i.y,!isNaN(t)&&!isNaN(n))for(let r,s=this.length-1;s>=0;s--)r=this[s][0],r==="M"||r==="L"||r==="T"?(this[s][1]+=t,this[s][2]+=n):r==="H"?this[s][1]+=t:r==="V"?this[s][1]+=n:r==="C"||r==="S"||r==="Q"?(this[s][1]+=t,this[s][2]+=n,this[s][3]+=t,this[s][4]+=n,r==="C"&&(this[s][5]+=t,this[s][6]+=n)):r==="A"&&(this[s][6]+=t,this[s][7]+=n);return this}parse(t="M0 0"){return Array.isArray(t)&&(t=Array.prototype.concat.apply([],t).toString()),$a(t)}size(t,n){const i=this.bbox();let r,s;for(i.width=i.width===0?1:i.width,i.height=i.height===0?1:i.height,r=this.length-1;r>=0;r--)s=this[r][0],s==="M"||s==="L"||s==="T"?(this[r][1]=(this[r][1]-i.x)*t/i.width+i.x,this[r][2]=(this[r][2]-i.y)*n/i.height+i.y):s==="H"?this[r][1]=(this[r][1]-i.x)*t/i.width+i.x:s==="V"?this[r][1]=(this[r][1]-i.y)*n/i.height+i.y:s==="C"||s==="S"||s==="Q"?(this[r][1]=(this[r][1]-i.x)*t/i.width+i.x,this[r][2]=(this[r][2]-i.y)*n/i.height+i.y,this[r][3]=(this[r][3]-i.x)*t/i.width+i.x,this[r][4]=(this[r][4]-i.y)*n/i.height+i.y,s==="C"&&(this[r][5]=(this[r][5]-i.x)*t/i.width+i.x,this[r][6]=(this[r][6]-i.y)*n/i.height+i.y)):s==="A"&&(this[r][1]=this[r][1]*t/i.width,this[r][2]=this[r][2]*n/i.height,this[r][6]=(this[r][6]-i.x)*t/i.width+i.x,this[r][7]=(this[r][7]-i.y)*n/i.height+i.y);return this}toString(){return Ha(this)}}const Gr=e=>{const t=typeof e;return t==="number"?I:t==="string"?D.isColor(e)?D:St.test(e)?vi.test(e)?Yt:ue:Dr.test(e)?I:Gn:Ei.indexOf(e.constructor)>-1?e.constructor:Array.isArray(e)?ue:t==="object"?Re:Gn};class Wt{constructor(t){this._stepper=t||new Kn("-"),this._from=null,this._to=null,this._type=null,this._context=null,this._morphObj=null}at(t){return this._morphObj.morph(this._from,this._to,t,this._stepper,this._context)}done(){return this._context.map(this._stepper.done).reduce(function(n,i){return n&&i},!0)}from(t){return t==null?this._from:(this._from=this._set(t),this)}stepper(t){return t==null?this._stepper:(this._stepper=t,this)}to(t){return t==null?this._to:(this._to=this._set(t),this)}type(t){return t==null?this._type:(this._type=t,this)}_set(t){this._type||this.type(Gr(t));let n=new this._type(t);return this._type===D&&(n=this._to?n[this._to[4]]():this._from?n[this._from[4]]():n),this._type===Re&&(n=this._to?n.align(this._to):this._from?n.align(this._from):n),n=n.toConsumable(),this._morphObj=this._morphObj||new this._type,this._context=this._context||Array.apply(null,Array(n.length)).map(Object).map(function(i){return i.done=!0,i}),n}}class Gn{constructor(...t){this.init(...t)}init(t){return t=Array.isArray(t)?t[0]:t,this.value=t,this}toArray(){return[this.value]}valueOf(){return this.value}}class Ke{constructor(...t){this.init(...t)}init(t){return Array.isArray(t)&&(t={scaleX:t[0],scaleY:t[1],shear:t[2],rotate:t[3],translateX:t[4],translateY:t[5],originX:t[6],originY:t[7]}),Object.assign(this,Ke.defaults,t),this}toArray(){const t=this;return[t.scaleX,t.scaleY,t.shear,t.rotate,t.translateX,t.translateY,t.originX,t.originY]}}Ke.defaults={scaleX:1,scaleY:1,shear:0,rotate:0,translateX:0,translateY:0,originX:0,originY:0};const Pa=(e,t)=>e[0]<t[0]?-1:e[0]>t[0]?1:0;class Re{constructor(...t){this.init(...t)}align(t){const n=this.values;for(let i=0,r=n.length;i<r;++i){if(n[i+1]===t[i+1]){if(n[i+1]===D&&t[i+7]!==n[i+7]){const a=t[i+7],c=new D(this.values.splice(i+3,5))[a]().toArray();this.values.splice(i+3,0,...c)}i+=n[i+2]+2;continue}if(!t[i+1])return this;const s=new t[i+1]().toArray(),o=n[i+2]+3;n.splice(i,o,t[i],t[i+1],t[i+2],...s),i+=n[i+2]+2}return this}init(t){if(this.values=[],Array.isArray(t)){this.values=t.slice();return}t=t||{};const n=[];for(const i in t){const r=Gr(t[i]),s=new r(t[i]).toArray();n.push([i,r,s.length,...s])}return n.sort(Pa),this.values=n.reduce((i,r)=>i.concat(r),[]),this}toArray(){return this.values}valueOf(){const t={},n=this.values;for(;n.length;){const i=n.shift(),r=n.shift(),s=n.shift(),o=n.splice(0,s);t[i]=new r(o)}return t}}const Ei=[Gn,Ke,Re];function Wa(e=[]){Ei.push(...[].concat(e))}function ja(){E(Ei,{to(e){return new Wt().type(this.constructor).from(this.toArray()).to(e)},fromArray(e){return this.init(e),this},toConsumable(){return this.toArray()},morph(e,t,n,i,r){const s=function(o,a){return i.step(o,t[a],n,r[a],r)};return this.fromArray(e.map(s))}})}class xe extends st{constructor(t,n=t){super($("path",t),n)}array(){return this._array||(this._array=new Yt(this.attr("d")))}clear(){return delete this._array,this}height(t){return t==null?this.bbox().height:this.size(this.bbox().width,t)}move(t,n){return this.attr("d",this.array().move(t,n))}plot(t){return t==null?this.array():this.clear().attr("d",typeof t=="string"?t:this._array=new Yt(t))}size(t,n){const i=_e(this,t,n);return this.attr("d",this.array().size(i.width,i.height))}width(t){return t==null?this.bbox().width:this.size(t,this.bbox().height)}x(t){return t==null?this.bbox().x:this.move(t,this.bbox().y)}y(t){return t==null?this.bbox().y:this.move(this.bbox().x,t)}}xe.prototype.MorphArray=Yt;O({Container:{path:B(function(e){return this.put(new xe).plot(e||new Yt)})}});N(xe,"Path");function La(){return this._array||(this._array=new Mt(this.attr("points")))}function za(){return delete this._array,this}function Fa(e,t){return this.attr("points",this.array().move(e,t))}function Ka(e){return e==null?this.array():this.clear().attr("points",typeof e=="string"?e:this._array=new Mt(e))}function Ua(e,t){const n=_e(this,e,t);return this.attr("points",this.array().size(n.width,n.height))}const Zr=Object.freeze(Object.defineProperty({__proto__:null,array:La,clear:za,move:Fa,plot:Ka,size:Ua},Symbol.toStringTag,{value:"Module"}));class Ue extends st{constructor(t,n=t){super($("polygon",t),n)}}O({Container:{polygon:B(function(e){return this.put(new Ue).plot(e||new Mt)})}});E(Ue,Ii);E(Ue,Zr);N(Ue,"Polygon");class Ye extends st{constructor(t,n=t){super($("polyline",t),n)}}O({Container:{polyline:B(function(e){return this.put(new Ye).plot(e||new Mt)})}});E(Ye,Ii);E(Ye,Zr);N(Ye,"Polyline");class qe extends st{constructor(t,n=t){super($("rect",t),n)}}E(qe,{rx:ki,ry:Ti});O({Container:{rect:B(function(e,t){return this.put(new qe).size(e,t)})}});N(qe,"Rect");class Cn{constructor(){this._first=null,this._last=null}first(){return this._first&&this._first.value}last(){return this._last&&this._last.value}push(t){const n=typeof t.next<"u"?t:{value:t,next:null,prev:null};return this._last?(n.prev=this._last,this._last.next=n,this._last=n):(this._last=n,this._first=n),n}remove(t){t.prev&&(t.prev.next=t.next),t.next&&(t.next.prev=t.prev),t===this._last&&(this._last=t.prev),t===this._first&&(this._first=t.next),t.prev=null,t.next=null}shift(){const t=this._first;return t?(this._first=t.next,this._first&&(this._first.prev=null),this._last=this._first?this._last:null,t.value):null}}const M={nextDraw:null,frames:new Cn,timeouts:new Cn,immediates:new Cn,timer:()=>C.window.performance||C.window.Date,transforms:[],frame(e){const t=M.frames.push({run:e});return M.nextDraw===null&&(M.nextDraw=C.window.requestAnimationFrame(M._draw)),t},timeout(e,t){t=t||0;const n=M.timer().now()+t,i=M.timeouts.push({run:e,time:n});return M.nextDraw===null&&(M.nextDraw=C.window.requestAnimationFrame(M._draw)),i},immediate(e){const t=M.immediates.push(e);return M.nextDraw===null&&(M.nextDraw=C.window.requestAnimationFrame(M._draw)),t},cancelFrame(e){e!=null&&M.frames.remove(e)},clearTimeout(e){e!=null&&M.timeouts.remove(e)},cancelImmediate(e){e!=null&&M.immediates.remove(e)},_draw(e){let t=null;const n=M.timeouts.last();for(;(t=M.timeouts.shift())&&(e>=t.time?t.run():M.timeouts.push(t),t!==n););let i=null;const r=M.frames.last();for(;i!==r&&(i=M.frames.shift());)i.run(e);let s=null;for(;s=M.immediates.shift();)s();M.nextDraw=M.timeouts.first()||M.frames.first()?C.window.requestAnimationFrame(M._draw):null}},Ya=function(e){const t=e.start,n=e.runner.duration(),i=t+n;return{start:t,duration:n,end:i,runner:e.runner}},qa=function(){const e=C.window;return(e.performance||e.Date).now()};class Xr extends Le{constructor(t=qa){super(),this._timeSource=t,this.terminate()}active(){return!!this._nextFrame}finish(){return this.time(this.getEndTimeOfTimeline()+1),this.pause()}getEndTime(){const t=this.getLastRunnerInfo(),n=t?t.runner.duration():0;return(t?t.start:this._time)+n}getEndTimeOfTimeline(){const t=this._runners.map(n=>n.start+n.runner.duration());return Math.max(0,...t)}getLastRunnerInfo(){return this.getRunnerInfoById(this._lastRunnerId)}getRunnerInfoById(t){return this._runners[this._runnerIds.indexOf(t)]||null}pause(){return this._paused=!0,this._continue()}persist(t){return t==null?this._persist:(this._persist=t,this)}play(){return this._paused=!1,this.updateTime()._continue()}reverse(t){const n=this.speed();if(t==null)return this.speed(-n);const i=Math.abs(n);return this.speed(t?-i:i)}schedule(t,n,i){if(t==null)return this._runners.map(Ya);let r=0;const s=this.getEndTime();if(n=n||0,i==null||i==="last"||i==="after")r=s;else if(i==="absolute"||i==="start")r=n,n=0;else if(i==="now")r=this._time;else if(i==="relative"){const c=this.getRunnerInfoById(t.id);c&&(r=c.start+n,n=0)}else if(i==="with-last"){const c=this.getLastRunnerInfo();r=c?c.start:this._time}else throw new Error('Invalid value for the "when" parameter');t.unschedule(),t.timeline(this);const o=t.persist(),a={persist:o===null?this._persist:o,start:r+n,runner:t};return this._lastRunnerId=t.id,this._runners.push(a),this._runners.sort((c,l)=>c.start-l.start),this._runnerIds=this._runners.map(c=>c.runner.id),this.updateTime()._continue(),this}seek(t){return this.time(this._time+t)}source(t){return t==null?this._timeSource:(this._timeSource=t,this)}speed(t){return t==null?this._speed:(this._speed=t,this)}stop(){return this.time(0),this.pause()}time(t){return t==null?this._time:(this._time=t,this._continue(!0))}unschedule(t){const n=this._runnerIds.indexOf(t.id);return n<0?this:(this._runners.splice(n,1),this._runnerIds.splice(n,1),t.timeline(null),this)}updateTime(){return this.active()||(this._lastSourceTime=this._timeSource()),this}_continue(t=!1){return M.cancelFrame(this._nextFrame),this._nextFrame=null,t?this._stepImmediate():this._paused?this:(this._nextFrame=M.frame(this._step),this)}_stepFn(t=!1){const n=this._timeSource();let i=n-this._lastSourceTime;t&&(i=0);const r=this._speed*i+(this._time-this._lastStepTime);this._lastSourceTime=n,t||(this._time+=r,this._time=this._time<0?0:this._time),this._lastStepTime=this._time,this.fire("time",this._time);for(let o=this._runners.length;o--;){const a=this._runners[o],c=a.runner;this._time-a.start<=0&&c.reset()}let s=!1;for(let o=0,a=this._runners.length;o<a;o++){const c=this._runners[o],l=c.runner;let u=r;const h=this._time-c.start;if(h<=0){s=!0;continue}else h<u&&(u=h);if(!l.active())continue;l.step(u).done?c.persist!==!0&&l.duration()-l.time()+this._time+c.persist<this._time&&(l.unschedule(),--o,--a):s=!0}return s&&!(this._speed<0&&this._time===0)||this._runnerIds.length&&this._speed<0&&this._time>0?this._continue():(this.pause(),this.fire("finished")),this}terminate(){this._startTime=0,this._speed=1,this._persist=0,this._nextFrame=null,this._paused=!0,this._runners=[],this._runnerIds=[],this._lastRunnerId=-1,this._time=0,this._lastSourceTime=0,this._lastStepTime=0,this._step=this._stepFn.bind(this,!1),this._stepImmediate=this._stepFn.bind(this,!0)}}O({Element:{timeline:function(e){return e==null?(this._timeline=this._timeline||new Xr,this._timeline):(this._timeline=e,this)}}});class rt extends Le{constructor(t){super(),this.id=rt.id++,t=t??ke.duration,t=typeof t=="function"?new on(t):t,this._element=null,this._timeline=null,this.done=!1,this._queue=[],this._duration=typeof t=="number"&&t,this._isDeclarative=t instanceof on,this._stepper=this._isDeclarative?t:new Kn,this._history={},this.enabled=!0,this._time=0,this._lastTime=0,this._reseted=!0,this.transforms=new T,this.transformId=1,this._haveReversed=!1,this._reverse=!1,this._loopsDone=0,this._swing=!1,this._wait=0,this._times=1,this._frameId=null,this._persist=this._isDeclarative?!0:null}static sanitise(t,n,i){let r=1,s=!1,o=0;return t=t??ke.duration,n=n??ke.delay,i=i||"last",typeof t=="object"&&!(t instanceof Oi)&&(n=t.delay??n,i=t.when??i,s=t.swing||s,r=t.times??r,o=t.wait??o,t=t.duration??ke.duration),{duration:t,delay:n,swing:s,times:r,wait:o,when:i}}active(t){return t==null?this.enabled:(this.enabled=t,this)}addTransform(t){return this.transforms.lmultiplyO(t),this}after(t){return this.on("finished",t)}animate(t,n,i){const r=rt.sanitise(t,n,i),s=new rt(r.duration);return this._timeline&&s.timeline(this._timeline),this._element&&s.element(this._element),s.loop(r).schedule(r.delay,r.when)}clearTransform(){return this.transforms=new T,this}clearTransformsFromQueue(){(!this.done||!this._timeline||!this._timeline._runnerIds.includes(this.id))&&(this._queue=this._queue.filter(t=>!t.isTransform))}delay(t){return this.animate(0,t)}duration(){return this._times*(this._wait+this._duration)-this._wait}during(t){return this.queue(null,t)}ease(t){return this._stepper=new Kn(t),this}element(t){return t==null?this._element:(this._element=t,t._prepareRunner(),this)}finish(){return this.step(1/0)}loop(t,n,i){return typeof t=="object"&&(n=t.swing,i=t.wait,t=t.times),this._times=t||1/0,this._swing=n||!1,this._wait=i||0,this._times===!0&&(this._times=1/0),this}loops(t){const n=this._duration+this._wait;if(t==null){const o=Math.floor(this._time/n),c=(this._time-o*n)/this._duration;return Math.min(o+c,this._times)}const i=Math.floor(t),r=t%1,s=n*i+this._duration*r;return this.time(s)}persist(t){return t==null?this._persist:(this._persist=t,this)}position(t){const n=this._time,i=this._duration,r=this._wait,s=this._times,o=this._swing,a=this._reverse;let c;if(t==null){const f=function(d){const g=o*Math.floor(d%(2*(r+i))/(r+i)),y=g&&!a||!g&&a,S=Math.pow(-1,y)*(d%(r+i))/i+y;return Math.max(Math.min(S,1),0)},p=s*(r+i)-r;return c=n<=0?Math.round(f(1e-5)):n<p?f(n):Math.round(f(p-1e-5)),c}const l=Math.floor(this.loops()),u=o&&l%2===0;return c=l+(u&&!a||a&&u?t:1-t),this.loops(c)}progress(t){return t==null?Math.min(1,this._time/this.duration()):this.time(t*this.duration())}queue(t,n,i,r){return this._queue.push({initialiser:t||ir,runner:n||ir,retarget:i,isTransform:r,initialised:!1,finished:!1}),this.timeline()&&this.timeline()._continue(),this}reset(){return this._reseted?this:(this.time(0),this._reseted=!0,this)}reverse(t){return this._reverse=t??!this._reverse,this}schedule(t,n,i){if(t instanceof Xr||(i=n,n=t,t=this.timeline()),!t)throw Error("Runner cannot be scheduled without timeline");return t.schedule(this,n,i),this}step(t){if(!this.enabled)return this;t=t??16,this._time+=t;const n=this.position(),i=this._lastPosition!==n&&this._time>=0;this._lastPosition=n;const r=this.duration(),s=this._lastTime<=0&&this._time>0,o=this._lastTime<r&&this._time>=r;this._lastTime=this._time,s&&this.fire("start",this);const a=this._isDeclarative;this.done=!a&&!o&&this._time>=r,this._reseted=!1;let c=!1;return(i||a)&&(this._initialise(i),this.transforms=new T,c=this._run(a?t:n),this.fire("step",this)),this.done=this.done||c&&a,o&&this.fire("finished",this),this}time(t){if(t==null)return this._time;const n=t-this._time;return this.step(n),this}timeline(t){return typeof t>"u"?this._timeline:(this._timeline=t,this)}unschedule(){const t=this.timeline();return t&&t.unschedule(this),this}_initialise(t){if(!(!t&&!this._isDeclarative))for(let n=0,i=this._queue.length;n<i;++n){const r=this._queue[n],s=this._isDeclarative||!r.initialised&&t;t=!r.finished,s&&t&&(r.initialiser.call(this),r.initialised=!0)}}_rememberMorpher(t,n){if(this._history[t]={morpher:n,caller:this._queue[this._queue.length-1]},this._isDeclarative){const i=this.timeline();i&&i.play()}}_run(t){let n=!0;for(let i=0,r=this._queue.length;i<r;++i){const s=this._queue[i],o=s.runner.call(this,t);s.finished=s.finished||o===!0,n=n&&s.finished}return n}_tryRetarget(t,n,i){if(this._history[t]){if(!this._history[t].caller.initialised){const s=this._queue.indexOf(this._history[t].caller);return this._queue.splice(s,1),!1}this._history[t].caller.retarget?this._history[t].caller.retarget.call(this,n,i):this._history[t].morpher.to(n),this._history[t].caller.finished=!1;const r=this.timeline();return r&&r.play(),!0}return!1}}rt.id=0;class an{constructor(t=new T,n=-1,i=!0){this.transforms=t,this.id=n,this.done=i}clearTransformsFromQueue(){}}E([rt,an],{mergeWith(e){return new an(e.transforms.lmultiply(this.transforms),e.id)}});const Jr=(e,t)=>e.lmultiplyO(t),Vr=e=>e.transforms;function Ga(){const t=this._transformationRunners.runners.map(Vr).reduce(Jr,new T);this.transform(t),this._transformationRunners.merge(),this._transformationRunners.length()===1&&(this._frameId=null)}class Za{constructor(){this.runners=[],this.ids=[]}add(t){if(this.runners.includes(t))return;const n=t.id+1;return this.runners.push(t),this.ids.push(n),this}clearBefore(t){const n=this.ids.indexOf(t+1)||1;return this.ids.splice(0,n,0),this.runners.splice(0,n,new an).forEach(i=>i.clearTransformsFromQueue()),this}edit(t,n){const i=this.ids.indexOf(t+1);return this.ids.splice(i,1,t+1),this.runners.splice(i,1,n),this}getByID(t){return this.runners[this.ids.indexOf(t+1)]}length(){return this.ids.length}merge(){let t=null;for(let n=0;n<this.runners.length;++n){const i=this.runners[n];if(t&&i.done&&t.done&&(!i._timeline||!i._timeline._runnerIds.includes(i.id))&&(!t._timeline||!t._timeline._runnerIds.includes(t.id))){this.remove(i.id);const s=i.mergeWith(t);this.edit(t.id,s),t=s,--n}else t=i}return this}remove(t){const n=this.ids.indexOf(t+1);return this.ids.splice(n,1),this.runners.splice(n,1),this}}O({Element:{animate(e,t,n){const i=rt.sanitise(e,t,n),r=this.timeline();return new rt(i.duration).loop(i).element(this).timeline(r.play()).schedule(i.delay,i.when)},delay(e,t){return this.animate(0,e,t)},_clearTransformRunnersBefore(e){this._transformationRunners.clearBefore(e.id)},_currentTransform(e){return this._transformationRunners.runners.filter(t=>t.id<=e.id).map(Vr).reduce(Jr,new T)},_addRunner(e){this._transformationRunners.add(e),M.cancelImmediate(this._frameId),this._frameId=M.immediate(Ga.bind(this))},_prepareRunner(){this._frameId==null&&(this._transformationRunners=new Za().add(new an(new T(this))))}}});const Xa=(e,t)=>e.filter(n=>!t.includes(n));E(rt,{attr(e,t){return this.styleAttr("attr",e,t)},css(e,t){return this.styleAttr("css",e,t)},styleAttr(e,t,n){if(typeof t=="string")return this.styleAttr(e,{[t]:n});let i=t;if(this._tryRetarget(e,i))return this;let r=new Wt(this._stepper).to(i),s=Object.keys(i);return this.queue(function(){r=r.from(this.element()[e](s))},function(o){return this.element()[e](r.at(o).valueOf()),r.done()},function(o){const a=Object.keys(o),c=Xa(a,s);if(c.length){const u=this.element()[e](c),h=new Re(r.from()).valueOf();Object.assign(h,u),r.from(h)}const l=new Re(r.to()).valueOf();Object.assign(l,o),r.to(l),s=a,i=o}),this._rememberMorpher(e,r),this},zoom(e,t){if(this._tryRetarget("zoom",e,t))return this;let n=new Wt(this._stepper).to(new I(e));return this.queue(function(){n=n.from(this.element().zoom())},function(i){return this.element().zoom(n.at(i),t),n.done()},function(i,r){t=r,n.to(i)}),this._rememberMorpher("zoom",n),this},transform(e,t,n){if(t=e.relative||t,this._isDeclarative&&!t&&this._tryRetarget("transform",e))return this;const i=T.isMatrixLike(e);n=e.affine!=null?e.affine:n??!i;const r=new Wt(this._stepper).type(n?Ke:T);let s,o,a,c,l;function u(){o=o||this.element(),s=s||Ln(e,o),l=new T(t?void 0:o),o._addRunner(this),t||o._clearTransformRunnersBefore(this)}function h(p){t||this.clearTransform();const{x:d,y:g}=new P(s).transform(o._currentTransform(this));let y=new T({...e,origin:[d,g]}),S=this._isDeclarative&&a?a:l;if(n){y=y.decompose(d,g),S=S.decompose(d,g);const H=y.rotate,ot=S.rotate,K=[H-360,H,H+360],lt=K.map(Sn=>Math.abs(Sn-ot)),yt=Math.min(...lt),Jt=lt.indexOf(yt);y.rotate=K[Jt]}t&&(i||(y.rotate=e.rotate||0),this._isDeclarative&&c&&(S.rotate=c)),r.from(S),r.to(y);const b=r.at(p);return c=b.rotate,a=new T(b),this.addTransform(a),o._addRunner(this),r.done()}function f(p){(p.origin||"center").toString()!==(e.origin||"center").toString()&&(s=Ln(p,o)),e={...p,origin:s}}return this.queue(u,h,f,!0),this._isDeclarative&&this._rememberMorpher("transform",r),this},x(e){return this._queueNumber("x",e)},y(e){return this._queueNumber("y",e)},ax(e){return this._queueNumber("ax",e)},ay(e){return this._queueNumber("ay",e)},dx(e=0){return this._queueNumberDelta("x",e)},dy(e=0){return this._queueNumberDelta("y",e)},dmove(e,t){return this.dx(e).dy(t)},_queueNumberDelta(e,t){if(t=new I(t),this._tryRetarget(e,t))return this;const n=new Wt(this._stepper).to(t);let i=null;return this.queue(function(){i=this.element()[e](),n.from(i),n.to(i+t)},function(r){return this.element()[e](n.at(r)),n.done()},function(r){n.to(i+new I(r))}),this._rememberMorpher(e,n),this},_queueObject(e,t){if(this._tryRetarget(e,t))return this;const n=new Wt(this._stepper).to(t);return this.queue(function(){n.from(this.element()[e]())},function(i){return this.element()[e](n.at(i)),n.done()}),this._rememberMorpher(e,n),this},_queueNumber(e,t){return this._queueObject(e,new I(t))},cx(e){return this._queueNumber("cx",e)},cy(e){return this._queueNumber("cy",e)},move(e,t){return this.x(e).y(t)},amove(e,t){return this.ax(e).ay(t)},center(e,t){return this.cx(e).cy(t)},size(e,t){let n;return(!e||!t)&&(n=this._element.bbox()),e||(e=n.width/n.height*t),t||(t=n.height/n.width*e),this.width(e).height(t)},width(e){return this._queueNumber("width",e)},height(e){return this._queueNumber("height",e)},plot(e,t,n,i){if(arguments.length===4)return this.plot([e,t,n,i]);if(this._tryRetarget("plot",e))return this;const r=new Wt(this._stepper).type(this._element.MorphArray).to(e);return this.queue(function(){r.from(this._element.array())},function(s){return this._element.plot(r.at(s)),r.done()}),this._rememberMorpher("plot",r),this},leading(e){return this._queueNumber("leading",e)},viewbox(e,t,n,i){return this._queueObject("viewbox",new F(e,t,n,i))},update(e){return typeof e!="object"?this.update({offset:arguments[0],color:arguments[1],opacity:arguments[2]}):(e.opacity!=null&&this.attr("stop-opacity",e.opacity),e.color!=null&&this.attr("stop-color",e.color),e.offset!=null&&this.attr("offset",e.offset),this)}});E(rt,{rx:ki,ry:Ti,from:Yr,to:qr});N(rt,"Runner");class Ci extends et{constructor(t,n=t){super($("svg",t),n),this.namespace()}defs(){return this.isRoot()?ct(this.node.querySelector("defs"))||this.put(new Si):this.root().defs()}isRoot(){return!this.node.parentNode||!(this.node.parentNode instanceof C.window.SVGElement)&&this.node.parentNode.nodeName!=="#document-fragment"}namespace(){return this.isRoot()?this.attr({xmlns:_i,version:"1.1"}).attr("xmlns:xlink",je,Tn):this.root().namespace()}removeNamespace(){return this.attr({xmlns:null,version:null}).attr("xmlns:xlink",null,Tn).attr("xmlns:svgjs",null,Tn)}root(){return this.isRoot()?this:super.root()}}O({Container:{nested:B(function(){return this.put(new Ci)})}});N(Ci,"Svg",!0);let _n=class extends et{constructor(t,n=t){super($("symbol",t),n)}};O({Container:{symbol:B(function(){return this.put(new _n)})}});N(_n,"Symbol");function Ja(e){return this._build===!1&&this.clear(),this.node.appendChild(C.document.createTextNode(e)),this}function Va(){return this.node.getComputedTextLength()}function Qa(e,t=this.bbox()){return e==null?t.x:this.attr("x",this.attr("x")+e-t.x)}function tc(e,t=this.bbox()){return e==null?t.y:this.attr("y",this.attr("y")+e-t.y)}function ec(e,t,n=this.bbox()){return this.x(e,n).y(t,n)}function nc(e,t=this.bbox()){return e==null?t.cx:this.attr("x",this.attr("x")+e-t.cx)}function ic(e,t=this.bbox()){return e==null?t.cy:this.attr("y",this.attr("y")+e-t.cy)}function rc(e,t,n=this.bbox()){return this.cx(e,n).cy(t,n)}function sc(e){return this.attr("x",e)}function oc(e){return this.attr("y",e)}function ac(e,t){return this.ax(e).ay(t)}function cc(e){return this._build=!!e,this}const Qr=Object.freeze(Object.defineProperty({__proto__:null,amove:ac,ax:sc,ay:oc,build:cc,center:rc,cx:nc,cy:ic,length:Va,move:ec,plain:Ja,x:Qa,y:tc},Symbol.toStringTag,{value:"Module"}));class U extends st{constructor(t,n=t){super($("text",t),n),this.dom.leading=this.dom.leading??new I(1.3),this._rebuild=!0,this._build=!1}leading(t){return t==null?this.dom.leading:(this.dom.leading=new I(t),this.rebuild())}rebuild(t){if(typeof t=="boolean"&&(this._rebuild=t),this._rebuild){const n=this;let i=0;const r=this.dom.leading;this.each(function(s){if(zn(this.node))return;const o=C.window.getComputedStyle(this.node).getPropertyValue("font-size"),a=r*new I(o);this.dom.newLined&&(this.attr("x",n.attr("x")),this.text()===`
|
|
3
|
+
`?i+=a:(this.attr("dy",s?a+i:0),i=0))}),this.fire("rebuild")}return this}setData(t){return this.dom=t,this.dom.leading=new I(t.leading||1.3),this}writeDataToDom(){return Cr(this,this.dom,{leading:1.3}),this}text(t){if(t===void 0){const n=this.node.childNodes;let i=0;t="";for(let r=0,s=n.length;r<s;++r){if(n[r].nodeName==="textPath"||zn(n[r])){r===0&&(i=r+1);continue}r!==i&&n[r].nodeType!==3&&ct(n[r]).dom.newLined===!0&&(t+=`
|
|
4
|
+
`),t+=n[r].textContent}return t}if(this.clear().build(!0),typeof t=="function")t.call(this,this);else{t=(t+"").split(`
|
|
5
|
+
`);for(let n=0,i=t.length;n<i;n++)this.newLine(t[n])}return this.build(!1).rebuild()}}E(U,Qr);O({Container:{text:B(function(e=""){return this.put(new U).text(e)}),plain:B(function(e=""){return this.put(new U).plain(e)})}});N(U,"Text");class bn extends st{constructor(t,n=t){super($("tspan",t),n),this._build=!1}dx(t){return this.attr("dx",t)}dy(t){return this.attr("dy",t)}newLine(){this.dom.newLined=!0;const t=this.parent();if(!(t instanceof U))return this;const n=t.index(this),i=C.window.getComputedStyle(this.node).getPropertyValue("font-size"),r=t.dom.leading*new I(i);return this.dy(n?r:0).attr("x",t.x())}text(t){return t==null?this.node.textContent+(this.dom.newLined?`
|
|
6
|
+
`:""):(typeof t=="function"?(this.clear().build(!0),t.call(this,this),this.build(!1)):this.plain(t),this)}}E(bn,Qr);O({Tspan:{tspan:B(function(e=""){const t=new bn;return this._build||this.clear(),this.put(t).text(e)})},Text:{newLine:function(e=""){return this.tspan(e).newLine()}}});N(bn,"Tspan");class Ni extends st{constructor(t,n=t){super($("circle",t),n)}radius(t){return this.attr("r",t)}rx(t){return this.attr("r",t)}ry(t){return this.rx(t)}size(t){return this.radius(new I(t).divide(2))}}E(Ni,{x:Wr,y:jr,cx:Lr,cy:zr,width:Fr,height:Kr});O({Container:{circle:B(function(e=0){return this.put(new Ni).size(e).move(0,0)})}});N(Ni,"Circle");class Zn extends et{constructor(t,n=t){super($("clipPath",t),n)}remove(){return this.targets().forEach(function(t){t.unclip()}),super.remove()}targets(){return be("svg [clip-path*="+this.id()+"]")}}O({Container:{clip:B(function(){return this.defs().put(new Zn)})},Element:{clipper(){return this.reference("clip-path")},clipWith(e){const t=e instanceof Zn?e:this.parent().clip().add(e);return this.attr("clip-path","url(#"+t.id()+")")},unclip(){return this.attr("clip-path",null)}}});N(Zn,"ClipPath");class ts extends gt{constructor(t,n=t){super($("foreignObject",t),n)}}O({Container:{foreignObject:B(function(e,t){return this.put(new ts).size(e,t)})}});N(ts,"ForeignObject");function lc(e,t){return this.children().forEach(n=>{let i;try{i=n.node instanceof fo().SVGSVGElement?new F(n.attr(["x","y","width","height"])):n.bbox()}catch{return}const r=new T(n),s=r.translate(e,t).transform(r.inverse()),o=new P(i.x,i.y).transform(s);n.move(o.x,o.y)}),this}function uc(e){return this.dmove(e,0)}function hc(e){return this.dmove(0,e)}function fc(e,t=this.bbox()){return e==null?t.height:this.size(t.width,e,t)}function dc(e=0,t=0,n=this.bbox()){const i=e-n.x,r=t-n.y;return this.dmove(i,r)}function pc(e,t,n=this.bbox()){const i=_e(this,e,t,n),r=i.width/n.width,s=i.height/n.height;return this.children().forEach(o=>{const a=new P(n).transform(new T(o).inverse());o.scale(r,s,a.x,a.y)}),this}function mc(e,t=this.bbox()){return e==null?t.width:this.size(e,t.height,t)}function gc(e,t=this.bbox()){return e==null?t.x:this.move(e,t.y,t)}function yc(e,t=this.bbox()){return e==null?t.y:this.move(t.x,e,t)}const es=Object.freeze(Object.defineProperty({__proto__:null,dmove:lc,dx:uc,dy:hc,height:fc,move:dc,size:pc,width:mc,x:gc,y:yc},Symbol.toStringTag,{value:"Module"}));class W extends et{constructor(t,n=t){super($("g",t),n)}}E(W,es);O({Container:{group:B(function(){return this.put(new W)})}});N(W,"G");class cn extends et{constructor(t,n=t){super($("a",t),n)}target(t){return this.attr("target",t)}to(t){return this.attr("href",t,je)}}E(cn,es);O({Container:{link:B(function(e){return this.put(new cn).to(e)})},Element:{unlink(){const e=this.linker();if(!e)return this;const t=e.parent();if(!t)return this.remove();const n=t.index(e);return t.add(this,n),e.remove(),this},linkTo(e){let t=this.linker();return t||(t=new cn,this.wrap(t)),typeof e=="function"?e.call(t,t):t.to(e),this},linker(){const e=this.parent();return e&&e.node.nodeName.toLowerCase()==="a"?e:null}}});N(cn,"A");class Xn extends et{constructor(t,n=t){super($("mask",t),n)}remove(){return this.targets().forEach(function(t){t.unmask()}),super.remove()}targets(){return be("svg [mask*="+this.id()+"]")}}O({Container:{mask:B(function(){return this.defs().put(new Xn)})},Element:{masker(){return this.reference("mask")},maskWith(e){const t=e instanceof Xn?e:this.parent().mask().add(e);return this.attr("mask","url(#"+t.id()+")")},unmask(){return this.attr("mask",null)}}});N(Xn,"Mask");class ns extends gt{constructor(t,n=t){super($("stop",t),n)}update(t){return(typeof t=="number"||t instanceof I)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),t.opacity!=null&&this.attr("stop-opacity",t.opacity),t.color!=null&&this.attr("stop-color",t.color),t.offset!=null&&this.attr("offset",new I(t.offset)),this}}O({Gradient:{stop:function(e,t,n){return this.put(new ns).update(e,t,n)}}});N(ns,"Stop");function wc(e,t){if(!e)return"";if(!t)return e;let n=e+"{";for(const i in t)n+=lo(i)+":"+t[i]+";";return n+="}",n}class Jn extends gt{constructor(t,n=t){super($("style",t),n)}addText(t=""){return this.node.textContent+=t,this}font(t,n,i={}){return this.rule("@font-face",{fontFamily:t,src:n,...i})}rule(t,n){return this.addText(wc(t,n))}}O("Dom",{style(e,t){return this.put(new Jn).rule(e,t)},fontface(e,t,n){return this.put(new Jn).font(e,t,n)}});N(Jn,"Style");class Mi extends U{constructor(t,n=t){super($("textPath",t),n)}array(){const t=this.track();return t?t.array():null}plot(t){const n=this.track();let i=null;return n&&(i=n.plot(t)),t==null?i:this}track(){return this.reference("href")}}O({Container:{textPath:B(function(e,t){return e instanceof U||(e=this.text(e)),e.path(t)})},Text:{path:B(function(e,t=!0){const n=new Mi;e instanceof xe||(e=this.defs().path(e)),n.attr("href","#"+e,je);let i;if(t)for(;i=this.node.firstChild;)n.node.appendChild(i);return this.put(n)}),textPath(){return this.findOne("textPath")}},Path:{text:B(function(e){return e instanceof U||(e=new U().addTo(this.parent()).text(e)),e.path(this)}),targets(){return be("svg textPath").filter(e=>(e.attr("href")||"").includes(this.id()))}}});Mi.prototype.MorphArray=Yt;N(Mi,"TextPath");class xn extends st{constructor(t,n=t){super($("use",t),n)}use(t,n){return this.attr("href",(n||"")+"#"+t,je)}}O({Container:{use:B(function(e,t){return this.put(new xn).use(e,t)})}});N(xn,"Use");E([Ci,_n,Fe,Me,sn],tt("viewbox"));E([De,Ye,Ue,xe],tt("marker"));E(U,tt("Text"));E(xe,tt("Path"));E(Si,tt("Defs"));E([U,bn],tt("Tspan"));E([qe,wn,ze,rt],tt("radius"));E(Le,tt("EventTarget"));E(Nt,tt("Dom"));E(gt,tt("Element"));E(st,tt("Shape"));E([et,Ur],tt("Container"));E(ze,tt("Gradient"));E(rt,tt("Runner"));Ut.extend(ao());Wa([I,D,F,T,ue,Mt,Yt,P]);ja();class he{constructor(t={}){v(this,"tileWidth");v(this,"tileHeight");v(this,"imageHostPath");v(this,"imageHostUrl");v(this,"imageExt");v(this,"scale");v(this,"svgSprite");this.scale=t.scale??1,this.imageHostPath=t.imageHostPath??"",this.imageHostUrl=t.imageHostUrl??"",this.imageExt=t.imageExt??"svg",this.tileWidth=Ot.WIDTH*this.scale,this.tileHeight=Ot.HEIGHT*this.scale,this.svgSprite=t.svgSprite??!1}getDiffTileHeightWidth(t){const n=t.imageSize(this.scale);return(n.baseHeight-n.baseWidth)/2}image(t){let n=new Fe().load(this.buildURL(t));return this.svgSprite&&(n=new xn().use(he.buildID(t))),t instanceof w&&t.has(A.COLOR_GRAYSCALE)&&n.css({filter:"contrast(65%)"}),n}createImage(t,n,i){const r=t.imageSize(this.scale);return this.image(t).dx(n).dy(i).size(r.baseWidth,r.baseHeight)}createTextImage(t,n,i,r){const s=this.createImage(t,n,i),o=t.imageSize(this.scale),a=o.baseHeight*.2,c=o.baseWidth,l=o.baseHeight,u=new U().text(r);u.size(o.baseWidth,o.baseHeight).font({family:fi,size:a}).dx(c).dy(l);const h=new W;return h.add(s).add(u).translate(n,i),h}createRotate90Image(t,n,i,r=!1){const s=this.createImage(t,0,0),o=t.imageSize(this.scale),a=o.baseWidth/2,c=o.baseHeight/2,l=n+this.getDiffTileHeightWidth(t),u=r?i-this.getDiffTileHeightWidth(t):i,h=new W;return h.add(s).translate(l,u).rotate(90,a,c),h}createStick(t){return this.image(t)}static buildID(t){if(t==100||t==1e3)return t==100?"stick100":"stick1000";const n=t.t==m.BACK?0:t.n;return`${t.t}${n}`}buildURL(t){const n=`${he.buildID(t)}.${this.imageExt}`;return this.imageHostUrl!=""?`${this.imageHostUrl}${n}`:`${this.imageHostPath}${n}`}}class Di extends he{constructor(){super(...arguments);v(this,"blockMargin",Ot.WIDTH*Ot.BLOCK_MARGIN_SCALE*this.scale)}createBlockHandDiscard(n){const i=new W;let r=0;for(let s of n.tiles){const o=s.imageSize(this.scale),a=s.has(A.HORIZONTAL)?this.createRotate90Image.bind(this):this.createImage.bind(this),c=s.has(A.HORIZONTAL)?this.getDiffTileHeightWidth(s):0,l=a(s,r,c);i.add(l),r+=o.width}return i}createBlockPonChiKan(n){const i=n.tiles.findIndex(o=>o.has(A.HORIZONTAL));let r=0;const s=new W;if(n.type==x.SHO_KAN){let o=i;for(let a=0;a<n.tiles.length;a++)n.tiles[a].has(A.HORIZONTAL)&&(o=a);for(let a=0;a<n.tiles.length;a++){const c=n.tiles[a].imageSize(this.scale);if(a==o)continue;if(a==i){const h=n.tiles[i],f=n.tiles[o],p=h.imageSize(this.scale),d=this.createRotate90Image(h,0,0,!0),g=this.createRotate90Image(f,0,p.height,!0);s.add(new W().translate(r,0).add(d).add(g)),r+=p.width;continue}const l=c.width*2-c.height,u=this.createImage(n.tiles[a],r,l);r+=c.width,s.add(u)}return s}if(n.type==x.CHI){const o=this.createRotate90Image(n.tiles[i],r,this.getDiffTileHeightWidth(n.tiles[i]));r+=n.tiles[i].imageSize(this.scale).width,s.add(o);for(let a=0;a<n.tiles.length;a++){if(a==i)continue;const c=n.tiles[a].imageSize(this.scale),l=this.createImage(n.tiles[a],r,0);r+=c.width,s.add(l)}return s}for(let o=0;o<n.tiles.length;o++){const a=o==i?this.createRotate90Image.bind(this):this.createImage.bind(this),c=o==i?this.getDiffTileHeightWidth(n.tiles[o]):0,l=n.tiles[o].imageSize(this.scale),u=a(n.tiles[o],r,c);r+=l.width,s.add(u)}return s}}const _c=e=>{const t=e.scale;return{[x.CHI]:function(i){const r=i.imageSize(t),s=e.createBlockPonChiKan(i);return{...r,e:s}},[x.PON]:function(i){const r=i.imageSize(t),s=e.createBlockPonChiKan(i);return{...r,e:s}},[x.DAI_KAN]:function(i){const r=i.imageSize(t),s=e.createBlockPonChiKan(i);return{...r,e:s}},[x.SHO_KAN]:function(i){const r=i.imageSize(t),s=e.createBlockPonChiKan(i);return{...r,e:s}},[x.AN_KAN]:function(i){assert(i instanceof Z,`block type is not ankan: ${i.type}`);const r=i.imageSize(t),s=i.tilesWithBack.filter(a=>a.t!==m.BACK);assert(s!=null&&s.length==2,`back tile must be two but ${i}`);const o=e.createBlockHandDiscard(new Z([s[0],s[1],s[0],s[1]]));return{...r,e:o}},[x.IMAGE_DORA]:function(i){const r=i.imageSize(t),s=new W,o=e.createTextImage(i.tiles[0],0,0,"(ドラ)");return s.add(o),{...r,e:s}},[x.TSUMO]:function(i){const r=i.imageSize(t),s=new W,o=e.createTextImage(i.tiles[0],0,0,"(ツモ)");return s.add(o),{...r,e:s}},[x.HAND]:function(i){const r=i.imageSize(t),s=e.createBlockHandDiscard(i);return{...r,e:s}},[x.IMAGE_DISCARD]:function(i){const r=i.imageSize(t),s=e.createBlockHandDiscard(i);return{...r,e:s}},[x.THREE]:function(i){throw new Error("found unknown block")},[x.RUN]:function(i){throw new Error("found unknown block")},[x.UNKNOWN]:function(i){throw new Error("found unknown block")},[x.PAIR]:function(i){throw new Error("unsupported")},[x.ISOLATED]:function(i){throw new Error("unsupported")}}},se=(e,t)=>{const{maxHeight:n,sumWidth:i}=t.reduce((u,h)=>{const f=h.imageSize(e.scale);return{maxHeight:f.height>u.maxHeight?f.height:u.maxHeight,sumWidth:u.sumWidth+f.width}},{maxHeight:0,sumWidth:0}),r=n,s=i+(t.length-1)*e.blockMargin,o=_c(e),a=[];for(let u of t){const h=o[u.type],f=h(u);a.push(f)}const c=new W;let l=0;for(let u of a){const h=r-u.height,f=new W().translate(l,h);f.add(u.e),c.add(f),l+=u.width+e.blockMargin}return{e:c,width:s,height:r}},bc=(e,t,n={},i={responsive:!1})=>{const r=new Di(n),s=se(r,t);i.responsive||e.size(s.width,s.height),e.viewbox(0,0,s.width,s.height),e.add(s.e)},is=()=>{const e=[0,1,2,3,4,5,6,7,8,9],t=[];for(let n of Object.values(m)){if(n==m.BACK){t.push(he.buildID(new w(n,0)));continue}t.push(...e.map(i=>he.buildID(new w(n,i))).flat())}return t},xc=e=>{const t=is(),n=[];return e.each((i,r)=>{const s=r[i];if(s instanceof xn){const a=s.attr("href").substring(1);t.includes(a)&&n.push(a)}}),n},vc=e=>{const t=is(),n=xc(e);e.each((i,r)=>{const s=r[i];s instanceof _n&&(t.includes(s.id())&&n.includes(s.id())||s.remove())},!0)},Ac=e=>{const n=[];for(let i=0;i<e.length;i+=6){const r=e.slice(i,i+6);n.push(r)}return n},dt=(e,t,n,i,r=0,s=0)=>{const o=new W().add(e);if(i==90){const a=r,c=s-n;return o.rotate(i,0,n).translate(a,c),o}if(i==180){const a=r+t,c=s-n;return o.rotate(i,0,n).translate(a,c),o}if(i==270){const a=r+n,c=s+(t-n);return o.rotate(i,0,n).translate(a,c),o}return o},Ve=(e,t)=>{const n=new W,i=Ac(e);for(let r=0;r<i.length;r++){let s=i[r],o=r*t.tileHeight;const a=t.createBlockHandDiscard(new yi(s,x.IMAGE_DISCARD)).translate(0,o);n.add(a)}return{e:n,width:t.tileWidth*5+t.tileHeight*1,height:t.tileHeight*i.length}},Sc=(e,t,n)=>{const i=t.font,r=t.textWidth,s=t.textHeight,o=new W,a=n.sticks.dead,c=n.sticks.reach,l=125*e.scale,u=27.5*e.scale;let h=r*3,f=s;const p=(l+e.tileWidth+r-h)/2,d=new U().plain(n.round).font(i).move(p,0);o.add(d),f+=25*e.scale;const g=e.tileHeight,y=new W().size(l,g).translate(0,f),S={family:i.family,size:i.size*.7},b=e.createStick(1e3).size(l,u).move(0,0),H=new U().plain(c.toString()).font(S).attr({x:l,y:u});y.add(b),y.add(H);const ot=e.createStick(100).size(l,u).move(0,u+u),K=new U().plain(a.toString()).font(S).attr({x:l,y:u*3});y.add(ot),y.add(K);const lt=e.createImage(n.doras[0],0,0).move(l+r,0);return y.add(lt),o.add(d),o.add(y),{e:o,width:l+e.tileWidth+r,height:f+e.tileHeight}},kc=(e,t,n=0)=>{const i=se(e,t.front),r=se(e,t.right),s=se(e,t.opposite),o=se(e,t.left),a=[i.width,r.width,s.width,o.width].reduce((g,y)=>Math.max(g,y)),c=Math.max(n+e.tileHeight*2+e.blockMargin*2,a+e.tileWidth*2+e.blockMargin),l=c,u=new W().size(c,l),h=dt(i.e,i.width,i.height,0).translate((c-i.width)/2,l-i.height),f=dt(r.e,r.width,r.height,270).translate(c-r.height,(c-r.width)/2),p=dt(s.e,s.width,s.height,180).translate((c-s.width)/2,0),d=dt(o.e,o.width,o.height,90).translate(0,(c-o.width)/2);return u.add(h),u.add(f),u.add(p),u.add(d),{e:u,width:c,height:l}},Tc=e=>e=="東"?["東","南","西","北"]:e=="南"?["南","西","北","東"]:e=="西"?["西","北","東","南"]:["北","東","南","西"],Ic=(e,t,n)=>{const i=e.tileWidth*5+e.tileHeight*1,r=new W,s=new qe().size(i,i).move(0,0).fill("none").stroke("#000000");r.add(s);const o=t.font,a=t.textWidth,c=t.textHeight,l=t.numWidth,u=Sc(e,t,n);u.e.translate(i/2-u.width/2,i/2-u.height/2);const h=(Sn,Xi,Xs)=>{const Js=`${Sn} ${Xi}`,Vs=new U().plain(Js).font(o).attr(Xs);return{e:new W().add(Vs),width:a+l*Xi.toString().length,height:c}},[f,p,d,g]=Tc(n.frontPlace),y=n.scores,b=h(f,y.front,{x:i/2,y:i,"dominant-baseline":"text-after-edge","text-anchor":"middle"}).e;let H=h(p,y.right,{"dominant-baseline":"text-after-edge","text-anchor":"middle"});const ot=dt(H.e,H.width,H.height,270).translate(i,i/2-H.width);let K=h(d,y.opposite,{"text-anchor":"middle","dominant-baseline":"text-after-edge"});const lt=dt(K.e,K.width,K.height,180).translate(i/2-K.width,-K.height);let yt=h(g,y.left,{"dominant-baseline":"ideographic","text-anchor":"middle"});const Jt=dt(yt.e,yt.width,yt.height,90).translate(-yt.height,i/2);return r.add(u.e),r.add(b),r.add(ot),r.add(lt),r.add(Jt),{e:r,width:i,height:i}},Oc=(e,t)=>{const n=Ve(t.front,e),i=Ve(t.right,e),r=Ve(t.opposite,e),s=Ve(t.left,e),o=[n.height,i.height,r.height,s.height].reduce((b,H)=>Math.max(b,H)),a=e.tileWidth*5+e.tileHeight*1,c=o,l=a+o*2+e.blockMargin,u=l,h=new W().size(l,u),f=l/2-a/2,p=u/2-a/2,d=dt(n.e,a,c,0).translate(f,u-c),g=dt(i.e,a,c,270).translate(l-c,p),y=dt(r.e,a,c,180).translate(f,0),S=dt(s.e,a,c,90).translate(0,p);return h.add(d),h.add(g),h.add(y),h.add(S),{e:h,width:l,height:u}},rs=(e,t,n,i,r)=>{const s=new W,o=Oc(e,i),a=kc(e,n,o.height),c=Ic(e,t,r);return o.e.translate((a.width-o.width)/2,(a.height-o.height)/2),c.e.translate((a.width-c.width)/2,(a.height-c.height)/2),s.add(a.e),s.add(o.e),s.add(c.e),{e:s,width:a.width,height:a.height}},Ec=(e,t,n={},i,r={responsive:!1})=>{const s=new Di(n),o=i,{discards:a,hands:c,scoreBoard:l}=ws(t),u=rs(s,o,c,a,l);r.responsive||e.size(u.width,u.height),e.viewbox(0,0,u.width,u.height),e.add(u.e)};/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function ss(e){return typeof e>"u"||e===null}function Cc(e){return typeof e=="object"&&e!==null}function Nc(e){return Array.isArray(e)?e:ss(e)?[]:[e]}function Mc(e,t){var n,i,r,s;if(t)for(s=Object.keys(t),n=0,i=s.length;n<i;n+=1)r=s[n],e[r]=t[r];return e}function Dc(e,t){var n="",i;for(i=0;i<t;i+=1)n+=e;return n}function Rc(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var Bc=ss,$c=Cc,Hc=Nc,Pc=Dc,Wc=Rc,jc=Mc,X={isNothing:Bc,isObject:$c,toArray:Hc,repeat:Pc,isNegativeZero:Wc,extend:jc};function os(e,t){var n="",i=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+=`
|
|
7
|
+
|
|
8
|
+
`+e.mark.snippet),i+" "+n):i}function Be(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=os(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Be.prototype=Object.create(Error.prototype);Be.prototype.constructor=Be;Be.prototype.toString=function(t){return this.name+": "+os(this,t)};var At=Be;function Nn(e,t,n,i,r){var s="",o="",a=Math.floor(r/2)-1;return i-t>a&&(s=" ... ",t=i-a+s.length),n-i>a&&(o=" ...",n=i+a-o.length),{str:s+e.slice(t,n).replace(/\t/g,"→")+o,pos:i-t+s.length}}function Mn(e,t){return X.repeat(" ",t-e.length)+e}function Lc(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var n=/\r?\n|\r|\0/g,i=[0],r=[],s,o=-1;s=n.exec(e.buffer);)r.push(s.index),i.push(s.index+s[0].length),e.position<=s.index&&o<0&&(o=i.length-2);o<0&&(o=i.length-1);var a="",c,l,u=Math.min(e.line+t.linesAfter,r.length).toString().length,h=t.maxLength-(t.indent+u+3);for(c=1;c<=t.linesBefore&&!(o-c<0);c++)l=Nn(e.buffer,i[o-c],r[o-c],e.position-(i[o]-i[o-c]),h),a=X.repeat(" ",t.indent)+Mn((e.line-c+1).toString(),u)+" | "+l.str+`
|
|
9
|
+
`+a;for(l=Nn(e.buffer,i[o],r[o],e.position,h),a+=X.repeat(" ",t.indent)+Mn((e.line+1).toString(),u)+" | "+l.str+`
|
|
10
|
+
`,a+=X.repeat("-",t.indent+u+3+l.pos)+`^
|
|
11
|
+
`,c=1;c<=t.linesAfter&&!(o+c>=r.length);c++)l=Nn(e.buffer,i[o+c],r[o+c],e.position-(i[o]-i[o+c]),h),a+=X.repeat(" ",t.indent)+Mn((e.line+c+1).toString(),u)+" | "+l.str+`
|
|
12
|
+
`;return a.replace(/\n$/,"")}var zc=Lc,Fc=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Kc=["scalar","sequence","mapping"];function Uc(e){var t={};return e!==null&&Object.keys(e).forEach(function(n){e[n].forEach(function(i){t[String(i)]=n})}),t}function Yc(e,t){if(t=t||{},Object.keys(t).forEach(function(n){if(Fc.indexOf(n)===-1)throw new At('Unknown option "'+n+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(n){return n},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=Uc(t.styleAliases||null),Kc.indexOf(this.kind)===-1)throw new At('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var Y=Yc;function sr(e,t){var n=[];return e[t].forEach(function(i){var r=n.length;n.forEach(function(s,o){s.tag===i.tag&&s.kind===i.kind&&s.multi===i.multi&&(r=o)}),n[r]=i}),n}function qc(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,n;function i(r){r.multi?(e.multi[r.kind].push(r),e.multi.fallback.push(r)):e[r.kind][r.tag]=e.fallback[r.tag]=r}for(t=0,n=arguments.length;t<n;t+=1)arguments[t].forEach(i);return e}function Vn(e){return this.extend(e)}Vn.prototype.extend=function(t){var n=[],i=[];if(t instanceof Y)i.push(t);else if(Array.isArray(t))i=i.concat(t);else if(t&&(Array.isArray(t.implicit)||Array.isArray(t.explicit)))t.implicit&&(n=n.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit));else throw new At("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");n.forEach(function(s){if(!(s instanceof Y))throw new At("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(s.loadKind&&s.loadKind!=="scalar")throw new At("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(s.multi)throw new At("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),i.forEach(function(s){if(!(s instanceof Y))throw new At("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var r=Object.create(Vn.prototype);return r.implicit=(this.implicit||[]).concat(n),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=sr(r,"implicit"),r.compiledExplicit=sr(r,"explicit"),r.compiledTypeMap=qc(r.compiledImplicit,r.compiledExplicit),r};var Gc=Vn,Zc=new Y("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return e!==null?e:""}}),Xc=new Y("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return e!==null?e:[]}}),Jc=new Y("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return e!==null?e:{}}}),Vc=new Gc({explicit:[Zc,Xc,Jc]});function Qc(e){if(e===null)return!0;var t=e.length;return t===1&&e==="~"||t===4&&(e==="null"||e==="Null"||e==="NULL")}function tl(){return null}function el(e){return e===null}var nl=new Y("tag:yaml.org,2002:null",{kind:"scalar",resolve:Qc,construct:tl,predicate:el,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function il(e){if(e===null)return!1;var t=e.length;return t===4&&(e==="true"||e==="True"||e==="TRUE")||t===5&&(e==="false"||e==="False"||e==="FALSE")}function rl(e){return e==="true"||e==="True"||e==="TRUE"}function sl(e){return Object.prototype.toString.call(e)==="[object Boolean]"}var ol=new Y("tag:yaml.org,2002:bool",{kind:"scalar",resolve:il,construct:rl,predicate:sl,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function al(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function cl(e){return 48<=e&&e<=55}function ll(e){return 48<=e&&e<=57}function ul(e){if(e===null)return!1;var t=e.length,n=0,i=!1,r;if(!t)return!1;if(r=e[n],(r==="-"||r==="+")&&(r=e[++n]),r==="0"){if(n+1===t)return!0;if(r=e[++n],r==="b"){for(n++;n<t;n++)if(r=e[n],r!=="_"){if(r!=="0"&&r!=="1")return!1;i=!0}return i&&r!=="_"}if(r==="x"){for(n++;n<t;n++)if(r=e[n],r!=="_"){if(!al(e.charCodeAt(n)))return!1;i=!0}return i&&r!=="_"}if(r==="o"){for(n++;n<t;n++)if(r=e[n],r!=="_"){if(!cl(e.charCodeAt(n)))return!1;i=!0}return i&&r!=="_"}}if(r==="_")return!1;for(;n<t;n++)if(r=e[n],r!=="_"){if(!ll(e.charCodeAt(n)))return!1;i=!0}return!(!i||r==="_")}function hl(e){var t=e,n=1,i;if(t.indexOf("_")!==-1&&(t=t.replace(/_/g,"")),i=t[0],(i==="-"||i==="+")&&(i==="-"&&(n=-1),t=t.slice(1),i=t[0]),t==="0")return 0;if(i==="0"){if(t[1]==="b")return n*parseInt(t.slice(2),2);if(t[1]==="x")return n*parseInt(t.slice(2),16);if(t[1]==="o")return n*parseInt(t.slice(2),8)}return n*parseInt(t,10)}function fl(e){return Object.prototype.toString.call(e)==="[object Number]"&&e%1===0&&!X.isNegativeZero(e)}var dl=new Y("tag:yaml.org,2002:int",{kind:"scalar",resolve:ul,construct:hl,predicate:fl,represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),pl=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function ml(e){return!(e===null||!pl.test(e)||e[e.length-1]==="_")}function gl(e){var t,n;return t=e.replace(/_/g,"").toLowerCase(),n=t[0]==="-"?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),t===".inf"?n===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:t===".nan"?NaN:n*parseFloat(t,10)}var yl=/^[-+]?[0-9]+e/;function wl(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(X.isNegativeZero(e))return"-0.0";return n=e.toString(10),yl.test(n)?n.replace("e",".e"):n}function _l(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||X.isNegativeZero(e))}var bl=new Y("tag:yaml.org,2002:float",{kind:"scalar",resolve:ml,construct:gl,predicate:_l,represent:wl,defaultStyle:"lowercase"}),xl=Vc.extend({implicit:[nl,ol,dl,bl]}),vl=xl,as=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),cs=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function Al(e){return e===null?!1:as.exec(e)!==null||cs.exec(e)!==null}function Sl(e){var t,n,i,r,s,o,a,c=0,l=null,u,h,f;if(t=as.exec(e),t===null&&(t=cs.exec(e)),t===null)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(s=+t[4],o=+t[5],a=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(u=+t[10],h=+(t[11]||0),l=(u*60+h)*6e4,t[9]==="-"&&(l=-l)),f=new Date(Date.UTC(n,i,r,s,o,a,c)),l&&f.setTime(f.getTime()-l),f}function kl(e){return e.toISOString()}var Tl=new Y("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:Al,construct:Sl,instanceOf:Date,represent:kl});function Il(e){return e==="<<"||e===null}var Ol=new Y("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Il}),Ri=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
13
|
+
\r`;function El(e){if(e===null)return!1;var t,n,i=0,r=e.length,s=Ri;for(n=0;n<r;n++)if(t=s.indexOf(e.charAt(n)),!(t>64)){if(t<0)return!1;i+=6}return i%8===0}function Cl(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,s=Ri,o=0,a=[];for(t=0;t<r;t++)t%4===0&&t&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(t));return n=r%4*6,n===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):n===18?(a.push(o>>10&255),a.push(o>>2&255)):n===12&&a.push(o>>4&255),new Uint8Array(a)}function Nl(e){var t="",n=0,i,r,s=e.length,o=Ri;for(i=0;i<s;i++)i%3===0&&i&&(t+=o[n>>18&63],t+=o[n>>12&63],t+=o[n>>6&63],t+=o[n&63]),n=(n<<8)+e[i];return r=s%3,r===0?(t+=o[n>>18&63],t+=o[n>>12&63],t+=o[n>>6&63],t+=o[n&63]):r===2?(t+=o[n>>10&63],t+=o[n>>4&63],t+=o[n<<2&63],t+=o[64]):r===1&&(t+=o[n>>2&63],t+=o[n<<4&63],t+=o[64],t+=o[64]),t}function Ml(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var Dl=new Y("tag:yaml.org,2002:binary",{kind:"scalar",resolve:El,construct:Cl,predicate:Ml,represent:Nl}),Rl=Object.prototype.hasOwnProperty,Bl=Object.prototype.toString;function $l(e){if(e===null)return!0;var t=[],n,i,r,s,o,a=e;for(n=0,i=a.length;n<i;n+=1){if(r=a[n],o=!1,Bl.call(r)!=="[object Object]")return!1;for(s in r)if(Rl.call(r,s))if(!o)o=!0;else return!1;if(!o)return!1;if(t.indexOf(s)===-1)t.push(s);else return!1}return!0}function Hl(e){return e!==null?e:[]}var Pl=new Y("tag:yaml.org,2002:omap",{kind:"sequence",resolve:$l,construct:Hl}),Wl=Object.prototype.toString;function jl(e){if(e===null)return!0;var t,n,i,r,s,o=e;for(s=new Array(o.length),t=0,n=o.length;t<n;t+=1){if(i=o[t],Wl.call(i)!=="[object Object]"||(r=Object.keys(i),r.length!==1))return!1;s[t]=[r[0],i[r[0]]]}return!0}function Ll(e){if(e===null)return[];var t,n,i,r,s,o=e;for(s=new Array(o.length),t=0,n=o.length;t<n;t+=1)i=o[t],r=Object.keys(i),s[t]=[r[0],i[r[0]]];return s}var zl=new Y("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:jl,construct:Ll}),Fl=Object.prototype.hasOwnProperty;function Kl(e){if(e===null)return!0;var t,n=e;for(t in n)if(Fl.call(n,t)&&n[t]!==null)return!1;return!0}function Ul(e){return e!==null?e:{}}var Yl=new Y("tag:yaml.org,2002:set",{kind:"mapping",resolve:Kl,construct:Ul}),ql=vl.extend({implicit:[Tl,Ol],explicit:[Dl,Pl,zl,Yl]}),Dt=Object.prototype.hasOwnProperty,ln=1,ls=2,us=3,un=4,Dn=1,Gl=2,or=3,Zl=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Xl=/[\x85\u2028\u2029]/,Jl=/[,\[\]\{\}]/,hs=/^(?:!|!!|![a-z\-]+!)$/i,fs=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function ar(e){return Object.prototype.toString.call(e)}function mt(e){return e===10||e===13}function Ft(e){return e===9||e===32}function Q(e){return e===9||e===32||e===10||e===13}function oe(e){return e===44||e===91||e===93||e===123||e===125}function Vl(e){var t;return 48<=e&&e<=57?e-48:(t=e|32,97<=t&&t<=102?t-97+10:-1)}function Ql(e){return e===120?2:e===117?4:e===85?8:0}function tu(e){return 48<=e&&e<=57?e-48:-1}function cr(e){return e===48?"\0":e===97?"\x07":e===98?"\b":e===116||e===9?" ":e===110?`
|
|
14
|
+
`:e===118?"\v":e===102?"\f":e===114?"\r":e===101?"\x1B":e===32?" ":e===34?'"':e===47?"/":e===92?"\\":e===78?"
":e===95?" ":e===76?"\u2028":e===80?"\u2029":""}function eu(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}var ds=new Array(256),ps=new Array(256);for(var te=0;te<256;te++)ds[te]=cr(te)?1:0,ps[te]=cr(te);function nu(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||ql,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ms(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=zc(n),new At(t,n)}function k(e,t){throw ms(e,t)}function hn(e,t){e.onWarning&&e.onWarning.call(null,ms(e,t))}var lr={YAML:function(t,n,i){var r,s,o;t.version!==null&&k(t,"duplication of %YAML directive"),i.length!==1&&k(t,"YAML directive accepts exactly one argument"),r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),r===null&&k(t,"ill-formed argument of the YAML directive"),s=parseInt(r[1],10),o=parseInt(r[2],10),s!==1&&k(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,o!==1&&o!==2&&hn(t,"unsupported YAML version of the document")},TAG:function(t,n,i){var r,s;i.length!==2&&k(t,"TAG directive accepts exactly two arguments"),r=i[0],s=i[1],hs.test(r)||k(t,"ill-formed tag handle (first argument) of the TAG directive"),Dt.call(t.tagMap,r)&&k(t,'there is a previously declared suffix for "'+r+'" tag handle'),fs.test(s)||k(t,"ill-formed tag prefix (second argument) of the TAG directive");try{s=decodeURIComponent(s)}catch{k(t,"tag prefix is malformed: "+s)}t.tagMap[r]=s}};function Et(e,t,n,i){var r,s,o,a;if(t<n){if(a=e.input.slice(t,n),i)for(r=0,s=a.length;r<s;r+=1)o=a.charCodeAt(r),o===9||32<=o&&o<=1114111||k(e,"expected valid JSON character");else Zl.test(a)&&k(e,"the stream contains non-printable characters");e.result+=a}}function ur(e,t,n,i){var r,s,o,a;for(X.isObject(n)||k(e,"cannot merge mappings; the provided source object is unacceptable"),r=Object.keys(n),o=0,a=r.length;o<a;o+=1)s=r[o],Dt.call(t,s)||(t[s]=n[s],i[s]=!0)}function ae(e,t,n,i,r,s,o,a,c){var l,u;if(Array.isArray(r))for(r=Array.prototype.slice.call(r),l=0,u=r.length;l<u;l+=1)Array.isArray(r[l])&&k(e,"nested arrays are not supported inside keys"),typeof r=="object"&&ar(r[l])==="[object Object]"&&(r[l]="[object Object]");if(typeof r=="object"&&ar(r)==="[object Object]"&&(r="[object Object]"),r=String(r),t===null&&(t={}),i==="tag:yaml.org,2002:merge")if(Array.isArray(s))for(l=0,u=s.length;l<u;l+=1)ur(e,t,s[l],n);else ur(e,t,s,n);else!e.json&&!Dt.call(n,r)&&Dt.call(t,r)&&(e.line=o||e.line,e.lineStart=a||e.lineStart,e.position=c||e.position,k(e,"duplicated mapping key")),r==="__proto__"?Object.defineProperty(t,r,{configurable:!0,enumerable:!0,writable:!0,value:s}):t[r]=s,delete n[r];return t}function Bi(e){var t;t=e.input.charCodeAt(e.position),t===10?e.position++:t===13?(e.position++,e.input.charCodeAt(e.position)===10&&e.position++):k(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function j(e,t,n){for(var i=0,r=e.input.charCodeAt(e.position);r!==0;){for(;Ft(r);)r===9&&e.firstTabInLine===-1&&(e.firstTabInLine=e.position),r=e.input.charCodeAt(++e.position);if(t&&r===35)do r=e.input.charCodeAt(++e.position);while(r!==10&&r!==13&&r!==0);if(mt(r))for(Bi(e),r=e.input.charCodeAt(e.position),i++,e.lineIndent=0;r===32;)e.lineIndent++,r=e.input.charCodeAt(++e.position);else break}return n!==-1&&i!==0&&e.lineIndent<n&&hn(e,"deficient indentation"),i}function vn(e){var t=e.position,n;return n=e.input.charCodeAt(t),!!((n===45||n===46)&&n===e.input.charCodeAt(t+1)&&n===e.input.charCodeAt(t+2)&&(t+=3,n=e.input.charCodeAt(t),n===0||Q(n)))}function $i(e,t){t===1?e.result+=" ":t>1&&(e.result+=X.repeat(`
|
|
15
|
+
`,t-1))}function iu(e,t,n){var i,r,s,o,a,c,l,u,h=e.kind,f=e.result,p;if(p=e.input.charCodeAt(e.position),Q(p)||oe(p)||p===35||p===38||p===42||p===33||p===124||p===62||p===39||p===34||p===37||p===64||p===96||(p===63||p===45)&&(r=e.input.charCodeAt(e.position+1),Q(r)||n&&oe(r)))return!1;for(e.kind="scalar",e.result="",s=o=e.position,a=!1;p!==0;){if(p===58){if(r=e.input.charCodeAt(e.position+1),Q(r)||n&&oe(r))break}else if(p===35){if(i=e.input.charCodeAt(e.position-1),Q(i))break}else{if(e.position===e.lineStart&&vn(e)||n&&oe(p))break;if(mt(p))if(c=e.line,l=e.lineStart,u=e.lineIndent,j(e,!1,-1),e.lineIndent>=t){a=!0,p=e.input.charCodeAt(e.position);continue}else{e.position=o,e.line=c,e.lineStart=l,e.lineIndent=u;break}}a&&(Et(e,s,o,!1),$i(e,e.line-c),s=o=e.position,a=!1),Ft(p)||(o=e.position+1),p=e.input.charCodeAt(++e.position)}return Et(e,s,o,!1),e.result?!0:(e.kind=h,e.result=f,!1)}function ru(e,t){var n,i,r;if(n=e.input.charCodeAt(e.position),n!==39)return!1;for(e.kind="scalar",e.result="",e.position++,i=r=e.position;(n=e.input.charCodeAt(e.position))!==0;)if(n===39)if(Et(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),n===39)i=e.position,e.position++,r=e.position;else return!0;else mt(n)?(Et(e,i,r,!0),$i(e,j(e,!1,t)),i=r=e.position):e.position===e.lineStart&&vn(e)?k(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);k(e,"unexpected end of the stream within a single quoted scalar")}function su(e,t){var n,i,r,s,o,a;if(a=e.input.charCodeAt(e.position),a!==34)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;(a=e.input.charCodeAt(e.position))!==0;){if(a===34)return Et(e,n,e.position,!0),e.position++,!0;if(a===92){if(Et(e,n,e.position,!0),a=e.input.charCodeAt(++e.position),mt(a))j(e,!1,t);else if(a<256&&ds[a])e.result+=ps[a],e.position++;else if((o=Ql(a))>0){for(r=o,s=0;r>0;r--)a=e.input.charCodeAt(++e.position),(o=Vl(a))>=0?s=(s<<4)+o:k(e,"expected hexadecimal character");e.result+=eu(s),e.position++}else k(e,"unknown escape sequence");n=i=e.position}else mt(a)?(Et(e,n,i,!0),$i(e,j(e,!1,t)),n=i=e.position):e.position===e.lineStart&&vn(e)?k(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}k(e,"unexpected end of the stream within a double quoted scalar")}function ou(e,t){var n=!0,i,r,s,o=e.tag,a,c=e.anchor,l,u,h,f,p,d=Object.create(null),g,y,S,b;if(b=e.input.charCodeAt(e.position),b===91)u=93,p=!1,a=[];else if(b===123)u=125,p=!0,a={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=a),b=e.input.charCodeAt(++e.position);b!==0;){if(j(e,!0,t),b=e.input.charCodeAt(e.position),b===u)return e.position++,e.tag=o,e.anchor=c,e.kind=p?"mapping":"sequence",e.result=a,!0;n?b===44&&k(e,"expected the node content, but found ','"):k(e,"missed comma between flow collection entries"),y=g=S=null,h=f=!1,b===63&&(l=e.input.charCodeAt(e.position+1),Q(l)&&(h=f=!0,e.position++,j(e,!0,t))),i=e.line,r=e.lineStart,s=e.position,fe(e,t,ln,!1,!0),y=e.tag,g=e.result,j(e,!0,t),b=e.input.charCodeAt(e.position),(f||e.line===i)&&b===58&&(h=!0,b=e.input.charCodeAt(++e.position),j(e,!0,t),fe(e,t,ln,!1,!0),S=e.result),p?ae(e,a,d,y,g,S,i,r,s):h?a.push(ae(e,null,d,y,g,S,i,r,s)):a.push(g),j(e,!0,t),b=e.input.charCodeAt(e.position),b===44?(n=!0,b=e.input.charCodeAt(++e.position)):n=!1}k(e,"unexpected end of the stream within a flow collection")}function au(e,t){var n,i,r=Dn,s=!1,o=!1,a=t,c=0,l=!1,u,h;if(h=e.input.charCodeAt(e.position),h===124)i=!1;else if(h===62)i=!0;else return!1;for(e.kind="scalar",e.result="";h!==0;)if(h=e.input.charCodeAt(++e.position),h===43||h===45)Dn===r?r=h===43?or:Gl:k(e,"repeat of a chomping mode identifier");else if((u=tu(h))>=0)u===0?k(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?k(e,"repeat of an indentation width identifier"):(a=t+u-1,o=!0);else break;if(Ft(h)){do h=e.input.charCodeAt(++e.position);while(Ft(h));if(h===35)do h=e.input.charCodeAt(++e.position);while(!mt(h)&&h!==0)}for(;h!==0;){for(Bi(e),e.lineIndent=0,h=e.input.charCodeAt(e.position);(!o||e.lineIndent<a)&&h===32;)e.lineIndent++,h=e.input.charCodeAt(++e.position);if(!o&&e.lineIndent>a&&(a=e.lineIndent),mt(h)){c++;continue}if(e.lineIndent<a){r===or?e.result+=X.repeat(`
|
|
16
|
+
`,s?1+c:c):r===Dn&&s&&(e.result+=`
|
|
17
|
+
`);break}for(i?Ft(h)?(l=!0,e.result+=X.repeat(`
|
|
18
|
+
`,s?1+c:c)):l?(l=!1,e.result+=X.repeat(`
|
|
19
|
+
`,c+1)):c===0?s&&(e.result+=" "):e.result+=X.repeat(`
|
|
20
|
+
`,c):e.result+=X.repeat(`
|
|
21
|
+
`,s?1+c:c),s=!0,o=!0,c=0,n=e.position;!mt(h)&&h!==0;)h=e.input.charCodeAt(++e.position);Et(e,n,e.position,!1)}return!0}function hr(e,t){var n,i=e.tag,r=e.anchor,s=[],o,a=!1,c;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=s),c=e.input.charCodeAt(e.position);c!==0&&(e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,k(e,"tab characters must not be used in indentation")),!(c!==45||(o=e.input.charCodeAt(e.position+1),!Q(o))));){if(a=!0,e.position++,j(e,!0,-1)&&e.lineIndent<=t){s.push(null),c=e.input.charCodeAt(e.position);continue}if(n=e.line,fe(e,t,us,!1,!0),s.push(e.result),j(e,!0,-1),c=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&c!==0)k(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break}return a?(e.tag=i,e.anchor=r,e.kind="sequence",e.result=s,!0):!1}function cu(e,t,n){var i,r,s,o,a,c,l=e.tag,u=e.anchor,h={},f=Object.create(null),p=null,d=null,g=null,y=!1,S=!1,b;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=h),b=e.input.charCodeAt(e.position);b!==0;){if(!y&&e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,k(e,"tab characters must not be used in indentation")),i=e.input.charCodeAt(e.position+1),s=e.line,(b===63||b===58)&&Q(i))b===63?(y&&(ae(e,h,f,p,d,null,o,a,c),p=d=g=null),S=!0,y=!0,r=!0):y?(y=!1,r=!0):k(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,b=i;else{if(o=e.line,a=e.lineStart,c=e.position,!fe(e,n,ls,!1,!0))break;if(e.line===s){for(b=e.input.charCodeAt(e.position);Ft(b);)b=e.input.charCodeAt(++e.position);if(b===58)b=e.input.charCodeAt(++e.position),Q(b)||k(e,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(ae(e,h,f,p,d,null,o,a,c),p=d=g=null),S=!0,y=!1,r=!1,p=e.tag,d=e.result;else if(S)k(e,"can not read an implicit mapping pair; a colon is missed");else return e.tag=l,e.anchor=u,!0}else if(S)k(e,"can not read a block mapping entry; a multiline key may not be an implicit key");else return e.tag=l,e.anchor=u,!0}if((e.line===s||e.lineIndent>t)&&(y&&(o=e.line,a=e.lineStart,c=e.position),fe(e,t,un,!0,r)&&(y?d=e.result:g=e.result),y||(ae(e,h,f,p,d,g,o,a,c),p=d=g=null),j(e,!0,-1),b=e.input.charCodeAt(e.position)),(e.line===s||e.lineIndent>t)&&b!==0)k(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return y&&ae(e,h,f,p,d,null,o,a,c),S&&(e.tag=l,e.anchor=u,e.kind="mapping",e.result=h),S}function lu(e){var t,n=!1,i=!1,r,s,o;if(o=e.input.charCodeAt(e.position),o!==33)return!1;if(e.tag!==null&&k(e,"duplication of a tag property"),o=e.input.charCodeAt(++e.position),o===60?(n=!0,o=e.input.charCodeAt(++e.position)):o===33?(i=!0,r="!!",o=e.input.charCodeAt(++e.position)):r="!",t=e.position,n){do o=e.input.charCodeAt(++e.position);while(o!==0&&o!==62);e.position<e.length?(s=e.input.slice(t,e.position),o=e.input.charCodeAt(++e.position)):k(e,"unexpected end of the stream within a verbatim tag")}else{for(;o!==0&&!Q(o);)o===33&&(i?k(e,"tag suffix cannot contain exclamation marks"):(r=e.input.slice(t-1,e.position+1),hs.test(r)||k(e,"named tag handle cannot contain such characters"),i=!0,t=e.position+1)),o=e.input.charCodeAt(++e.position);s=e.input.slice(t,e.position),Jl.test(s)&&k(e,"tag suffix cannot contain flow indicator characters")}s&&!fs.test(s)&&k(e,"tag name cannot contain such characters: "+s);try{s=decodeURIComponent(s)}catch{k(e,"tag name is malformed: "+s)}return n?e.tag=s:Dt.call(e.tagMap,r)?e.tag=e.tagMap[r]+s:r==="!"?e.tag="!"+s:r==="!!"?e.tag="tag:yaml.org,2002:"+s:k(e,'undeclared tag handle "'+r+'"'),!0}function uu(e){var t,n;if(n=e.input.charCodeAt(e.position),n!==38)return!1;for(e.anchor!==null&&k(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;n!==0&&!Q(n)&&!oe(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&k(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function hu(e){var t,n,i;if(i=e.input.charCodeAt(e.position),i!==42)return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;i!==0&&!Q(i)&&!oe(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&k(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),Dt.call(e.anchorMap,n)||k(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],j(e,!0,-1),!0}function fe(e,t,n,i,r){var s,o,a,c=1,l=!1,u=!1,h,f,p,d,g,y;if(e.listener!==null&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,s=o=a=un===n||us===n,i&&j(e,!0,-1)&&(l=!0,e.lineIndent>t?c=1:e.lineIndent===t?c=0:e.lineIndent<t&&(c=-1)),c===1)for(;lu(e)||uu(e);)j(e,!0,-1)?(l=!0,a=s,e.lineIndent>t?c=1:e.lineIndent===t?c=0:e.lineIndent<t&&(c=-1)):a=!1;if(a&&(a=l||r),(c===1||un===n)&&(ln===n||ls===n?g=t:g=t+1,y=e.position-e.lineStart,c===1?a&&(hr(e,y)||cu(e,y,g))||ou(e,g)?u=!0:(o&&au(e,g)||ru(e,g)||su(e,g)?u=!0:hu(e)?(u=!0,(e.tag!==null||e.anchor!==null)&&k(e,"alias node should not have any properties")):iu(e,g,ln===n)&&(u=!0,e.tag===null&&(e.tag="?")),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):c===0&&(u=a&&hr(e,y))),e.tag===null)e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);else if(e.tag==="?"){for(e.result!==null&&e.kind!=="scalar"&&k(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),h=0,f=e.implicitTypes.length;h<f;h+=1)if(d=e.implicitTypes[h],d.resolve(e.result)){e.result=d.construct(e.result),e.tag=d.tag,e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);break}}else if(e.tag!=="!"){if(Dt.call(e.typeMap[e.kind||"fallback"],e.tag))d=e.typeMap[e.kind||"fallback"][e.tag];else for(d=null,p=e.typeMap.multi[e.kind||"fallback"],h=0,f=p.length;h<f;h+=1)if(e.tag.slice(0,p[h].tag.length)===p[h].tag){d=p[h];break}d||k(e,"unknown tag !<"+e.tag+">"),e.result!==null&&d.kind!==e.kind&&k(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+d.kind+'", not "'+e.kind+'"'),d.resolve(e.result,e.tag)?(e.result=d.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):k(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||u}function fu(e){var t=e.position,n,i,r,s=!1,o;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(o=e.input.charCodeAt(e.position))!==0&&(j(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||o!==37));){for(s=!0,o=e.input.charCodeAt(++e.position),n=e.position;o!==0&&!Q(o);)o=e.input.charCodeAt(++e.position);for(i=e.input.slice(n,e.position),r=[],i.length<1&&k(e,"directive name must not be less than one character in length");o!==0;){for(;Ft(o);)o=e.input.charCodeAt(++e.position);if(o===35){do o=e.input.charCodeAt(++e.position);while(o!==0&&!mt(o));break}if(mt(o))break;for(n=e.position;o!==0&&!Q(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(n,e.position))}o!==0&&Bi(e),Dt.call(lr,i)?lr[i](e,i,r):hn(e,'unknown document directive "'+i+'"')}if(j(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,j(e,!0,-1)):s&&k(e,"directives end mark is expected"),fe(e,e.lineIndent-1,un,!1,!0),j(e,!0,-1),e.checkLineBreaks&&Xl.test(e.input.slice(t,e.position))&&hn(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&vn(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,j(e,!0,-1));return}if(e.position<e.length-1)k(e,"end of the stream or a document separator is expected");else return}function gs(e,t){e=String(e),t=t||{},e.length!==0&&(e.charCodeAt(e.length-1)!==10&&e.charCodeAt(e.length-1)!==13&&(e+=`
|
|
22
|
+
`),e.charCodeAt(0)===65279&&(e=e.slice(1)));var n=new nu(e,t),i=e.indexOf("\0");for(i!==-1&&(n.position=i,k(n,"null byte is not allowed in input")),n.input+="\0";n.input.charCodeAt(n.position)===32;)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)fu(n);return n.documents}function du(e,t,n){t!==null&&typeof t=="object"&&typeof n>"u"&&(n=t,t=null);var i=gs(e,n);if(typeof t!="function")return i;for(var r=0,s=i.length;r<s;r+=1)t(i[r])}function pu(e,t){var n=gs(e,t);if(n.length!==0){if(n.length===1)return n[0];throw new At("expected a single document in the stream, but found more")}}var mu=du,gu=pu,yu={loadAll:mu,load:gu},wu=yu.load,wt;function _u(e){return{lang:(e==null?void 0:e.lang)??(wt==null?void 0:wt.lang),message:e==null?void 0:e.message,abortEarly:(e==null?void 0:e.abortEarly)??(wt==null?void 0:wt.abortEarly),abortPipeEarly:(e==null?void 0:e.abortPipeEarly)??(wt==null?void 0:wt.abortPipeEarly)}}var Rn;function bu(e){return Rn==null?void 0:Rn.get(e)}var Bn;function xu(e){return Bn==null?void 0:Bn.get(e)}var $n;function vu(e,t){var n;return(n=$n==null?void 0:$n.get(e))==null?void 0:n.get(t)}function de(e){var n,i;const t=typeof e;return t==="string"?`"${e}"`:t==="number"||t==="bigint"||t==="boolean"?`${e}`:t==="object"||t==="function"?(e&&((i=(n=Object.getPrototypeOf(e))==null?void 0:n.constructor)==null?void 0:i.name))??"null":t}function Rt(e,t,n,i,r){const s=r&&"input"in r?r.input:n.value,o=(r==null?void 0:r.expected)??e.expects??null,a=(r==null?void 0:r.received)??de(s),c={kind:e.kind,type:e.type,input:s,expected:o,received:a,message:`Invalid ${t}: ${o?`Expected ${o} but r`:"R"}eceived ${a}`,requirement:e.requirement,path:r==null?void 0:r.path,issues:r==null?void 0:r.issues,lang:i.lang,abortEarly:i.abortEarly,abortPipeEarly:i.abortPipeEarly},l=e.kind==="schema",u=(r==null?void 0:r.message)??e.message??vu(e.reference,c.lang)??(l?xu(c.lang):null)??i.message??bu(c.lang);u&&(c.message=typeof u=="function"?u(c):u),l&&(n.typed=!1),n.issues?n.issues.push(c):n.issues=[c]}function Au(e,t){const n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function Qn(e,t){return{kind:"validation",type:"max_value",reference:Qn,async:!1,expects:`<=${e instanceof Date?e.toJSON():de(e)}`,requirement:e,message:t,_run(n,i){return n.typed&&n.value>this.requirement&&Rt(this,"value",n,i,{received:n.value instanceof Date?n.value.toJSON():de(n.value)}),n}}}function ti(e,t){return{kind:"validation",type:"min_value",reference:ti,async:!1,expects:`>=${e instanceof Date?e.toJSON():de(e)}`,requirement:e,message:t,_run(n,i){return n.typed&&n.value<this.requirement&&Rt(this,"value",n,i,{received:n.value instanceof Date?n.value.toJSON():de(n.value)}),n}}}function Su(e,t,n){return typeof e.default=="function"?e.default(t,n):e.default}function ys(e,t){return{kind:"schema",type:"array",reference:ys,expects:"Array",async:!1,item:e,message:t,_run(n,i){var s;const r=n.value;if(Array.isArray(r)){n.typed=!0,n.value=[];for(let o=0;o<r.length;o++){const a=r[o],c=this.item._run({typed:!1,value:a},i);if(c.issues){const l={type:"array",origin:"value",input:r,key:o,value:a};for(const u of c.issues)u.path?u.path.unshift(l):u.path=[l],(s=n.issues)==null||s.push(u);if(n.issues||(n.issues=c.issues),i.abortEarly){n.typed=!1;break}}c.typed||(n.typed=!1),n.value.push(c.value)}}else Rt(this,"type",n,i);return n}}}function fn(e){return{kind:"schema",type:"number",reference:fn,expects:"number",async:!1,message:e,_run(t,n){return typeof t.value=="number"&&!isNaN(t.value)?t.typed=!0:Rt(this,"type",t,n),t}}}function ht(e,...t){const n={kind:"schema",type:"optional",reference:ht,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,_run(i,r){return i.value===void 0&&("default"in this&&(i.value=Su(this,i,r)),i.value===void 0)?(i.typed=!0,i):this.wrapped._run(i,r)}};return 0 in t&&(n.default=t[0]),n}function ei(e,t){return{kind:"schema",type:"picklist",reference:ei,expects:Au(e.map(de),"|"),async:!1,options:e,message:t,_run(n,i){return this.options.includes(n.value)?n.typed=!0:Rt(this,"type",n,i),n}}}function pe(e,t){return{kind:"schema",type:"strict_object",reference:pe,expects:"Object",async:!1,entries:e,message:t,_run(n,i){var s;const r=n.value;if(r&&typeof r=="object"){n.typed=!0,n.value={};for(const o in this.entries){const a=r[o],c=this.entries[o]._run({typed:!1,value:a},i);if(c.issues){const l={type:"object",origin:"value",input:r,key:o,value:a};for(const u of c.issues)u.path?u.path.unshift(l):u.path=[l],(s=n.issues)==null||s.push(u);if(n.issues||(n.issues=c.issues),i.abortEarly){n.typed=!1;break}}c.typed||(n.typed=!1),(c.value!==void 0||o in r)&&(n.value[o]=c.value)}if(!n.issues||!i.abortEarly){for(const o in r)if(!(o in this.entries)){const a=r[o];Rt(this,"type",n,i,{input:a,expected:"never",path:[{type:"object",origin:"value",input:r,key:o,value:a}]});break}}}else Rt(this,"type",n,i);return n}}}function dn(e){return{kind:"schema",type:"string",reference:dn,expects:"string",async:!1,message:e,_run(t,n){return typeof t.value=="string"?t.typed=!0:Rt(this,"type",t,n),t}}}function fr(...e){return{...e[0],pipe:e,_run(t,n){for(const i of e)if(i.kind!=="metadata"){if(t.issues&&(i.kind==="schema"||i.kind==="transformation")){t.typed=!1;break}(!t.issues||!n.abortEarly&&!n.abortPipeEarly)&&(t=i._run(t,n))}return t}}}function ku(e,t,n){const i=e._run({typed:!1,value:t},_u(n));return{typed:i.typed,success:!i.issues,output:i.value,issues:i.issues}}const Qe=ht(pe({discard:ht(dn(),""),hand:ht(dn(),""),score:ht(fn(),25e3)}),{discard:"",hand:"",score:25e3}),Tu=pe({[_.E]:Qe,[_.S]:Qe,[_.W]:Qe,[_.N]:Qe}),Iu=pe({round:ht(ei(Object.keys(pi)),L.E1),sticks:ht(pe({reach:ht(fr(fn(),ti(0,""),Qn(9,"")),0),dead:ht(fr(fn(),ti(0,""),Qn(9,"")),0)}),{reach:0,dead:0}),doras:ht(ys(dn()),[_.S]),front:ht(ei(Object.keys(di)),_.E)}),Ou=pe({...Tu.entries,board:Iu}),ws=e=>{const t=_s(e);return bs(t)},_s=e=>{const t=wu(e),n=ku(Ou,t.table);if(!n.success)throw n.issues;return n.output},bs=e=>{const t=e.board.front,n=Eu(t),i=a=>e[a].discard.replace(/\r?\n/g,""),r={front:new at(i(n.front)).tiles(),right:new at(i(n.right)).tiles(),opposite:new at(i(n.opposite)).tiles(),left:new at(i(n.left)).tiles()},s={front:new at(e[n.front].hand).parse(),right:new at(e[n.right].hand).parse(),opposite:new at(e[n.opposite].hand).parse(),left:new at(e[n.left].hand).parse()},o={round:pi[e.board.round],frontPlace:di[t],sticks:e.board.sticks,doras:e.board.doras.map(a=>w.from(a)),scores:{front:e[n.front].score,right:e[n.right].score,opposite:e[n.opposite].score,left:e[n.left].score}};return{discards:r,hands:s,scoreBoard:o}},Eu=e=>{const t=(r,s)=>{let o=`${s}w`;return s>4&&(o=`${s-r}w`),o},n=Number(e[0]);return{front:e,right:t(n,n+1),opposite:t(n,n+2),left:t(n,n+3)}};function G(e,t=!1){const n={[_.E]:e,[_.S]:e,[_.W]:e,[_.N]:e};if(t)for(let i of Object.values(_))n[i]=structuredClone(e);return n}class Ge{constructor(t,n=!1){v(this,"data");this.data={[m.M]:[0,0,0,0,0,0,0,0,0,0],[m.P]:[0,0,0,0,0,0,0,0,0,0],[m.S]:[0,0,0,0,0,0,0,0,0,0],[m.Z]:[0,0,0,0,0,0,0,0],[m.BACK]:["untouchable",0],called:[],reached:!1,tsumo:null},this.init(t,n)}init(t,n){const i=new at(t).parse();for(let r of i){if(r.isCalled()){this.data.called=[...this.called,r];continue}else if(r.is(x.TSUMO)){const s=r.tiles[0];this.inc([s]),this.data.tsumo=s;continue}else if(r.is(x.HAND)){this.inc(r.tiles);continue}else if(t.split("").every(s=>s===m.BACK)){this.inc(r.tiles);continue}else if(n){this.inc(r.tiles);continue}throw new Error(`unexpected block ${r.type} ${r.toString()}`)}}get hands(){const t=[];for(let n of Object.values(m))for(let i=1;i<this.getArrayLen(n);i++){let r=this.get(n,i);n!=m.Z&&i==5&&this.get(n,0)>0&&(r-=this.get(n,0),t.push(new w(n,0)));for(let s=0;s<r;s++)t.push(new w(n,i))}if(this.drawn!=null){const n=this.drawn,i=t.findIndex(r=>r.equals(n));R(i>=0,`hand has drawn: ${this.drawn} but no tile in hands: ${t.join("")}`),t[i]=t[i].clone({add:A.TSUMO})}return R(t.length>0,`no tiles in hand ${t.length}, called: ${this.called}, data: ${JSON.stringify(this.data,null,2)}`),t}toString(){let t="";for(let s of this.called)t=`${t},${s.toString()}`;let n="";this.drawn&&(n=`,${this.drawn.toString()}`);const i=this.hands.filter(s=>!s.has(A.TSUMO));return`${new yn(i).toString()}${n}${t}`}get called(){return this.data.called}get reached(){return this.data.reached}get drawn(){return this.data.tsumo}get menzen(){return!this.called.some(t=>!(t instanceof Z))}getArrayLen(t){return this.data[t].length}sum(t){let n=0;for(let i=1;i<this.getArrayLen(t);i++)n+=this.get(t,i);return n}get(t,n){return t==m.BACK?this.data[t][1]:this.data[t][n]}inc(t){const n=[];for(let i of t){if(i.t!=m.BACK&&this.get(i.t,i.n)>=4)throw this.dec(n),new Error(`unable to increase ${i} in ${this.toString()}`);if(n.push(i),it(i)&&(this.data[i.t][5]+=1),i.t==m.BACK?this.data[i.t][1]+=1:this.data[i.t][i.n]+=1,nt(i)&&this.get(i.t,5)==4&&this.get(i.t,0)==0){this.data[i.t][0]=1;const r=n.pop().clone({n:0});n.push(r)}}return n}dec(t){const n=[];for(let i of t){if(this.get(i.t,i.n)<1)throw this.inc(n),new Error(`unable to decrease ${i.toString()} in ${this.toString()}`);if(n.push(i),it(i)&&(this.data[i.t][5]-=1),i.t==m.BACK?this.data[i.t][1]-=1:this.data[i.t][i.n]-=1,nt(i)&&this.get(i.t,5)==0&&this.get(i.t,0)>0){this.data[i.t][0]=0;const r=n.pop().clone({n:0});n.push(r)}}return n}draw(t){const n=t.clone({add:A.TSUMO});this.inc([n]),this.data.tsumo=n}discard(t){this.dec([t]),this.data.tsumo=null}reach(){if(!this.menzen)throw new Error("cannot reach");if(this.data.reached)throw new Error("already reached");this.data.reached=!0}call(t){if(!(t instanceof pt||t instanceof ft||t instanceof xt))throw new Error(`unexpected input ${t} ${t.type}`);const n=t.tiles.filter(i=>!i.has(A.HORIZONTAL));if(n.length!=t.tiles.length-1)throw new Error(`removal: ${n} block: ${t}`);this.dec(n),this.data.called=[...this.called,t],this.data.tsumo=null}kan(t){if(t instanceof Z){let n=t.tiles[0];it(n)&&(n=new w(n.t,5)),this.dec([n,n,n,n]),this.data.called=[...this.called,t],this.data.tsumo=null;return}if(t instanceof vt){const n=this.data.called.findIndex(r=>r.is(x.PON)&&r.tiles[0].equals(t.tiles[0],!0));if(n==-1)throw new Error(`unable to find ${t.tiles[0]}`);let i=t.tiles[0];it(i)&&(i=new w(i.t,5)),this.dec([i]),this.data.called=[...this.called.slice(0,n),...this.called.slice(n+1),t],this.data.tsumo=null;return}throw new Error(`unexpected input ${t}`)}clone(){const t=new Ge(this.toString());return t.data.reached=this.data.reached,t}}class Ze{constructor(t){v(this,"hand");this.hand=t}calc(){return Math.min(this.sevenPairs(),this.thirteenOrphans(),this.fourSetsOnePair())}sevenPairs(){if(this.hand.called.length>0)return 1/0;let t=0,n=0;for(let i of Object.values(m))if(i!=m.BACK)for(let r=1;r<this.hand.getArrayLen(i);r++)this.hand.get(i,r)==2&&t++,this.hand.get(i,r)==1&&n++;return t>7&&(t=7),t+n>=7&&(n=7-t),13-2*t-n}thirteenOrphans(){if(this.hand.called.length>0)return 1/0;let t=0,n=0;for(let i of Object.values(m)){if(i==m.BACK)continue;const r=i==m.Z?$e:bt;for(let s of r)this.hand.get(i,s)>=1&&t++,this.hand.get(i,s)>=2&&n++}return n>=1?12-t:13-t}fourSetsOnePair(){const t=i=>{const r=[0,0,0],s=m.Z;for(let p=1;p<this.hand.getArrayLen(s);p++)this.hand.get(s,p)>=3?r[0]++:this.hand.get(s,p)==2?r[1]++:this.hand.get(s,p)==1&&r[2]++;const o=[0,0,0],a=this.hand.get(m.BACK,0),c=a%3;o[0]=Math.floor(a/3),c==2&&(o[1]=1),c==1&&(o[2]=1);let l=13;const u=this.commonByType(m.M),h=this.commonByType(m.P),f=this.commonByType(m.S);for(let p of[u.patternA,u.patternB])for(let d of[h.patternA,h.patternB])for(let g of[f.patternA,f.patternB]){const y=[this.hand.called.length,0,0];for(let b=0;b<3;b++)y[b]+=p[b]+d[b]+g[b]+r[b]+o[b];let S=this.calcCommon(y[0],y[1],y[2],i);S<l&&(l=S)}return l};let n=t(!1);for(let i of Object.values(m))for(let r=1;r<this.hand.getArrayLen(i);r++)if(this.hand.get(i,r)>=2){const s=this.hand.dec([new w(i,r),new w(i,r)]),o=t(!0);this.hand.inc(s),o<n&&(n=o)}return n}commonByType(t,n=1){if(t==m.BACK||t==m.Z)throw new Error(`expect number type but ${t}`);if(n>9)return this.groupRemainingTiles(t);let i=this.commonByType(t,n+1);if(n<=7&&this.hand.get(t,n)>0&&this.hand.get(t,n+1)>0&&this.hand.get(t,n+2)>0){const r=this.hand.dec([new w(t,n),new w(t,n+1),new w(t,n+2)]),s=this.commonByType(t,n);this.hand.inc(r),s.patternA[0]++,s.patternB[0]++,(s.patternA[2]<i.patternA[2]||s.patternA[2]==i.patternA[2]&&s.patternA[1]<i.patternA[1])&&(i.patternA=s.patternA),(s.patternB[0]>i.patternB[0]||s.patternB[0]==i.patternB[0]&&s.patternB[1]>i.patternB[1])&&(i.patternB=s.patternB)}if(this.hand.get(t,n)>=3){const r=this.hand.dec([new w(t,n),new w(t,n),new w(t,n)]),s=this.commonByType(t,n);this.hand.inc(r),s.patternA[0]++,s.patternB[0]++,(s.patternA[2]<i.patternA[2]||s.patternA[2]==i.patternA[2]&&s.patternA[1]<i.patternA[1])&&(i.patternA=s.patternA),(s.patternB[0]>i.patternB[0]||s.patternB[0]==i.patternB[0]&&s.patternB[1]>i.patternB[1])&&(i.patternB=s.patternB)}return i}groupRemainingTiles(t){let n=0,i=0,r=0;for(let s=1;s<this.hand.getArrayLen(t);s++)r+=this.hand.get(t,s),s<=7&&this.hand.get(t,s+1)==0&&this.hand.get(t,s+2)==0&&(n+=r>>1,i+=r%2,r=0);return n+=r>>1,i+=r%2,{patternA:[0,n,i],patternB:[0,n,i]}}calcCommon(t,n,i,r){let s=r?4:5;return t>4&&(n+=t-4,t=4),t+n>4&&(i+=t+n-4,n=4-t),t+n+i>s&&(i=s-t-n),r&&n++,13-t*3-n*2-i}}class xs{constructor(t){v(this,"hand");this.hand=t}calc(t){return this.hand.drawn!=null&&(t=this.hand.drawn),this.markDrawn([...this.sevenPairs(),...this.thirteenOrphans(),...this.nineGates(),...this.fourSetsOnePair()],t)}markDrawn(t,n){if(t.length==0)return[];const i=this.hand.drawn!=null||n.has(A.TSUMO)?A.TSUMO:A.RON,r=[];for(let o=0;o<t.length;o++){const a=t[o],c={};for(let l=0;l<a.length;l++){const u=a[l];if(u.isCalled())continue;const h=u.tiles.findIndex(p=>p.equals(n,!0));if(h<0)continue;const f=vs(u);c[f]||(c[f]=!0,r.push([o,l,h]))}}if(r.length==0)throw new Error(`found no tile ${n.toString()} in hands ${t[0].toString()}`);const s=[];for(let[o,a,c]of r){const u=t[o].map(p=>p.clone()),h=u[a],f=h.tiles[c].clone({add:i});u[a]=h.clone({replace:{idx:c,tile:f}}),s.push(u)}return s}sevenPairs(){if(this.hand.called.length>0)return[];const t=[];for(let n of Object.values(m))if(n!=m.BACK)for(let i=1;i<this.hand.getArrayLen(n);i++){const r=this.hand.get(n,i);if(r==2)t.push(new J(new w(n,i),new w(n,i)));else{if(r==0)continue;return[]}}return[t]}thirteenOrphans(){const t=[];let n="";for(let i of Object.values(m)){if(i==m.BACK)continue;const r=i==m.Z?$e:bt;for(let s of r)if(this.hand.get(i,s)==1)t.push(new gi(new w(i,s)));else if(this.hand.get(i,s)==2&&n=="")t.unshift(new J(new w(i,s),new w(i,s)));else return[]}return[t]}nineGates(){const t=(n,i,r)=>r.includes(this.hand.get(n,i));for(let n of Object.values(m)){if(n==m.BACK||n==m.Z)continue;const i=t(n,1,[3,4])&&t(n,9,[3,4])&&t(n,2,[1,2])&&t(n,3,[1,2])&&t(n,4,[1,2])&&t(n,5,[1,2])&&t(n,6,[1,2])&&t(n,7,[1,2])&&t(n,8,[1,2]),r=this.hand.sum(n)==14;if(i&&r)return[[new yn(this.hand.hands)]]}return[]}fourSetsOnePair(){let t=[];for(let n of Object.values(m))for(let i=1;i<this.hand.getArrayLen(n);i++)if(this.hand.get(n,i)>=2){const r=this.hand.dec([new w(n,i),new w(n,i)]),s=this.commonAll().filter(o=>o.length==4).map(o=>(o.unshift(new J(r[0],r[1])),o));t=[...t,...s],this.hand.inc(r)}return t}commonAll(){const t=()=>{const s=[],o=m.Z;for(let a=1;a<this.hand.getArrayLen(o);a++)if(this.hand.get(o,a)!=0){if(this.hand.get(o,a)!=3)return[];s.push(new ut([new w(o,a),new w(o,a),new w(o,a)]))}return s.length==0?[]:[s]},n=()=>{const s=[],o=m.BACK,a=this.hand.get(o,0);return a<3?[]:(Array(Math.floor(a/3)).fill(void 0).map(c=>{s.push(new ut([new w(o,0),new w(o,0),new w(o,0)]))}),s.length==0?[]:[s])},i=[this.commonByType(m.M),this.commonByType(m.P),this.commonByType(m.S),t(),n(),[this.hand.called.concat()]].sort((s,o)=>o.length-s.length),r=i[0].concat();for(let s=0;s<r.length;s++)for(let o=1;o<i.length;o++)for(let a of i[o])r[s]=[...r[s],...a];return r}commonByType(t,n=1){if(n>9)return[];if(this.hand.get(t,n)==0)return this.commonByType(t,n+1);const i=[];if(n<=7&&this.hand.get(t,n)>0&&this.hand.get(t,n+1)>0&&this.hand.get(t,n+2)>0){const r=this.hand.dec([new w(t,n),new w(t,n+1),new w(t,n+2)]),s=this.commonByType(t,n);this.hand.inc(r),s.length==0&&s.push([]);for(let o of s)o.unshift(new Tt([r[0],r[1],r[2]])),i.push(o)}if(this.hand.get(t,n)==3){const r=this.hand.dec([new w(t,n),new w(t,n),new w(t,n)]),s=this.commonByType(t,n);this.hand.inc(r),s.length==0&&s.push([]);for(let o of s)o.unshift(new ut([r[0],r[1],r[2]])),i.push(o)}return i}}const $e=[1,2,3,4,5,6,7],bt=[1,9],en=e=>{var n;const t=e.boardContext;return{...e,hand:e.hand.map(z.from),boardContext:{...t,doraMarkers:t.doraMarkers.map(w.from),blindDoraMarkers:(n=t.blindDoraMarkers)==null?void 0:n.map(w.from)}}};class ni{constructor(t,n){v(this,"hand");v(this,"cfg");this.hand=t,this.cfg={doras:n.doraMarkers.map(i=>pr(i)),blindDoras:n.blindDoraMarkers==null?[]:n.blindDoraMarkers.map(i=>pr(i)),roundWind:w.from(n.round.substring(0,2)),myWind:w.from(n.myWind),reached:n.reached??0,sticks:n.sticks??{dead:0,reach:0},replacementWin:n.replacementWin??!1,quadWin:n.quadWin??!1,finalWallWin:n.finalWallWin??!1,finalDiscardWin:n.finalDiscardWin??!1,oneShotWin:n.oneShotWin??!1,orig:n}}calc(t){const n=this.calcPatterns(t);if(n.length==0)return!1;let i=[0,0],r=0;for(let d=0;d<n.length;d++){const g=n[d],y=g.points.reduce((S,b)=>S+b.double,0);(y>i[0]||y==i[0]&&g.fu>i[1])&&(r=d,i[0]=y,i[1]=g.fu)}const s=(d,g=100)=>Math.ceil(d/g)*g,o=i[1]!=25?s(i[1],10):25,a=i[0];let c=o*2**(a+2);switch(a){case 26:c=16e3;break;case 13:c=8e3;break;case 12:case 11:c=6e3;break;case 10:case 9:case 8:c=6e3;break;case 7:case 6:c=4e3;break;case 5:c=2e3;break}a>13&&a<26&&(c=8e3);const l=n[r].hand.some(d=>d.tiles.some(g=>g.has(A.TSUMO))),u=this.cfg.orig.myWind,h=u==_.E,f=G(0);if(l){const d=this.cfg.sticks.dead*100;if(h){const g=s(c*2);f["1w"]+=g*3+d*3,f["2w"]-=g+d,f["3w"]-=g+d,f["4w"]-=g+d}else for(let g of Object.values(_)){if(g==u)continue;const y=g==_.E?2:1,S=s(c*y)+d;f[g]-=S,f[u]+=S}}else{const d=this.cfg.sticks.dead*300;if(this.cfg.orig.ronWind==null)throw new Error("ron wind is not specified in the parameters");const y=s(c*(h?6:4))+d;f[u]+=y,f[this.cfg.orig.ronWind]-=y}return f[u]+=1e3*this.cfg.sticks.reach,{deltas:f,sum:a,fu:o,points:n[r].points,point:f[u],hand:n[r].hand,boardContext:this.cfg.orig}}calcPatterns(t){const n=[];if(t.length==0)return n;for(let i of t){const r=[...this.dA13(i),...this.dB13(i),...this.dC13(i),...this.dD13(i),...this.dE13(i),...this.dF13(i),...this.dG13(i),...this.dH13(i),...this.dI13(i),...this.dJ13(i),...this.dK13(i)];r.length!=0&&n.push({points:r,fu:30,hand:i})}if(n.length>0)return n;for(let i of t){const r=this.calcFu(i),s=[...this.dA1(i),...this.dB1(i),...this.dC1(i),...this.dD1(i),...this.dE1(i),...this.dF1(i),...this.dG1(i),...this.dH1(i),...this.dI1(i),...this.dJ1(i),...this.dK1(i),...this.dA2(i),...this.dB2(i),...this.dC2(i),...this.dD2(i),...this.dE2(i),...this.dF2(i),...this.dG2(i),...this.dH2(i),...this.dI2(i),...this.dJ2(i),...this.dA3(i),...this.dB3(i),...this.dC3(i),...this.dA6(i)];s.length>0&&s.push(...this.dX1(i)),n.push({points:s,fu:r,hand:i})}return n}minus(){return this.hand.menzen?0:1}dA1(t){return this.cfg.reached==1?[{name:"立直",double:1}]:this.cfg.reached==2?[{name:"ダブルリーチ",double:2}]:[]}dB1(t){return this.minus()!=0?[]:(this.hand.drawn==null,t.some(i=>i.tiles.some(r=>r.has(A.TSUMO)))?[{name:"門前清自摸和",double:1}]:[])}dC1(t){if(this.minus()!=0)return[];const n="平和",i=this.calcFu(t);return i==20?[{name:n,double:1}]:!t.some(r=>r.tiles.some(s=>s.has(A.TSUMO)))&&i==30?[{name:n,double:1}]:[]}dD1(t){return t.some(i=>i.tiles.some(r=>r.t==m.Z||bt.includes(r.n)))?[]:[{name:"断么九",double:1}]}dE1(t){return this.minus()!=0?[]:dr(t)==1?[{name:"一盃口",double:1}]:[]}dF1(t){const n=[];return t.forEach(i=>{if(i instanceof J)return;const r=i.tiles[0];r.t==m.Z&&(r.equals(this.cfg.myWind)?n.push({name:"自風",double:1}):r.equals(this.cfg.roundWind)?n.push({name:"場風",double:1}):r.n==5?n.push({name:"白",double:1}):r.n==6?n.push({name:"發",double:1}):r.n==7&&n.push({name:"中",double:1}))}),n}dG1(t){return this.cfg.oneShotWin?[{name:"一発",double:1}]:[]}dH1(t){return this.cfg.replacementWin?[{name:"嶺上開花",double:1}]:[]}dI1(t){return this.cfg.quadWin?[{name:"搶槓",double:1}]:[]}dJ1(t){return this.cfg.finalWallWin?[{name:"海底摸月",double:1}]:[]}dK1(t){return this.cfg.finalDiscardWin?[{name:"河底撈魚",double:1}]:[]}dX1(t){let n=0,i=0,r=0;for(let o of t)for(let a of o.tiles){for(let c of this.cfg.doras)a.equals(c,!0)&&n++;for(let c of this.cfg.blindDoras)a.equals(c,!0)&&r++;it(a)&&i++}const s=[];return n>0&&s.push({name:"ドラ",double:n}),i>0&&s.push({name:"赤ドラ",double:i}),this.hand.reached&&r>0&&s.push({name:"裏ドラ",double:r}),s}dA2(t){return t.length==7?[{name:"七対子",double:2}]:[]}dB2(t){const n=i=>i instanceof Tt||i instanceof ft;for(let i of t){if(!n(i))continue;const r=$t(i);if(r.t==m.Z)continue;const s=[m.M,m.P,m.S].filter(c=>c!=r.t),o=t.some(c=>{const l=new w(s[0],r.n);return n(c)&&l.equals($t(c),!0)}),a=t.some(c=>{const l=new w(s[1],r.n);return n(c)&&l.equals($t(c),!0)});if(o&&a)return[{name:"三色同順",double:2-this.minus()}]}return[]}dC2(t){return t.length==7?[]:t.every(i=>i instanceof Z||i instanceof vt||i instanceof xt||i instanceof ut||i instanceof pt||i instanceof J)?[{name:"対々和",double:2}]:[]}dD2(t){return this.minus()!=0?[]:t.filter(i=>(i instanceof Z||i instanceof ut)&&!i.tiles.some(r=>r.has(A.RON))).length>=3?[{name:"三暗刻",double:2}]:[]}dE2(t){return t.filter(i=>i instanceof Z||i instanceof vt||i instanceof xt).length>=3?[{name:"三槓子",double:2}]:[]}dF2(t){const n=i=>i instanceof Z||i instanceof vt||i instanceof xt||i instanceof ut||i instanceof pt;for(let i of t){if(!n(i))continue;const r=$t(i);if(r.t==m.Z)continue;const s=[m.M,m.P,m.S].filter(c=>c!=r.t),o=t.some(c=>{const l=new w(s[0],r.n);return n(c)&&l.equals($t(c),!0)}),a=t.some(c=>{const l=new w(s[1],r.n);return n(c)&&l.equals($t(c),!0)});if(o&&a)return[{name:"三色同刻",double:2}]}return[]}dG2(t){return t.filter(i=>{const r=i.tiles[0];return r.t==m.Z&&[5,6,7].includes(r.n)}).length==3?[{name:"小三元",double:2}]:[]}dH2(t){return t.every(i=>{const r=i.tiles[0].t==m.Z?$e:bt;return i.tiles.every(s=>r.includes(s.n))})?[{name:"混老頭",double:2}]:[]}dI2(t){return t.length==7?[]:t.some(i=>i instanceof Tt||i instanceof ft)?t.some(i=>i.tiles[0].t==m.Z)?t.every(i=>{const r=i.tiles[0].t==m.Z?$e:bt;return i.tiles.some(s=>r.includes(s.n))})?[{name:"混全帯么九",double:2-this.minus()}]:[]:[]:[]}dJ2(t){if(this.minus()!=0)return[];let n={[m.M]:[0,0,0],[m.S]:[0,0,0],[m.P]:[0,0,0]};for(let i of t){const r=$t(i);r.t!=m.BACK&&r.t!=m.Z&&(i instanceof Tt||i instanceof ft)&&(r.n==1&&n[r.t][0]++,r.n==4&&n[r.t][1]++,r.n==7&&n[r.t][2]++)}for(let i of Object.values(n))if(i.filter(r=>r>0).length==i.length)return[{name:"一気通貫",double:2-this.minus()}];return[]}dA3(t){if(!t.some(i=>i.tiles[0].t==m.Z))return[];for(let i of Object.values(m))if(t.every(s=>s.tiles[0].t==m.Z||s.tiles[0].t==i))return[{name:"混一色",double:3-this.minus()}];return[]}dB3(t){return t.length==7?[]:t.some(i=>i instanceof Tt||i instanceof ft)?t.some(i=>i.tiles[0].t==m.Z)?[]:t.every(i=>i.tiles.some(r=>bt.includes(r.n)))?[{name:"純全帯么九色",double:3-this.minus()}]:[]:[]}dC3(t){return this.minus()!=0?[]:dr(t)==2?[{name:"ニ盃口",double:3}]:[]}dA6(t){if(t.some(n=>n.tiles[0].t==m.Z))return[];for(let n of Object.values(m)){if(n==m.Z)continue;if(t.every(r=>r.tiles[0].t==n))return[{name:"清一色",double:6-this.minus()}]}return[]}dA13(t){return t.length!=13?[]:t.some(i=>i instanceof J&&i.tiles.some(r=>r.has(A.TSUMO)||r.has(A.RON)))?[{name:"国士無双13面待ち",double:26}]:[{name:"国士無双",double:13}]}dB13(t){return t.length==1?[{name:"九蓮宝燈",double:13}]:[]}dC13(t){return t.length==7?[]:t.every(r=>r instanceof Z||r instanceof ut&&!r.tiles.some(s=>s.has(A.RON))||r instanceof J)?t.some(r=>r instanceof J&&r.tiles.every(s=>s.has(A.TSUMO)||s.has(A.RON)))?[{name:"四暗刻単騎待ち",double:26}]:[{name:"四暗刻",double:13}]:[]}dD13(t){if(t.length==13)return[];const n=[5,6,7];return t.filter(r=>!(r instanceof J)&&r.tiles.some(s=>s.t==m.Z&&n.includes(s.n))).length==3?[{name:"大三元",double:13}]:[]}dE13(t){return t.every(i=>i.tiles[0].t==m.Z)?[{name:"字一色",double:13}]:[]}dF13(t){return t.every(i=>i.tiles.every(r=>r.t!=m.Z&&bt.includes(r.n)))?[{name:"清老頭",double:13}]:[]}dG13(t){return t.filter(i=>i instanceof Z||i instanceof vt||i instanceof xt).length==4?[{name:"四槓子",double:13}]:[]}dH13(t){if(t.length==13)return[];if(t.length==7)return[];const n=[1,2,3,4];return t.filter(s=>s.tiles.some(o=>o.t==m.Z&&n.includes(o.n))).length==4?t.find(s=>s instanceof J).tiles.some(s=>s.t==m.Z&&n.includes(s.n))?[{name:"小四喜",double:13}]:[{name:"大四喜",double:13}]:[]}dI13(t){const n=i=>!!(i.equals(new w(m.Z,6))||i.t==m.S&&[2,3,4,6,8].includes(i.n));return t.every(i=>i.tiles.every(r=>n(r)))?[{name:"緑一色",double:13}]:[]}dJ13(t){return[]}dK13(t){return[]}calcFu(t){let i=20;const r=this.cfg.myWind.n,s=this.cfg.roundWind.n;if(t.length==7)return 25;const o=t.find(d=>d.tiles.some(g=>g.has(A.TSUMO)||g.has(A.RON))),a=this.minus()==1,c=o.tiles.some(d=>d.has(A.TSUMO)),l=(d,g)=>{const y=d.tiles[0];return y.t==m.Z&&[5,6,7].includes(y.n)||y.t==m.Z&&[r,s].includes(y.n)||bt.includes(y.n)?g*2:g};for(let d of t)switch(!0){case d instanceof ut:let g=d.tiles.some(y=>y.has(A.RON))?2:4;i+=l(d,g);break;case d instanceof pt:i+=l(d,2);break;case(d instanceof xt||d instanceof vt):i+=l(d,8);break;case d instanceof Z:i+=l(d,16);break}i+=(d=>{if(d instanceof ut)return 0;if(d instanceof J)return 2;const g=d.tiles,y=g.findIndex(S=>S.has(A.TSUMO)||S.has(A.RON));return y==1||y==0&&g[2].n==9||y==2&&g[0].n==1?2:0})(o);let f=t.find(d=>d instanceof J).tiles[0];f.t==m.Z&&([5,6,7].includes(f.n)&&(i+=2),f.n==s&&(i+=2),f.n==r&&(i+=2));let p=!1;return!a&&i==20&&(p=!0),c&&!p&&(i+=2),!c&&!a&&(i+=10),!c&&!a&&i==30&&(p=!0),a&&i==20&&(i=30),i}}const vs=e=>e.tiles.reduce((t,n)=>`${t}${n.n}${n.t}`,""),dr=e=>{let t={};for(let i of e){if(!(i instanceof Tt))continue;const r=vs(i);t[r]==null?t[r]=1:t[r]++}let n=0;for(let i in t)t[i]>=2&&n++;return n},$t=e=>[...e.tiles].sort(Ee)[0],pr=e=>{let t=it(e)?5:e.n,n=e.t;return new w(n,t%9+1)};class qt{static calcCandidates(t,n){R(n.length>0,"choices to discard is zero");let i=[];for(let r of n){const s=t.dec([r]),o=qt.candidateTiles(t);t.inc(s),i.length==0||o.shanten<i[0].shanten?i=[{shanten:o.shanten,candidates:o.candidates,tile:r}]:o.shanten==i[0].shanten&&i.push({candidates:o.candidates,shanten:o.shanten,tile:r})}return i}static candidateTiles(t){let n=Number.POSITIVE_INFINITY,i=[];const r=new Ze(t);for(let s of Object.values(m))if(s!=m.BACK)for(let o=1;o<t.getArrayLen(s);o++){if(t.get(s,o)>=4)continue;const a=new w(s,o),c=t.inc([a]),l=r.calc();t.dec(c),l<n?(n=l,i=[a]):l==n&&i.push(a)}return{shanten:n,candidates:i}}static partialCandidateTiles(t){const n=new Ge(t,!0);return Array(13-n.hands.length).fill(void 0).map(()=>n.inc([new w(m.BACK,0)])),qt.candidateTiles(n)}}const ii=()=>{const e=new Set;return{on(t){e.add(t)},off(t){e.delete(t)},offAll(){e.clear()},emit(t){e.forEach(n=>n(t))}}};function As(e){var s;const t=["RON","DAI_KAN","PON","CHI"],n=e.map(o=>o.choices),r=ks(n,t).map(o=>e[o]);return{events:r,type:Ts(t,(s=r[0])==null?void 0:s.choices)}}function Ss(e){var s;const t=["TSUMO","REACH","AN_KAN","SHO_KAN","DRAWN_GAME_BY_NINE_TILES","DISCARD"],n=e.map(o=>o.choices),r=ks(n,t).map(o=>e[o]);return{events:r,type:Ts(t,(s=r[0])==null?void 0:s.choices)}}function ks(e,t){let n=[],i=Number.POSITIVE_INFINITY;for(let r=0;r<e.length;r++){const s=e[r];if(Cu(s,t)){const o=Nu(t,s);o<i?(i=o,n=[r]):o===i&&n.push(r)}}return n}function Cu(e,t){return t.some(n=>!!e[n])}function Nu(e,t){for(let n=0;n<e.length;n++){const i=e[n];if(t[i])return n}return Number.POSITIVE_INFINITY}function Ts(e,t){if(t==null)return!1;for(const n of e)if(t[n])return n;return!1}const Te=()=>{const e=ii(),t=ii(),n={emit:e.emit,on:r=>t.on(r)},i={emit:t.emit,on:r=>e.on(r)};return[n,i]},Is=()=>{const e=ii();return{emit:i=>{e.emit(i)},on:i=>{e.on(i)}}};class He{constructor(t){v(this,"reachValue",1e3);v(this,"m");this.m=t}get summary(){return structuredClone(this.m)}reach(t){this.m[t]-=this.reachValue}restoreReachStick(t){this.m[t]+=this.reachValue}update(t,n){for(let i in n){const r=n[i],s=t[r];this.m[i]+=s}}}class Pe{constructor(t,n){v(this,"pToW",{});v(this,"wToP",G(""));v(this,"round");v(this,"sticks");this.round=(n==null?void 0:n.round)??"1w1",this.sticks=(n==null?void 0:n.sticks)??{reach:0,dead:0},this.pToW=t;for(let i in this.pToW)this.wToP[this.pToW[i]]=i}update(){for(let t in this.pToW){const n=Ct(this.pToW[t]);this.pToW[t]=n,this.wToP[n]=t}}incrementDeadStick(){this.sticks.dead++}incrementReachStick(){this.sticks.reach++}nextRound(){const t=Oe(this.round);this.round=t,this.update()}decrementReachStick(){this.sticks.reach--,R(this.sticks.reach>=0)}resetDeadStick(){this.sticks.dead=0}resetReachStick(){this.sticks.reach=0}is(t){return this.round==t}wind(t){return this.pToW[t]}playerID(t){return this.wToP[t]}get playerMap(){return structuredClone(this.pToW)}}const Oe=e=>{let t=e.substring(0,2),n=Number(e.substring(2,3));return n==4?(n=1,t=Ct(t)):n++,`${t}${n}`},Mu=e=>Oe(Oe(Oe(e))),Ct=e=>{let t=Number(e.toString()[0]);return t==4?t=1:t++,`${t}w`},Du=e=>Ct(Ct(Ct(e)));function Hi(e){for(let t=e.length-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}class Os{constructor(t=!1){v(this,"c",{[m.M]:[1,4,4,4,4,4,4,4,4,4],[m.S]:[1,4,4,4,4,4,4,4,4,4],[m.P]:[1,4,4,4,4,4,4,4,4,4],[m.Z]:[0,4,4,4,4,4,4,4]});v(this,"safeMap",G({},!0));this.disable=t}get(t){return t.t==m.BACK?0:it(t)?this.c[t.t][5]:this.c[t.t][t.n]}dec(...t){if(!this.disable){for(let n of t)if(n.t!=m.BACK){if(this.get(n)<=0)throw new Error(`cannot decrease ${n.toString()} due to zero`);this.c[n.t][n.n]-=1,it(n)&&(this.c[n.t][5]-=1)}}}addTileToSafeMap(t,n){this.disable||(this.safeMap[n][this.key(t.t,t.n)]=!0)}isSafeTile(t,n,i){return this.safeMap[i][this.key(t,n)]}key(t,n){return n==0&&(n=5),`${t}${n}`}reset(){this.c={[m.M]:[1,4,4,4,4,4,4,4,4,4],[m.S]:[1,4,4,4,4,4,4,4,4,4],[m.P]:[1,4,4,4,4,4,4,4,4,4],[m.Z]:[0,4,4,4,4,4,4,4]}}}class Pi{constructor(){v(this,"m",[])}discard(t,n){this.m.push({w:n,t})}get lastTile(){const t=this.m.at(-1);return R(t!=null,`lastTile is null(${t}). river: ${JSON.stringify(this.m,null,2)}`),t}discards(t){return t==null?[...this.m]:this.m.filter(n=>n.w==t)}markCalled(){this.lastTile.callMarker=!0}cannotContinue(){const t=this.discards();if(t.length!=4)return!1;let n=t[0].t;if(n.isNum())return!1;for(let i=0;i<4;i++)if(!n.equals(t[i].t))return!1;return!0}}function Ru(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global}function Bu(){const e=Ru();if(e.__xstate__)return e.__xstate__}const $u=e=>{if(typeof window>"u")return;const t=Bu();t&&t.register(e)};class mr{constructor(t){this._process=t,this._active=!1,this._current=null,this._last=null}start(){this._active=!0,this.flush()}clear(){this._current&&(this._current.next=null,this._last=this._current)}enqueue(t){const n={value:t,next:null};if(this._current){this._last.next=n,this._last=n;return}this._current=n,this._last=n,this._active&&this.flush()}flush(){for(;this._current;){const t=this._current;this._process(t.value),this._current=t.next}this._last=null}}const Es=".",Hu="",Cs="",Pu="#",Wu="*",Ns="xstate.init",ri="xstate.stop";function ju(e,t){return{type:`xstate.after.${e}.${t}`}}function si(e,t){return{type:`xstate.done.state.${e}`,output:t}}function Lu(e,t){return{type:`xstate.done.actor.${e}`,output:t,actorId:e}}function zu(e,t){return{type:`xstate.error.actor.${e}`,error:t,actorId:e}}function Ms(e){return{type:Ns,input:e}}function _t(e){setTimeout(()=>{throw e})}const Fu=typeof Symbol=="function"&&Symbol.observable||"@@observable";function Ds(e,t){const n=gr(e),i=gr(t);return typeof i=="string"?typeof n=="string"?i===n:!1:typeof n=="string"?n in i:Object.keys(n).every(r=>r in i?Ds(n[r],i[r]):!1)}function Wi(e){if(Bs(e))return e;let t=[],n="";for(let i=0;i<e.length;i++){switch(e.charCodeAt(i)){case 92:n+=e[i+1],i++;continue;case 46:t.push(n),n="";continue}n+=e[i]}return t.push(n),t}function gr(e){if(vh(e))return e.value;if(typeof e!="string")return e;const t=Wi(e);return Ku(t)}function Ku(e){if(e.length===1)return e[0];const t={};let n=t;for(let i=0;i<e.length-1;i++)if(i===e.length-2)n[e[i]]=e[i+1];else{const r=n;n={},r[e[i]]=n}return t}function yr(e,t){const n={},i=Object.keys(e);for(let r=0;r<i.length;r++){const s=i[r];n[s]=t(e[s],s,e,r)}return n}function Rs(e){return Bs(e)?e:[e]}function It(e){return e===void 0?[]:Rs(e)}function oi(e,t,n,i){return typeof e=="function"?e({context:t,event:n,self:i}):e}function Bs(e){return Array.isArray(e)}function Uu(e){return e.type.startsWith("xstate.error.actor")}function ne(e){return Rs(e).map(t=>typeof t>"u"||typeof t=="string"?{target:t}:t)}function $s(e){if(!(e===void 0||e===Hu))return It(e)}function ai(e,t,n){var s,o,a;const i=typeof e=="object",r=i?e:void 0;return{next:(s=i?e.next:e)==null?void 0:s.bind(r),error:(o=i?e.error:t)==null?void 0:o.bind(r),complete:(a=i?e.complete:n)==null?void 0:a.bind(r)}}function wr(e,t){return`${t}.${e}`}function ji(e,t){const n=t.match(/^xstate\.invoke\.(\d+)\.(.*)/);if(!n)return e.implementations.actors[t];const[,i,r]=n,o=e.getStateNodeById(r).config.invoke;return(Array.isArray(o)?o[i]:o).src}function _r(e,t){return`${e.sessionId}.${t}`}let Yu=0;function qu(e,t){const n=new Map,i=new Map,r=new WeakMap,s=new Set,o={},{clock:a,logger:c}=t,l={schedule:(f,p,d,g,y=Math.random().toString(36).slice(2))=>{const S={source:f,target:p,event:d,delay:g,id:y,startedAt:Date.now()},b=_r(f,y);h._snapshot._scheduledEvents[b]=S;const H=a.setTimeout(()=>{delete o[b],delete h._snapshot._scheduledEvents[b],h._relay(f,p,d)},g);o[b]=H},cancel:(f,p)=>{const d=_r(f,p),g=o[d];delete o[d],delete h._snapshot._scheduledEvents[d],g!==void 0&&a.clearTimeout(g)},cancelAll:f=>{for(const p in h._snapshot._scheduledEvents){const d=h._snapshot._scheduledEvents[p];d.source===f&&l.cancel(f,d.id)}}},u=f=>{if(!s.size)return;const p={...f,rootId:e.sessionId};s.forEach(d=>{var g;return(g=d.next)==null?void 0:g.call(d,p)})},h={_snapshot:{_scheduledEvents:((t==null?void 0:t.snapshot)&&t.snapshot.scheduler)??{}},_bookId:()=>`x:${Yu++}`,_register:(f,p)=>(n.set(f,p),f),_unregister:f=>{n.delete(f.sessionId);const p=r.get(f);p!==void 0&&(i.delete(p),r.delete(f))},get:f=>i.get(f),_set:(f,p)=>{const d=i.get(f);if(d&&d!==p)throw new Error(`Actor with system ID '${f}' already exists.`);i.set(f,p),r.set(p,f)},inspect:f=>{const p=ai(f);return s.add(p),{unsubscribe(){s.delete(p)}}},_sendInspectionEvent:u,_relay:(f,p,d)=>{h._sendInspectionEvent({type:"@xstate.event",sourceRef:f,actorRef:p,event:d}),p._send(d)},scheduler:l,getSnapshot:()=>({_scheduledEvents:{...h._snapshot._scheduledEvents}}),start:()=>{const f=h._snapshot._scheduledEvents;h._snapshot._scheduledEvents={};for(const p in f){const{source:d,target:g,event:y,delay:S,id:b}=f[p];l.schedule(d,g,y,S,b)}},_clock:a,_logger:c};return h}const Li=1;let q=function(e){return e[e.NotStarted=0]="NotStarted",e[e.Running=1]="Running",e[e.Stopped=2]="Stopped",e}({});const Gu={clock:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},logger:console.log.bind(console),devTools:!1};class Zu{constructor(t,n){this.logic=t,this._snapshot=void 0,this.clock=void 0,this.options=void 0,this.id=void 0,this.mailbox=new mr(this._process.bind(this)),this.observers=new Set,this.eventListeners=new Map,this.logger=void 0,this._processingStatus=q.NotStarted,this._parent=void 0,this._syncSnapshot=void 0,this.ref=void 0,this._actorScope=void 0,this._systemId=void 0,this.sessionId=void 0,this.system=void 0,this._doneEvent=void 0,this.src=void 0,this._deferred=[];const i={...Gu,...n},{clock:r,logger:s,parent:o,syncSnapshot:a,id:c,systemId:l,inspect:u}=i;this.system=o?o.system:qu(this,{clock:r,logger:s}),u&&!o&&this.system.inspect(ai(u)),this.sessionId=this.system._bookId(),this.id=c??this.sessionId,this.logger=(n==null?void 0:n.logger)??this.system._logger,this.clock=(n==null?void 0:n.clock)??this.system._clock,this._parent=o,this._syncSnapshot=a,this.options=i,this.src=i.src??t,this.ref=this,this._actorScope={self:this,id:this.id,sessionId:this.sessionId,logger:this.logger,defer:h=>{this._deferred.push(h)},system:this.system,stopChild:h=>{if(h._parent!==this)throw new Error(`Cannot stop child actor ${h.id} of ${this.id} because it is not a child`);h._stop()},emit:h=>{const f=this.eventListeners.get(h.type),p=this.eventListeners.get("*");if(!f&&!p)return;const d=new Set([...f?f.values():[],...p?p.values():[]]);for(const g of Array.from(d))g(h)}},this.send=this.send.bind(this),this.system._sendInspectionEvent({type:"@xstate.actor",actorRef:this}),l&&(this._systemId=l,this.system._set(l,this)),this._initState((n==null?void 0:n.snapshot)??(n==null?void 0:n.state)),l&&this._snapshot.status!=="active"&&this.system._unregister(this)}_initState(t){var n;try{this._snapshot=t?this.logic.restoreSnapshot?this.logic.restoreSnapshot(t,this._actorScope):t:this.logic.getInitialSnapshot(this._actorScope,(n=this.options)==null?void 0:n.input)}catch(i){this._snapshot={status:"error",output:void 0,error:i}}}update(t,n){var r,s;this._snapshot=t;let i;for(;i=this._deferred.shift();)try{i()}catch(o){this._deferred.length=0,this._snapshot={...t,status:"error",error:o}}switch(this._snapshot.status){case"active":for(const o of this.observers)try{(r=o.next)==null||r.call(o,t)}catch(a){_t(a)}break;case"done":for(const o of this.observers)try{(s=o.next)==null||s.call(o,t)}catch(a){_t(a)}this._stopProcedure(),this._complete(),this._doneEvent=Lu(this.id,this._snapshot.output),this._parent&&this.system._relay(this,this._parent,this._doneEvent);break;case"error":this._error(this._snapshot.error);break}this.system._sendInspectionEvent({type:"@xstate.snapshot",actorRef:this,event:n,snapshot:t})}subscribe(t,n,i){var s;const r=ai(t,n,i);if(this._processingStatus!==q.Stopped)this.observers.add(r);else switch(this._snapshot.status){case"done":try{(s=r.complete)==null||s.call(r)}catch(o){_t(o)}break;case"error":{const o=this._snapshot.error;if(!r.error)_t(o);else try{r.error(o)}catch(a){_t(a)}break}}return{unsubscribe:()=>{this.observers.delete(r)}}}on(t,n){let i=this.eventListeners.get(t);i||(i=new Set,this.eventListeners.set(t,i));const r=n.bind(void 0);return i.add(r),{unsubscribe:()=>{i.delete(r)}}}start(){if(this._processingStatus===q.Running)return this;this._syncSnapshot&&this.subscribe({next:i=>{i.status==="active"&&this.system._relay(this,this._parent,{type:`xstate.snapshot.${this.id}`,snapshot:i})},error:()=>{}}),this.system._register(this.sessionId,this),this._systemId&&this.system._set(this._systemId,this),this._processingStatus=q.Running;const t=Ms(this.options.input);switch(this.system._sendInspectionEvent({type:"@xstate.event",sourceRef:this._parent,actorRef:this,event:t}),this._snapshot.status){case"done":return this.update(this._snapshot,t),this;case"error":return this._error(this._snapshot.error),this}if(this._parent||this.system.start(),this.logic.start)try{this.logic.start(this._snapshot,this._actorScope)}catch(i){return this._snapshot={...this._snapshot,status:"error",error:i},this._error(i),this}return this.update(this._snapshot,t),this.options.devTools&&this.attachDevTools(),this.mailbox.start(),this}_process(t){let n,i;try{n=this.logic.transition(this._snapshot,t,this._actorScope)}catch(r){i={err:r}}if(i){const{err:r}=i;this._snapshot={...this._snapshot,status:"error",error:r},this._error(r);return}this.update(n,t),t.type===ri&&(this._stopProcedure(),this._complete())}_stop(){return this._processingStatus===q.Stopped?this:(this.mailbox.clear(),this._processingStatus===q.NotStarted?(this._processingStatus=q.Stopped,this):(this.mailbox.enqueue({type:ri}),this))}stop(){if(this._parent)throw new Error("A non-root actor cannot be stopped directly.");return this._stop()}_complete(){var t;for(const n of this.observers)try{(t=n.complete)==null||t.call(n)}catch(i){_t(i)}this.observers.clear()}_reportError(t){if(!this.observers.size){this._parent||_t(t);return}let n=!1;for(const i of this.observers){const r=i.error;n||(n=!r);try{r==null||r(t)}catch(s){_t(s)}}this.observers.clear(),n&&_t(t)}_error(t){this._stopProcedure(),this._reportError(t),this._parent&&this.system._relay(this,this._parent,zu(this.id,t))}_stopProcedure(){return this._processingStatus!==q.Running?this:(this.system.scheduler.cancelAll(this),this.mailbox.clear(),this.mailbox=new mr(this._process.bind(this)),this._processingStatus=q.Stopped,this.system._unregister(this),this)}_send(t){this._processingStatus!==q.Stopped&&this.mailbox.enqueue(t)}send(t){this.system._relay(void 0,this,t)}attachDevTools(){const{devTools:t}=this.options;t&&(typeof t=="function"?t:$u)(this)}toJSON(){return{xstate$$type:Li,id:this.id}}getPersistedSnapshot(t){return this.logic.getPersistedSnapshot(this._snapshot,t)}[Fu](){return this}getSnapshot(){return this._snapshot}}function me(e,...[t]){return new Zu(e,t)}function Xu(e,t,n,i,{sendId:r}){const s=typeof r=="function"?r(n,i):r;return[t,s]}function Ju(e,t){e.defer(()=>{e.system.scheduler.cancel(e.self,t)})}function Vu(e){function t(n,i){}return t.type="xstate.cancel",t.sendId=e,t.resolve=Xu,t.execute=Ju,t}function Qu(e,t,n,i,{id:r,systemId:s,src:o,input:a,syncSnapshot:c}){const l=typeof o=="string"?ji(t.machine,o):o,u=typeof r=="function"?r(n):r;let h;return l&&(h=me(l,{id:u,src:o,parent:e.self,syncSnapshot:c,systemId:s,input:typeof a=="function"?a({context:t.context,event:n.event,self:e.self}):a})),[Gt(t,{children:{...t.children,[u]:h}}),{id:r,actorRef:h}]}function th(e,{id:t,actorRef:n}){n&&e.defer(()=>{n._processingStatus!==q.Stopped&&n.start()})}function eh(...[e,{id:t,systemId:n,input:i,syncSnapshot:r=!1}={}]){function s(o,a){}return s.type="snapshot.spawnChild",s.id=t,s.systemId=n,s.src=e,s.input=i,s.syncSnapshot=r,s.resolve=Qu,s.execute=th,s}function nh(e,t,n,i,{actorRef:r}){const s=typeof r=="function"?r(n,i):r,o=typeof s=="string"?t.children[s]:s;let a=t.children;return o&&(a={...a},delete a[o.id]),[Gt(t,{children:a}),o]}function ih(e,t){if(t){if(e.system._unregister(t),t._processingStatus!==q.Running){e.stopChild(t);return}e.defer(()=>{e.stopChild(t)})}}function Hs(e){function t(n,i){}return t.type="xstate.stopChild",t.actorRef=e,t.resolve=nh,t.execute=ih,t}function zi(e,t,n,i){const{machine:r}=i,s=typeof e=="function",o=s?e:r.implementations.guards[typeof e=="string"?e:e.type];if(!s&&!o)throw new Error(`Guard '${typeof e=="string"?e:e.type}' is not implemented.'.`);if(typeof o!="function")return zi(o,t,n,i);const a={context:t,event:n},c=s||typeof e=="string"?void 0:"params"in e?typeof e.params=="function"?e.params({context:t,event:n}):e.params:void 0;return"check"in o?o.check(i,a,o):o(a,c)}const Fi=e=>e.type==="atomic"||e.type==="final";function ge(e){return Object.values(e.states).filter(t=>t.type!=="history")}function Xe(e,t){const n=[];if(t===e)return n;let i=e.parent;for(;i&&i!==t;)n.push(i),i=i.parent;return n}function pn(e){const t=new Set(e),n=Ws(t);for(const i of t)if(i.type==="compound"&&(!n.get(i)||!n.get(i).length))br(i).forEach(r=>t.add(r));else if(i.type==="parallel"){for(const r of ge(i))if(r.type!=="history"&&!t.has(r)){const s=br(r);for(const o of s)t.add(o)}}for(const i of t){let r=i.parent;for(;r;)t.add(r),r=r.parent}return t}function Ps(e,t){const n=t.get(e);if(!n)return{};if(e.type==="compound"){const r=n[0];if(r){if(Fi(r))return r.key}else return{}}const i={};for(const r of n)i[r.key]=Ps(r,t);return i}function Ws(e){const t=new Map;for(const n of e)t.has(n)||t.set(n,[]),n.parent&&(t.has(n.parent)||t.set(n.parent,[]),t.get(n.parent).push(n));return t}function js(e,t){const n=pn(t);return Ps(e,Ws(n))}function Ki(e,t){return t.type==="compound"?ge(t).some(n=>n.type==="final"&&e.has(n)):t.type==="parallel"?ge(t).every(n=>Ki(e,n)):t.type==="final"}const An=e=>e[0]===Pu;function rh(e,t){return e.transitions.get(t)||[...e.transitions.keys()].filter(i=>{if(i===Wu)return!0;if(!i.endsWith(".*"))return!1;const r=i.split("."),s=t.split(".");for(let o=0;o<r.length;o++){const a=r[o],c=s[o];if(a==="*")return o===r.length-1;if(a!==c)return!1}return!0}).sort((i,r)=>r.length-i.length).flatMap(i=>e.transitions.get(i))}function sh(e){const t=e.config.after;if(!t)return[];const n=(r,s)=>{const o=ju(r,e.id),a=o.type;return e.entry.push(Nh(o,{id:a,delay:r})),e.exit.push(Vu(a)),a};return Object.keys(t).flatMap((r,s)=>{const o=t[r],a=typeof o=="string"?{target:o}:o,c=Number.isNaN(+r)?r:+r,l=n(c);return It(a).map(u=>({...u,event:l,delay:c}))}).map(r=>{const{delay:s}=r;return{...jt(e,r.event,r),delay:s}})}function jt(e,t,n){const i=$s(n.target),r=n.reenter??!1,s=ch(e,i),o={...n,actions:It(n.actions),guard:n.guard,target:s,source:e,reenter:r,eventType:t,toJSON:()=>({...o,source:`#${e.id}`,target:s?s.map(a=>`#${a.id}`):void 0})};return o}function oh(e){const t=new Map;if(e.config.on)for(const n of Object.keys(e.config.on)){if(n===Cs)throw new Error('Null events ("") cannot be specified as a transition key. Use `always: { ... }` instead.');const i=e.config.on[n];t.set(n,ne(i).map(r=>jt(e,n,r)))}if(e.config.onDone){const n=`xstate.done.state.${e.id}`;t.set(n,ne(e.config.onDone).map(i=>jt(e,n,i)))}for(const n of e.invoke){if(n.onDone){const i=`xstate.done.actor.${n.id}`;t.set(i,ne(n.onDone).map(r=>jt(e,i,r)))}if(n.onError){const i=`xstate.error.actor.${n.id}`;t.set(i,ne(n.onError).map(r=>jt(e,i,r)))}if(n.onSnapshot){const i=`xstate.snapshot.${n.id}`;t.set(i,ne(n.onSnapshot).map(r=>jt(e,i,r)))}}for(const n of e.after){let i=t.get(n.eventType);i||(i=[],t.set(n.eventType,i)),i.push(n)}return t}function ah(e,t){const n=typeof t=="string"?e.states[t]:t?e.states[t.target]:void 0;if(!n&&t)throw new Error(`Initial state node "${t}" not found on parent state node #${e.id}`);const i={source:e,actions:!t||typeof t=="string"?[]:It(t.actions),eventType:null,reenter:!1,target:n?[n]:[],toJSON:()=>({...i,source:`#${e.id}`,target:n?[`#${n.id}`]:[]})};return i}function ch(e,t){if(t!==void 0)return t.map(n=>{if(typeof n!="string")return n;if(An(n))return e.machine.getStateNodeById(n);const i=n[0]===Es;if(i&&!e.parent)return mn(e,n.slice(1));const r=i?e.key+n:n;if(e.parent)try{return mn(e.parent,r)}catch(s){throw new Error(`Invalid transition definition for state node '${e.id}':
|
|
23
|
+
${s.message}`)}else throw new Error(`Invalid target: "${n}" is not a valid target from the root node. Did you mean ".${n}"?`)})}function Ls(e){const t=$s(e.config.target);return t?{target:t.map(n=>typeof n=="string"?mn(e.parent,n):n)}:e.parent.initial}function Lt(e){return e.type==="history"}function br(e){const t=zs(e);for(const n of t)for(const i of Xe(n,e))t.add(i);return t}function zs(e){const t=new Set;function n(i){if(!t.has(i)){if(t.add(i),i.type==="compound")n(i.initial.target[0]);else if(i.type==="parallel")for(const r of ge(i))n(r)}}return n(e),t}function ye(e,t){if(An(t))return e.machine.getStateNodeById(t);if(!e.states)throw new Error(`Unable to retrieve child state '${t}' from '${e.id}'; no child states exist.`);const n=e.states[t];if(!n)throw new Error(`Child state '${t}' does not exist on '${e.id}'`);return n}function mn(e,t){if(typeof t=="string"&&An(t))try{return e.machine.getStateNodeById(t)}catch{}const n=Wi(t).slice();let i=e;for(;n.length;){const r=n.shift();if(!r.length)break;i=ye(i,r)}return i}function gn(e,t){if(typeof t=="string"){const r=e.states[t];if(!r)throw new Error(`State '${t}' does not exist on '${e.id}'`);return[e,r]}const n=Object.keys(t),i=n.map(r=>ye(e,r)).filter(Boolean);return[e.machine.root,e].concat(i,n.reduce((r,s)=>{const o=ye(e,s);if(!o)return r;const a=gn(o,t[s]);return r.concat(a)},[]))}function lh(e,t,n,i){const s=ye(e,t).next(n,i);return!s||!s.length?e.next(n,i):s}function uh(e,t,n,i){const r=Object.keys(t),s=ye(e,r[0]),o=Ui(s,t[r[0]],n,i);return!o||!o.length?e.next(n,i):o}function hh(e,t,n,i){const r=[];for(const s of Object.keys(t)){const o=t[s];if(!o)continue;const a=ye(e,s),c=Ui(a,o,n,i);c&&r.push(...c)}return r.length?r:e.next(n,i)}function Ui(e,t,n,i){return typeof t=="string"?lh(e,t,n,i):Object.keys(t).length===1?uh(e,t,n,i):hh(e,t,n,i)}function fh(e){return Object.keys(e.states).map(t=>e.states[t]).filter(t=>t.type==="history")}function Bt(e,t){let n=e;for(;n.parent&&n.parent!==t;)n=n.parent;return n.parent===t}function dh(e,t){const n=new Set(e),i=new Set(t);for(const r of n)if(i.has(r))return!0;for(const r of i)if(n.has(r))return!0;return!1}function Fs(e,t,n){const i=new Set;for(const r of e){let s=!1;const o=new Set;for(const a of i)if(dh(ci([r],t,n),ci([a],t,n)))if(Bt(r.source,a.source))o.add(a);else{s=!0;break}if(!s){for(const a of o)i.delete(a);i.add(r)}}return Array.from(i)}function ph(e){const[t,...n]=e;for(const i of Xe(t,void 0))if(n.every(r=>Bt(r,i)))return i}function Yi(e,t){if(!e.target)return[];const n=new Set;for(const i of e.target)if(Lt(i))if(t[i.id])for(const r of t[i.id])n.add(r);else for(const r of Yi(Ls(i),t))n.add(r);else n.add(i);return[...n]}function Ks(e,t){const n=Yi(e,t);if(!n)return;if(!e.reenter&&n.every(r=>r===e.source||Bt(r,e.source)))return e.source;const i=ph(n.concat(e.source));if(i)return i;if(!e.reenter)return e.source.machine.root}function ci(e,t,n){var r;const i=new Set;for(const s of e)if((r=s.target)!=null&&r.length){const o=Ks(s,n);s.reenter&&s.source===o&&i.add(o);for(const a of t)Bt(a,o)&&i.add(a)}return[...i]}function mh(e,t){if(e.length!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function li(e,t,n,i,r,s){if(!e.length)return t;const o=new Set(t._nodes);let a=t.historyValue;const c=Fs(e,o,a);let l=t;r||([l,a]=_h(l,i,n,c,o,a,s)),l=we(l,i,n,c.flatMap(h=>h.actions),s),l=yh(l,i,n,c,o,s,a,r);const u=[...o];l.status==="done"&&(l=we(l,i,n,u.sort((h,f)=>f.order-h.order).flatMap(h=>h.exit),s));try{return a===t.historyValue&&mh(t._nodes,o)?l:Gt(l,{_nodes:u,historyValue:a})}catch(h){throw h}}function gh(e,t,n,i,r){if(i.output===void 0)return;const s=si(r.id,r.output!==void 0&&r.parent?oi(r.output,e.context,t,n.self):void 0);return oi(i.output,e.context,s,n.self)}function yh(e,t,n,i,r,s,o,a){let c=e;const l=new Set,u=new Set;wh(i,o,u,l),a&&u.add(e.machine.root);const h=new Set;for(const f of[...l].sort((p,d)=>p.order-d.order)){r.add(f);const p=[];p.push(...f.entry);for(const d of f.invoke)p.push(eh(d.src,{...d,syncSnapshot:!!d.onSnapshot}));if(u.has(f)){const d=f.initial.actions;p.push(...d)}if(c=we(c,t,n,p,s,f.invoke.map(d=>d.id)),f.type==="final"){const d=f.parent;let g=(d==null?void 0:d.type)==="parallel"?d:d==null?void 0:d.parent,y=g||f;for((d==null?void 0:d.type)==="compound"&&s.push(si(d.id,f.output!==void 0?oi(f.output,c.context,t,n.self):void 0));(g==null?void 0:g.type)==="parallel"&&!h.has(g)&&Ki(r,g);)h.add(g),s.push(si(g.id)),y=g,g=g.parent;if(g)continue;c=Gt(c,{status:"done",output:gh(c,t,n,c.machine.root,y)})}}return c}function wh(e,t,n,i){for(const r of e){const s=Ks(r,t);for(const a of r.target||[])!Lt(a)&&(r.source!==a||r.source!==s||r.reenter)&&(i.add(a),n.add(a)),ce(a,t,n,i);const o=Yi(r,t);for(const a of o){const c=Xe(a,s);(s==null?void 0:s.type)==="parallel"&&c.push(s),Us(i,t,n,c,!r.source.parent&&r.reenter?void 0:s)}}}function ce(e,t,n,i){var r;if(Lt(e))if(t[e.id]){const s=t[e.id];for(const o of s)i.add(o),ce(o,t,n,i);for(const o of s)Hn(o,e.parent,i,t,n)}else{const s=Ls(e);for(const o of s.target)i.add(o),s===((r=e.parent)==null?void 0:r.initial)&&n.add(e.parent),ce(o,t,n,i);for(const o of s.target)Hn(o,e.parent,i,t,n)}else if(e.type==="compound"){const[s]=e.initial.target;Lt(s)||(i.add(s),n.add(s)),ce(s,t,n,i),Hn(s,e,i,t,n)}else if(e.type==="parallel")for(const s of ge(e).filter(o=>!Lt(o)))[...i].some(o=>Bt(o,s))||(Lt(s)||(i.add(s),n.add(s)),ce(s,t,n,i))}function Us(e,t,n,i,r){for(const s of i)if((!r||Bt(s,r))&&e.add(s),s.type==="parallel")for(const o of ge(s).filter(a=>!Lt(a)))[...e].some(a=>Bt(a,o))||(e.add(o),ce(o,t,n,e))}function Hn(e,t,n,i,r){Us(n,i,r,Xe(e,t))}function _h(e,t,n,i,r,s,o){let a=e;const c=ci(i,r,s);c.sort((u,h)=>h.order-u.order);let l;for(const u of c)for(const h of fh(u)){let f;h.history==="deep"?f=p=>Fi(p)&&Bt(p,u):f=p=>p.parent===u,l??(l={...s}),l[h.id]=Array.from(r).filter(f)}for(const u of c)a=we(a,t,n,[...u.exit,...u.invoke.map(h=>Hs(h.id))],o),r.delete(u);return[a,l||s]}let xr=!1;function Ys(e,t,n,i,r,s){const{machine:o}=e;let a=e;for(const c of i){let p=function(){n.system._sendInspectionEvent({type:"@xstate.action",actorRef:n.self,action:{type:typeof c=="string"?c:typeof c=="object"?c.type:c.name||"(anonymous)",params:f}});try{xr=u,u(h,f)}finally{xr=!1}};const l=typeof c=="function",u=l?c:o.implementations.actions[typeof c=="string"?c:c.type];if(!u)continue;const h={context:a.context,event:t,self:n.self,system:n.system},f=l||typeof c=="string"?void 0:"params"in c?typeof c.params=="function"?c.params({context:a.context,event:t}):c.params:void 0;if(!("resolve"in u)){n.self._processingStatus===q.Running?p():n.defer(()=>{p()});continue}const d=u,[g,y,S]=d.resolve(n,a,h,f,u,r);a=g,"retryResolve"in d&&(s==null||s.push([d,y])),"execute"in d&&(n.self._processingStatus===q.Running?d.execute(n,y):n.defer(d.execute.bind(null,n,y))),S&&(a=Ys(a,t,n,S,r,s))}return a}function we(e,t,n,i,r,s){const o=s?[]:void 0,a=Ys(e,t,n,i,{internalQueue:r,deferredActorIds:s},o);return o==null||o.forEach(([c,l])=>{c.retryResolve(n,a,l)}),a}function Pn(e,t,n,i=[]){let r=e;const s=[];function o(l,u,h){n.system._sendInspectionEvent({type:"@xstate.microstep",actorRef:n.self,event:u,snapshot:l,_transitions:h}),s.push(l)}if(t.type===ri)return r=Gt(vr(r,t,n),{status:"stopped"}),o(r,t,[]),{snapshot:r,microstates:s};let a=t;if(a.type!==Ns){const l=a,u=Uu(l),h=Ar(l,r);if(u&&!h.length)return r=Gt(e,{status:"error",error:l.error}),o(r,l,[]),{snapshot:r,microstates:s};r=li(h,e,n,a,!1,i),o(r,l,h)}let c=!0;for(;r.status==="active";){let l=c?bh(r,a):[];const u=l.length?r:void 0;if(!l.length){if(!i.length)break;a=i.shift(),l=Ar(a,r)}r=li(l,r,n,a,!1,i),c=r!==u,o(r,a,l)}return r.status!=="active"&&vr(r,a,n),{snapshot:r,microstates:s}}function vr(e,t,n){return we(e,t,n,Object.values(e.children).map(i=>Hs(i)),[])}function Ar(e,t){return t.machine.getTransitionData(t,e)}function bh(e,t){const n=new Set,i=e._nodes.filter(Fi);for(const r of i)t:for(const s of[r].concat(Xe(r,void 0)))if(s.always){for(const o of s.always)if(o.guard===void 0||zi(o.guard,e.context,t,e)){n.add(o);break t}}return Fs(Array.from(n),new Set(e._nodes),e.historyValue)}function xh(e,t){const n=pn(gn(e,t));return js(e,[...n])}function vh(e){return!!e&&typeof e=="object"&&"machine"in e&&"value"in e}const Ah=function(t){return Ds(t,this.value)},Sh=function(t){return this.tags.has(t)},kh=function(t){const n=this.machine.getTransitionData(this,t);return!!(n!=null&&n.length)&&n.some(i=>i.target!==void 0||i.actions.length)},Th=function(){const{_nodes:t,tags:n,machine:i,getMeta:r,toJSON:s,can:o,hasTag:a,matches:c,...l}=this;return{...l,tags:Array.from(n)}},Ih=function(){return this._nodes.reduce((t,n)=>(n.meta!==void 0&&(t[n.id]=n.meta),t),{})};function nn(e,t){return{status:e.status,output:e.output,error:e.error,machine:t,context:e.context,_nodes:e._nodes,value:js(t.root,e._nodes),tags:new Set(e._nodes.flatMap(n=>n.tags)),children:e.children,historyValue:e.historyValue||{},matches:Ah,hasTag:Sh,can:kh,getMeta:Ih,toJSON:Th}}function Gt(e,t={}){return nn({...e,...t},e.machine)}function Oh(e,t){const{_nodes:n,tags:i,machine:r,children:s,context:o,can:a,hasTag:c,matches:l,getMeta:u,toJSON:h,...f}=e,p={};for(const g in s){const y=s[g];p[g]={snapshot:y.getPersistedSnapshot(t),src:y.src,systemId:y._systemId,syncSnapshot:y._syncSnapshot}}return{...f,context:qs(o),children:p}}function qs(e){let t;for(const n in e){const i=e[n];if(i&&typeof i=="object")if("sessionId"in i&&"send"in i&&"ref"in i)t??(t=Array.isArray(e)?e.slice():{...e}),t[n]={xstate$$type:Li,id:i.id};else{const r=qs(i);r!==i&&(t??(t=Array.isArray(e)?e.slice():{...e}),t[n]=r)}}return t??e}function Eh(e,t,n,i,{event:r,id:s,delay:o},{internalQueue:a}){const c=t.machine.implementations.delays;if(typeof r=="string")throw new Error(`Only event objects may be used with raise; use raise({ type: "${r}" }) instead`);const l=typeof r=="function"?r(n,i):r;let u;if(typeof o=="string"){const h=c&&c[o];u=typeof h=="function"?h(n,i):h}else u=typeof o=="function"?o(n,i):o;return typeof u!="number"&&a.push(l),[t,{event:l,id:s,delay:u}]}function Ch(e,t){const{event:n,delay:i,id:r}=t;if(typeof i=="number"){e.defer(()=>{const s=e.self;e.system.scheduler.schedule(s,s,n,i,r)});return}}function Nh(e,t){function n(i,r){}return n.type="xstate.raise",n.event=e,n.id=t==null?void 0:t.id,n.delay=t==null?void 0:t.delay,n.resolve=Eh,n.execute=Ch,n}function Mh(e,{machine:t,context:n},i,r){const s=(o,a={})=>{const{systemId:c,input:l}=a;if(typeof o=="string"){const u=ji(t,o);if(!u)throw new Error(`Actor logic '${o}' not implemented in machine '${t.id}'`);const h=me(u,{id:a.id,parent:e.self,syncSnapshot:a.syncSnapshot,input:typeof l=="function"?l({context:n,event:i,self:e.self}):l,src:o,systemId:c});return r[h.id]=h,h}else return me(o,{id:a.id,parent:e.self,syncSnapshot:a.syncSnapshot,input:a.input,src:o,systemId:c})};return(o,a)=>{const c=s(o,a);return r[c.id]=c,e.defer(()=>{c._processingStatus!==q.Stopped&&c.start()}),c}}function Dh(e,t,n,i,{assignment:r}){if(!t.context)throw new Error("Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.");const s={},o={context:t.context,event:n.event,spawn:Mh(e,t,n.event,s),self:e.self,system:e.system};let a={};if(typeof r=="function")a=r(o,i);else for(const l of Object.keys(r)){const u=r[l];a[l]=typeof u=="function"?u(o,i):u}const c=Object.assign({},t.context,a);return[Gt(t,{context:c,children:Object.keys(s).length?{...t.children,...s}:t.children})]}function Rh(e){function t(n,i){}return t.type="xstate.assign",t.assignment=e,t.resolve=Dh,t}const Sr=new WeakMap;function ee(e,t,n){let i=Sr.get(e);return i?t in i||(i[t]=n()):(i={[t]:n()},Sr.set(e,i)),i[t]}const Bh={},Ae=e=>typeof e=="string"?{type:e}:typeof e=="function"?"resolve"in e?{type:e.type}:{type:e.name}:e;class qi{constructor(t,n){if(this.config=t,this.key=void 0,this.id=void 0,this.type=void 0,this.path=void 0,this.states=void 0,this.history=void 0,this.entry=void 0,this.exit=void 0,this.parent=void 0,this.machine=void 0,this.meta=void 0,this.output=void 0,this.order=-1,this.description=void 0,this.tags=[],this.transitions=void 0,this.always=void 0,this.parent=n._parent,this.key=n._key,this.machine=n._machine,this.path=this.parent?this.parent.path.concat(this.key):[],this.id=this.config.id||[this.machine.id,...this.path].join(Es),this.type=this.config.type||(this.config.states&&Object.keys(this.config.states).length?"compound":this.config.history?"history":"atomic"),this.description=this.config.description,this.order=this.machine.idMap.size,this.machine.idMap.set(this.id,this),this.states=this.config.states?yr(this.config.states,(i,r)=>new qi(i,{_parent:this,_key:r,_machine:this.machine})):Bh,this.type==="compound"&&!this.config.initial)throw new Error(`No initial state specified for compound state node "#${this.id}". Try adding { initial: "${Object.keys(this.states)[0]}" } to the state config.`);this.history=this.config.history===!0?"shallow":this.config.history||!1,this.entry=It(this.config.entry).slice(),this.exit=It(this.config.exit).slice(),this.meta=this.config.meta,this.output=this.type==="final"||!this.parent?this.config.output:void 0,this.tags=It(t.tags).slice()}_initialize(){this.transitions=oh(this),this.config.always&&(this.always=ne(this.config.always).map(t=>jt(this,Cs,t))),Object.keys(this.states).forEach(t=>{this.states[t]._initialize()})}get definition(){return{id:this.id,key:this.key,version:this.machine.version,type:this.type,initial:this.initial?{target:this.initial.target,source:this,actions:this.initial.actions.map(Ae),eventType:null,reenter:!1,toJSON:()=>({target:this.initial.target.map(t=>`#${t.id}`),source:`#${this.id}`,actions:this.initial.actions.map(Ae),eventType:null})}:void 0,history:this.history,states:yr(this.states,t=>t.definition),on:this.on,transitions:[...this.transitions.values()].flat().map(t=>({...t,actions:t.actions.map(Ae)})),entry:this.entry.map(Ae),exit:this.exit.map(Ae),meta:this.meta,order:this.order||-1,output:this.output,invoke:this.invoke,description:this.description,tags:this.tags}}toJSON(){return this.definition}get invoke(){return ee(this,"invoke",()=>It(this.config.invoke).map((t,n)=>{const{src:i,systemId:r}=t,s=t.id??wr(this.id,n),o=typeof i=="string"?i:`xstate.invoke.${wr(this.id,n)}`;return{...t,src:o,id:s,systemId:r,toJSON(){const{onDone:a,onError:c,...l}=t;return{...l,type:"xstate.invoke",src:o,id:s}}}}))}get on(){return ee(this,"on",()=>[...this.transitions].flatMap(([n,i])=>i.map(r=>[n,r])).reduce((n,[i,r])=>(n[i]=n[i]||[],n[i].push(r),n),{}))}get after(){return ee(this,"delayedTransitions",()=>sh(this))}get initial(){return ee(this,"initial",()=>ah(this,this.config.initial))}next(t,n){const i=n.type,r=[];let s;const o=ee(this,`candidates-${i}`,()=>rh(this,i));for(const a of o){const{guard:c}=a,l=t.context;let u=!1;try{u=!c||zi(c,l,n,t)}catch(h){const f=typeof c=="string"?c:typeof c=="object"?c.type:void 0;throw new Error(`Unable to evaluate guard ${f?`'${f}' `:""}in transition for event '${i}' in state node '${this.id}':
|
|
24
|
+
${h.message}`)}if(u){r.push(...a.actions),s=a;break}}return s?[s]:void 0}get events(){return ee(this,"events",()=>{const{states:t}=this,n=new Set(this.ownEvents);if(t)for(const i of Object.keys(t)){const r=t[i];if(r.states)for(const s of r.events)n.add(`${s}`)}return Array.from(n)})}get ownEvents(){const t=new Set([...this.transitions.keys()].filter(n=>this.transitions.get(n).some(i=>!(!i.target&&!i.actions.length&&!i.reenter))));return Array.from(t)}}const $h="#";class Gi{constructor(t,n){this.config=t,this.version=void 0,this.schemas=void 0,this.implementations=void 0,this.__xstatenode=!0,this.idMap=new Map,this.root=void 0,this.id=void 0,this.states=void 0,this.events=void 0,this.id=t.id||"(machine)",this.implementations={actors:(n==null?void 0:n.actors)??{},actions:(n==null?void 0:n.actions)??{},delays:(n==null?void 0:n.delays)??{},guards:(n==null?void 0:n.guards)??{}},this.version=this.config.version,this.schemas=this.config.schemas,this.transition=this.transition.bind(this),this.getInitialSnapshot=this.getInitialSnapshot.bind(this),this.getPersistedSnapshot=this.getPersistedSnapshot.bind(this),this.restoreSnapshot=this.restoreSnapshot.bind(this),this.start=this.start.bind(this),this.root=new qi(t,{_key:this.id,_machine:this}),this.root._initialize(),this.states=this.root.states,this.events=this.root.events}provide(t){const{actions:n,guards:i,actors:r,delays:s}=this.implementations;return new Gi(this.config,{actions:{...n,...t.actions},guards:{...i,...t.guards},actors:{...r,...t.actors},delays:{...s,...t.delays}})}resolveState(t){const n=xh(this.root,t.value),i=pn(gn(this.root,n));return nn({_nodes:[...i],context:t.context||{},children:{},status:Ki(i,this.root)?"done":t.status||"active",output:t.output,error:t.error,historyValue:t.historyValue},this)}transition(t,n,i){return Pn(t,n,i).snapshot}microstep(t,n,i){return Pn(t,n,i).microstates}getTransitionData(t,n){return Ui(this.root,t.value,t,n)||[]}getPreInitialState(t,n,i){const{context:r}=this.config,s=nn({context:typeof r!="function"&&r?r:{},_nodes:[this.root],children:{},status:"active"},this);return typeof r=="function"?we(s,n,t,[Rh(({spawn:a,event:c,self:l})=>r({spawn:a,input:c.input,self:l}))],i):s}getInitialSnapshot(t,n){const i=Ms(n),r=[],s=this.getPreInitialState(t,i,r),o=li([{target:[...zs(this.root)],source:this.root,reenter:!0,actions:[],eventType:null,toJSON:null}],s,t,i,!0,r),{snapshot:a}=Pn(o,i,t,r);return a}start(t){Object.values(t.children).forEach(n=>{n.getSnapshot().status==="active"&&n.start()})}getStateNodeById(t){const n=Wi(t),i=n.slice(1),r=An(n[0])?n[0].slice($h.length):n[0],s=this.idMap.get(r);if(!s)throw new Error(`Child state node '#${r}' does not exist on machine '${this.id}'`);return mn(s,i)}get definition(){return this.root.definition}toJSON(){return this.definition}getPersistedSnapshot(t,n){return Oh(t,n)}restoreSnapshot(t,n){const i={},r=t.children;Object.keys(r).forEach(c=>{const l=r[c],u=l.snapshot,h=l.src,f=typeof h=="string"?ji(this,h):h;if(!f)return;const p=me(f,{id:c,parent:n.self,syncSnapshot:l.syncSnapshot,snapshot:u,src:h,systemId:l.systemId});i[c]=p});const s=nn({...t,children:i,_nodes:Array.from(pn(gn(this.root,t.value)))},this);let o=new Set;function a(c,l){if(!o.has(c)){o.add(c);for(let u in c){const h=c[u];if(h&&typeof h=="object"){if("xstate$$type"in h&&h.xstate$$type===Li){c[u]=l[h.id];continue}a(h,l)}}}}return a(s.context,i),s}}function Hh(e,t){return new Gi(e,t)}const tn=e=>e===!1?!1:e.map(t=>t.serialize()),Ph=e=>e===!1?!1:e.serialize(),Wh=e=>e===!1?!1:e.map(t=>({tile:t.tile.toString(),candidates:t.candidates.map(n=>n.toString()),shanten:t.shanten})),ui=e=>JSON.parse(JSON.stringify(e)),Wn=e=>e===!1?!1:ui(e),hi=e=>Hh({id:"Untitled",initial:"distribute",context:{currentWind:_.E,oneShotMap:G(!1),missingMap:G(!1),controller:e,genEventID:Gs()},states:{distribute:{on:{NEXT:{target:"drawn"}},entry:{type:"notify_distribution"}},drawn:{entry:{type:"notify_draw"},on:{NEXT:{target:"waiting_user_event_after_drawn",actions:{type:"notify_choice_after_drawn"},description:`可能なアクションとその詳細を通知\\
|
|
25
|
+
DISCARD の場合は捨てられる牌の一覧`}}},waiting_user_event_after_drawn:{description:"ツモった1ユーザからのレスポンス待ち",on:{TSUMO:{target:"tsumo",guard:"canWin"},REACH:{target:"discarded",guard:"canReach",actions:{type:"notify_reach"},description:`入力に牌が必要\\
|
|
26
|
+
立直直後のロンは立直棒が点数にならないので\\
|
|
27
|
+
別途状態を保つ必要がある`},SHO_KAN:{target:"an_sho_kaned"},AN_KAN:{target:"an_sho_kaned"},DISCARD:{target:"discarded",description:"入力に牌が必須",actions:{type:"disable_one_shot_for_me"}},DRAWN_GAME_BY_NINE_TILES:{target:"drawn_game"}}},discarded:{entry:{type:"notify_discard"},on:{NEXT:{target:"waiting_user_event_after_discarded",actions:{type:"notify_choice_after_discarded"},description:`可能なアクションとその詳細を通知\\
|
|
28
|
+
CHI/PON の場合は鳴ける組み合わせの一覧`}}},tsumo:{exit:[{type:"notify_tsumo"},{type:"notify_end"}],type:"final"},waiting_user_event_after_discarded:{description:`最大 4人から choice に対するレスポンスを待つ\\
|
|
29
|
+
ユーザからではなく、controller が優先順位を考慮して遷移させる必要がある\\
|
|
30
|
+
通知する choice がない場合、controller が\\*で遷移させる`,on:{RON:{target:"roned",guard:"canWin"},PON:{target:"poned",guard:"canPon"},CHI:{target:"chied",guard:"canChi"},DAI_KAN:{target:"dai_kaned"},"*":{target:"wildcard_after_discarded"}}},roned:{exit:[{type:"notify_ron"},{type:"notify_end"}],type:"final"},poned:{on:{NEXT:{target:"waiting_discard_event",actions:{type:"notify_choice_after_called"}}},entry:[{type:"notify_call"},{type:"disable_none_shot"}]},chied:{on:{NEXT:{target:"waiting_discard_event",actions:{type:"notify_choice_after_called",params:{action:"chi"}}}},entry:[{type:"notify_call"},{type:"disable_one_shot"}]},wildcard_after_discarded:{exit:[],always:[{target:"drawn_game",guard:"cannotContinue"},{target:"drawn",actions:[{type:"updateNextWind"}]}]},waiting_discard_event:{description:"鳴いたユーザからの DISCARD イベントを待つ",on:{DISCARD:{target:"discarded"}}},dai_kaned:{on:{NEXT:{target:"waiting_user_event_after_drawn",actions:[{type:"notify_draw",params:{action:"kan"}},{type:"notify_choice_after_drawn",params:{replacementWin:!0}}]}},entry:[{type:"notify_call"},{type:"disable_one_shot"}]},an_sho_kaned:{on:{NEXT:{target:"waiting_chankan_event"}},entry:[{type:"notify_call"},{type:"disable_one_shot"},{type:"notify_new_dora_if_needed"},{type:"notify_choice_for_chankan"}]},waiting_chankan_event:{description:"チャンカンを待つ",exit:[{type:"notify_draw",params:{action:"kan"}},{type:"notify_choice_after_drawn",params:{replacementWin:!0}}],on:{RON:{target:"roned",guard:"canWin"},"*":{target:"waiting_user_event_after_drawn"}}},drawn_game:{exit:{type:"notify_end",params:{}},type:"final"}},types:{events:{},context:{}}},{actions:{updateNextWind:({context:t,event:n})=>{const i=t.currentWind;t.currentWind=Ct(i)},notify_distribution:({context:t,event:n})=>{const i=t.genEventID(),r=t.controller.initialHands();for(let s of Object.values(_)){const o=G("_____________");o[s]=r[s].toString();const a={id:i,type:"DISTRIBUTE",hands:o,wind:s,doraMarker:t.controller.wall.doraMarkers[0].toString(),sticks:t.controller.placeManager.sticks,round:t.controller.placeManager.round,players:t.controller.playerIDs,places:t.controller.placeManager.playerMap,scores:t.controller.scoreManager.summary};t.controller.emit(a)}t.controller.next()},notify_choice_after_drawn:({context:t,event:n},i)=>{const r=t.currentWind,s=t.controller.hand(r).drawn,o=t.genEventID(),a={id:o,type:"CHOICE_AFTER_DRAWN",wind:r,drawerInfo:{wind:r,tile:s.toString()},choices:{TSUMO:Wn(t.controller.doWin(r,s,{oneShot:t.oneShotMap[r],replacementWin:i==null?void 0:i.replacementWin})),REACH:Wh(t.controller.doReach(r)),AN_KAN:tn(t.controller.doAnKan(r)),SHO_KAN:tn(t.controller.doShoKan(r)),DISCARD:t.controller.doDiscard(r).map(c=>c.toString()),DRAWN_GAME_BY_NINE_TILES:t.controller.canDrawnGame(r)}};t.controller.emit(a),t.controller.pollReplies(o,[r])},notify_choice_after_discarded:({context:t,event:n})=>{const i=t.genEventID(),r=t.controller.river.lastTile,s=r.t.clone({add:A.HORIZONTAL});for(let o of Object.values(_)){const a={id:i,type:"CHOICE_AFTER_DISCARDED",wind:o,discarterInfo:{wind:r.w,tile:r.t.toString()},choices:{RON:Wn(t.controller.doWin(o,s,{whoDiscarded:r.w,oneShot:t.oneShotMap[o],missingRon:t.missingMap[o]})),PON:tn(t.controller.doPon(o,r.w,s)),CHI:tn(t.controller.doChi(o,r.w,s)),DAI_KAN:Ph(t.controller.doDaiKan(o,r.w,s))}};a.choices.RON&&(t.missingMap[o]=!0),t.controller.emit(a)}t.controller.pollReplies(i,Object.values(_))},notify_choice_after_called:({context:t,event:n},i)=>{const r=t.genEventID(),s=t.currentWind;let o=t.controller.doDiscard(s);const a=t.controller.hand(t.currentWind).called.at(-1);(a instanceof ft||a instanceof pt)&&(o=t.controller.doDiscard(s,a));const c={id:r,type:"CHOICE_AFTER_CALLED",wind:s,choices:{DISCARD:o.map(l=>l.toString())}};t.controller.emit(c),t.controller.pollReplies(r,[s])},notify_choice_for_chankan:({context:t,event:n})=>{if(n.type!="SHO_KAN"&&n.type!="AN_KAN")throw new Error(`unexpected event ${n.type}`);const i=t.genEventID(),r=n.block.tiles[0].clone({remove:A.HORIZONTAL});for(let s of Object.values(_)){const o=t.controller.doWin(s,n.block.tiles[0].clone({remove:A.HORIZONTAL}),{whoDiscarded:n.iam,quadWin:!0,oneShot:t.oneShotMap[s],missingRon:t.missingMap[n.iam]}),a={id:i,type:"CHOICE_FOR_CHAN_KAN",wind:s,callerInfo:{wind:n.iam,tile:r.toString()},choices:{RON:n.type=="SHO_KAN"?Wn(o):!1}};a.choices.RON&&(t.missingMap[s]=!0),t.controller.emit(a)}t.controller.pollReplies(i,Object.values(_))},notify_call:({context:t,event:n})=>{if(!(n.type=="CHI"||n.type=="PON"||n.type=="DAI_KAN"||n.type=="AN_KAN"||n.type=="SHO_KAN"))throw new Error(`unexpected event ${n.type}`);const i=t.genEventID(),r=n.iam;t.currentWind=r;for(let s of Object.values(_)){const o={id:i,type:n.type,iam:r,wind:s,block:n.block.serialize()};t.controller.emit(o)}t.controller.next()},notify_discard:({context:t,event:n})=>{if(n.type!="DISCARD"&&n.type!="REACH")throw new Error(`unexpected event ${n.type}`);const i=t.genEventID(),r=t.currentWind,s=n.tile;for(let o of Object.values(_)){const a={id:i,type:"DISCARD",iam:r,wind:o,tile:s.toString()};t.controller.emit(a)}t.controller.next()},notify_draw:({context:t,event:n},i)=>{const r=t.genEventID(),s=i==null?void 0:i.action;let o;s=="kan"?o=t.controller.wall.kan():o=t.controller.wall.draw();const a=t.currentWind;t.controller.hand(a).reached||(t.missingMap[a]=!1);for(let c of Object.values(_)){let l=new w(m.BACK,0,[A.TSUMO]);c==a&&(l=o);const u={id:r,type:"DRAW",subType:s,iam:a,wind:c,tile:l.toString()};t.controller.emit(u)}t.controller.next()},notify_ron:({context:t,event:n})=>{const i=t.genEventID();if(n.type=="RON"){const r=n.targetInfo.wind,s=t.currentWind,o=r==s&&t.oneShotMap[s]==!0,a=n.iam;for(let c of Object.values(_)){const l={id:i,type:n.type,iam:a,wind:c,victimInfo:{wind:n.targetInfo.wind,tile:n.targetInfo.tile.toString()},ret:ui(n.ret),pushBackReachStick:o};t.controller.emit(l)}}},notify_tsumo:({context:t,event:n})=>{if(n.type!="TSUMO")throw new Error(`unexpected event ${n.type}`);const i=t.genEventID(),r=t.currentWind;for(let s of Object.values(_)){const o={id:i,type:n.type,iam:r,wind:s,lastTile:t.controller.hand(r).drawn.toString(),ret:ui(n.ret)};t.controller.emit(o)}},notify_reach:({context:t,event:n})=>{if(n.type!="REACH")throw new Error(`unexpected event ${n.type}`);const i=t.genEventID(),r=n.iam,s=n.tile.clone({add:A.HORIZONTAL});t.oneShotMap[r]=!0;for(let o of Object.values(_)){const a={id:i,type:n.type,iam:r,wind:o,tile:s.toString()};t.controller.emit(a)}},notify_new_dora_if_needed:({context:t,event:n})=>{const i=t.genEventID();if(n.type=="AN_KAN"){const r=t.controller.wall.openDoraMarker();for(let s of Object.values(_)){const o={id:i,type:"NEW_DORA",wind:s,doraMarker:r.toString()};t.controller.emit(o)}}n.type=="SHO_KAN"},disable_one_shot:({context:t,event:n})=>{for(let i of Object.values(_))t.oneShotMap[i]=!1},disable_one_shot_for_me:({context:t,event:n})=>{t.oneShotMap[t.currentWind]=!1},notify_end:({context:t,event:n})=>{const i=t.genEventID(),r=G("");if(n.type=="DRAWN_GAME_BY_NINE_TILES"){r[n.iam]=t.controller.hand(n.iam).toString();for(let s of Object.values(_)){const o={id:i,type:"END_GAME",subType:"NINE_TILES",wind:s,shouldContinue:!0,sticks:t.controller.placeManager.sticks,scores:t.controller.scoreManager.summary,deltas:G(0),hands:r};t.controller.emit(o)}}else if(n.type=="RON"||n.type=="TSUMO"){const s=n.iam==_.E,o=t.controller.finalResult(n.ret,n.iam);for(let a of Object.values(_)){r[n.iam]=t.controller.hand(n.iam).toString();const c={id:i,type:"END_GAME",subType:"WIN_GAME",wind:a,shouldContinue:s,sticks:{reach:0,dead:0},scores:t.controller.scoreManager.summary,deltas:o.deltas,hands:r};t.controller.emit(c)}}else if(!t.controller.wall.canKan||t.controller.river.cannotContinue()){const s=t.controller.wall.canKan?"FOUR_WIND":"FOUR_KAN";for(let o of Object.values(_)){const a={id:i,type:"END_GAME",subType:s,wind:o,shouldContinue:!0,sticks:t.controller.placeManager.sticks,scores:t.controller.scoreManager.summary,deltas:G(0),hands:G("")};t.controller.emit(a)}}else{if(t.controller.wall.canDraw)throw new Error(`unexpected event ${n.type}`);{const s=[];for(let l of Object.values(_)){const u=t.controller.hand(l);new Ze(u).calc()==0&&(s.push(l),r[l]=u.toString())}const o=s.length==0||s.length==4,a=G(0);for(let l of Object.values(_))s.includes(l)?a[l]+=o?0:3e3/s.length:a[l]-=o?0:3e3/(4-s.length);const c=s.length==4||a[_.E]>0;for(let l of Object.values(_)){const u={id:i,type:"END_GAME",subType:"DRAWN_GAME",wind:l,shouldContinue:c,sticks:t.controller.placeManager.sticks,scores:t.controller.scoreManager.summary,deltas:a,hands:r};t.controller.emit(u)}}}}},actors:{},guards:{canChi:({context:t,event:n},i)=>n.type=="CHI"?!!t.controller.doChi(n.iam,t.controller.river.lastTile.w,t.controller.river.lastTile.t):(console.error(`guards.canChi receive ${n.type}`),!1),canPon:({context:t,event:n},i)=>n.type=="PON"?!!t.controller.doPon(n.iam,t.controller.river.lastTile.w,t.controller.river.lastTile.t):(console.error(`guards.canPon receive ${n.type}`),!1),canWin:({context:t,event:n},i)=>n.type=="TSUMO"||n.type=="RON"?!0:(console.error(`guards.canWin receive ${n.type}`),!1),canReach:({context:t,event:n},i)=>n.type=="REACH"?!!t.controller.doReach(n.iam):(console.error(`guards.canReach receive ${n.type}`),!1),cannotContinue:({context:t,event:n},i)=>!t.controller.wall.canDraw||!t.controller.wall.canKan||t.controller.river.cannotContinue()},delays:{}});function Gs(e=0){let t=e;return()=>(t++).toString()}class Kt{constructor(t){v(this,"walls",{replacement:[],dead:[],doraMarkers:[],blindDoraMarkers:[],drawable:[]});v(this,"backup");v(this,"openedDoraCount",1);this.init(t),this.backup=Kt.clone(this.walls)}kan(){if(this.walls.replacement.length==0)throw new Error("exceeded maximum kan");const t=this.walls.replacement.pop();return this.walls.drawable.pop(),w.from(t)}draw(){if(!this.walls.drawable)throw new Error("cannot draw any more");return w.from(this.walls.drawable.pop())}openDoraMarker(){if(this.openedDoraCount>=4)throw new Error("exceeded maximum open dora");return this.openedDoraCount++,w.from(this.walls.doraMarkers[this.openedDoraCount-1])}get doraMarkers(){return this.walls.doraMarkers.slice(0,this.openedDoraCount).map(w.from)}get blindDoraMarkers(){return this.walls.blindDoraMarkers.slice(0,this.openedDoraCount).map(w.from)}get canKan(){return this.walls.replacement.length>0}get canDraw(){return this.walls.drawable.length>0}init(t){if(t!=null){this.walls=Kt.clone(t);return}else{for(let n of Object.values(m)){if(n==m.BACK)continue;const i=n==m.Z?[1,2,3,4,5,6,7]:[1,2,3,4,5,6,7,8,9];for(let r=0;r<4;r++)for(let s of i)n!=m.Z&&r==3&&s==5&&(s=0),this.walls.drawable.push(new w(n,s).toString())}Hi(this.walls.drawable)}for(let n=0;n<14;n++)this.walls.dead.push(this.walls.drawable.pop());for(let n=0;n<4;n++)this.walls.blindDoraMarkers.push(this.walls.dead.pop());for(let n=0;n<4;n++)this.walls.doraMarkers.push(this.walls.dead.pop());for(let n=0;n<4;n++)this.walls.replacement.push(this.walls.dead.pop())}export(){return this.backup}static clone(t){return{drawable:t.drawable.concat(),dead:t.dead.concat(),doraMarkers:t.doraMarkers.concat(),blindDoraMarkers:t.blindDoraMarkers.concat(),replacement:t.replacement.concat()}}}class Je{constructor(t,n){v(this,"wall",new Kt);v(this,"playerIDs");v(this,"actor",me(hi(this),{}));v(this,"observer");v(this,"handlers",{});v(this,"mailBox",{});v(this,"histories",[]);v(this,"debugMode");v(this,"snapshot");this.debugMode=(n==null?void 0:n.debug)??!1,this.handlers=t.reduce((o,a)=>(o[a.id]=a.handler,o),{}),this.playerIDs=t.map(o=>o.id),t.forEach(o=>o.handler.on(a=>this.enqueue(a)));const i=Is();this.observer=new Zs(i),this.observer.eventHandler.on(o=>this.observer.handleEvent(o));const r=Object.fromEntries(this.playerIDs.map(o=>[o,25e3]));this.observer.scoreManager=new He(r);const s=Hi(this.playerIDs.concat());this.observer.placeManager=new Pe({[s[0]]:_.E,[s[1]]:_.S,[s[2]]:_.W,[s[3]]:_.N})}boardParams(t){const n=this.hand(t);return{doraMarkers:this.observer.doraMarkers,round:this.placeManager.round,myWind:t,sticks:this.observer.placeManager.sticks,reached:n.reached?this.river.discards(t).length!=0?1:2:void 0}}hand(t){return this.observer.hand(t)}get placeManager(){return this.observer.placeManager}get scoreManager(){return this.observer.scoreManager}get river(){return this.observer.river}next(t){(!this.debugMode||t)&&this.actor.send({type:"NEXT"})}emit(t){const n=this.observer.placeManager.playerID(t.wind);this.handlers[n].emit(t);const i=t.iam;t.wind==i?this.observer.eventHandler.emit(t):i==null&&(!this.observer.applied[t.id]||t.type=="DISTRIBUTE")&&(this.observer.eventHandler.emit(t),this.observer.applied[t.id]=!0)}enqueue(t){this.mailBox[t.id]==null&&(this.mailBox[t.id]=[]),this.mailBox[t.id].push(t)}pollReplies(t,n){const i=this.mailBox[t];if(i==null)throw new Error(`not enqueued ${t} at ${this.actor.getSnapshot().value}`);if(i.length!=n.length)throw new Error(`${t}: num of event: got: ${n.length}, want: ${i.length}`);if(n.length==0){console.warn("no events to handle");return}const r=i[0];if(r.type=="CHOICE_AFTER_DISCARDED"){const s=As(i);if(s.events.length==0){this.actor.send({type:""});return}const o=s.events[0];switch(s.type){case"RON":R(o.choices.RON,"ron choice is none"),this.actor.send({type:s.type,iam:o.wind,ret:en(o.choices.RON),targetInfo:{wind:o.discarterInfo.wind,tile:w.from(o.discarterInfo.tile)}});break;case"DAI_KAN":R(o.choices.DAI_KAN,"daikan choice is none"),this.actor.send({type:s.type,iam:o.wind,block:z.from(o.choices.DAI_KAN)});break;case"CHI":case"PON":const a=o.choices[s.type];R(a,`${s.type} choice is none`),R(s.events.length==1,`found more than one selected: ${JSON.stringify(s,null,2)}`),this.actor.send({type:s.type,iam:o.wind,block:z.from(a[0])})}}else if(r.type=="CHOICE_AFTER_DRAWN"){const s=Ss(i);R(s.events.length==1,`found more than one selected: ${JSON.stringify(s,null,2)}`);const o=s.events[0],a=o.wind;switch(s.type){case"TSUMO":R(o.choices.TSUMO,"tsumo choice is none"),this.actor.send({type:s.type,ret:en(o.choices.TSUMO),lastTile:w.from(o.drawerInfo.tile),iam:a});break;case"REACH":const c=o.choices[s.type];R(c,`${s.type} candidates is none`),this.actor.send({type:s.type,tile:w.from(c[0].tile),iam:a});break;case"DISCARD":const l=o.choices[s.type];R(l,`${s.type} choice is none`),this.actor.send({type:s.type,tile:w.from(l[0]).clone({remove:A.TSUMO}),iam:a});break;case"AN_KAN":{const u=o.choices[s.type];R(u,`${s.type} choice is none`),this.actor.send({type:s.type,block:Z.from(u[0]),iam:a});break}case"SHO_KAN":{const u=o.choices[s.type];R(u,`${s.type} choice is none`),this.actor.send({type:s.type,block:z.from(u[0]),iam:a});break}case"DRAWN_GAME_BY_NINE_TILES":this.actor.send({type:"DRAWN_GAME_BY_NINE_TILES",iam:a});break}}else if(r.type=="CHOICE_AFTER_CALLED"){R(r.choices.DISCARD,`discard candidate tile is none: ${JSON.stringify(r,null,2)} ${this.hand(r.wind).toString()}`);const s=r.wind,o=w.from(r.choices.DISCARD[0]);R(o!=null,`undefined tile ${this.hand(s).toString()}`),this.actor.send({type:"DISCARD",tile:o,iam:s})}else if(r.type=="CHOICE_FOR_CHAN_KAN"){const s=i.filter(a=>a.choices.RON);if(s.length==0){this.actor.send({type:""});return}const o=s[0];R(o.choices.RON,"ron choice is none"),this.actor.send({type:"RON",iam:o.wind,ret:en(o.choices.RON),quadWin:!0,targetInfo:{wind:o.callerInfo.wind,tile:w.from(o.callerInfo.tile)}})}}export(){return this.histories.concat()}static load(t){const n=t.choiceEvents,i=Object.keys(t.players),r={emit:a=>{},on:a=>{}},s=i.map(a=>({id:a,handler:r})),o=new Je(s);return o.playerIDs=i,o.mailBox=n,o.observer.placeManager=new Pe(t.players,{round:structuredClone(t.round),sticks:structuredClone(t.sticks)}),o.observer.scoreManager=new He(t.scores),o.wall=new Kt(t.wall),o}start(){this.actor.subscribe(n=>{console.debug("State:",n.value)});const t={scores:this.scoreManager.summary,round:this.placeManager.round,players:this.placeManager.playerMap,wall:this.wall.export(),choiceEvents:this.mailBox,sticks:this.placeManager.sticks};this.actor.start(),this.histories.push(t),this.actor.getSnapshot().status}startGame(){for(;console.debug(`start========${this.placeManager.round}=============`),this.start(),this.wall=new Kt,this.observer.applied={},this.mailBox={},this.actor=me(hi(this)),!this.placeManager.is(L.W1););}finalResult(t,n){const i=this.hand(n),r=i.reached?this.wall.blindDoraMarkers:void 0,s=new ni(i,{...t.boardContext,sticks:this.placeManager.sticks,blindDoraMarkers:r}).calc([t.hand]);return R(s),s}doWin(t,n,i){if(n==null)return!1;let r=this.hand(t);const s=this.boardParams(t);if(r.drawn==null){if(i==null)throw new Error("should ron but params == null");if(i.whoDiscarded==t||i.missingRon)return!1;r=r.clone(),s.ronWind=i.whoDiscarded,s.finalDiscardWin=!this.wall.canDraw,s.quadWin=i.quadWin,r.inc([n])}else s.finalWallWin=!this.wall.canDraw,s.replacementWin=i==null?void 0:i.replacementWin;s.oneShotWin=i==null?void 0:i.oneShot;const o=new xs(r),a=new ni(r,s),c=o.calc(n),l=a.calc(c);if(!l||l.points.length==0)return!1;if(r.draw==null){const u=qt.candidateTiles(this.hand(t)).candidates;if(this.river.discards(t).map(f=>f.t).some(f=>u.some(p=>p.equals(f,!0))))return!1}return l}doPon(t,n,i){if(i==null||t==n)return!1;const r=this.hand(t);if(r.reached||r.hands.length<3)return!1;let s=i.clone({remove:A.HORIZONTAL});if(it(i)&&(s=s.clone({n:5})),r.get(i.t,s.n)<2)return!1;const o=[];let a=Math.abs(Number(t[0])-Number(n[0]));a==3&&(a=0),a==2&&(a=1),a==1&&(a=2);let c=new pt([s,s,s]);c=c.clone({replace:{idx:a,tile:i.clone({add:A.HORIZONTAL})}});const l=a%2+1,u=c.tiles[l];if(nt(i)&&r.get(i.t,0)>0&&(c=c.clone({replace:{idx:l,tile:u.clone({n:0})}})),o.push(c),nt(i)&&r.get(i.t,s.n)==3){const h=c.clone({replace:{idx:l,tile:u.clone({n:5})}});o.push(h)}return o}doChi(t,n,i){if(i==null||!i.isNum()||Ct(n)!=t)return!1;const r=this.hand(t);if(r.reached||r.hands.length<3)return!1;let s=i;it(s)&&(s=i.clone({n:5}));const o=[],a=s.n-2>=1&&r.get(i.t,s.n-2)>0&&r.get(i.t,s.n-1)>0,c=i.clone({add:A.HORIZONTAL,remove:A.TSUMO});if(a&&o.push(new ft([c,new w(i.t,s.n-1),new w(i.t,s.n-2)])),s.n+2<=9&&r.get(i.t,s.n+1)>0&&r.get(i.t,s.n+2)>0&&o.push(new ft([c,new w(i.t,s.n+1),new w(i.t,s.n+2)])),s.n-1>=1&&s.n+1<=9&&r.get(i.t,s.n-1)>0&&r.get(i.t,s.n+1)>0&&o.push(new ft([c,new w(i.t,s.n-1),new w(i.t,s.n+1)])),o.length==0)return!1;if(r.hands.length==4){const p=o[0],d=this.cannotDiscardTile(o[0]),g=r.dec([p.tiles[1],p.tiles[2]]),y=d.reduce((S,b)=>S+r.get(b.t,b.n),0)==2;if(r.inc(g),y)return!1}const h=r.get(i.t,0)>0,f=this.redPattern(o,h);return f.length>0&&r.get(i.t,5)==1?f:o.concat(f)}redPattern(t,n){return t.length==0?[]:n?t.filter(r=>nt(r.tiles[1])||nt(r.tiles[2])).map(r=>{if(nt(r.tiles[1])){const s=r.tiles[1].clone({n:0});return r.clone({replace:{idx:1,tile:s}})}else if(nt(r.tiles[2])){const s=r.tiles[2].clone({n:0});return r.clone({replace:{idx:2,tile:s}})}}).filter(r=>r!=null):[]}doReach(t){const n=this.hand(t);return n.reached||!n.menzen||new Ze(n).calc()>0?!1:qt.calcCandidates(n,n.hands)}doDiscard(t,n){if(this.hand(t).reached)return[this.hand(t).drawn];const i=this.hand(t).hands;if(n==null)return i;if(n instanceof pt)return i.filter(o=>!o.equals(n.tiles[0],!0));const r=this.cannotDiscardTile(n),s=i.filter(o=>!r.some(a=>o.equals(a,!0)));return R(s.length>0,`no tiles to discard. hand: ${this.hand(t)}, suji: ${r}, block-chi: ${n}`),s}cannotDiscardTile(t){let n=t.tiles[0].n,i=t.tiles[1].n;const r=t.tiles[0].t;return n==0&&(n=5),i==0&&(i=5),n-2==i?[new w(r,n-3),new w(r,n)]:n+1==i?[new w(r,n+3),new w(r,n)]:[]}doAnKan(t){const n=this.hand(t),i=[];if(n.reached)return!1;for(let r of Object.values(m))for(let s=1;s<n.getArrayLen(r);s++)if(n.get(r,s)==4){const o=[new w(r,s),new w(r,s),new w(r,s),new w(r,s)];r!=m.Z&&s==5&&(o[0]=o[0].clone({n:0})),i.push(new Z(o))}if(i.length==0)return!1;for(let r of i)R(r.tiles.filter(s=>s.has(A.HORIZONTAL)).length==0,`h op ${r.toString()}`);return i}doShoKan(t){const n=this.hand(t);if(n.reached)return!1;const i=n.called.filter(s=>s instanceof pt);if(i.length==0)return!1;const r=[];for(let s of i){const o=s.tiles[0];if(n.get(o.t,o.n)==1){const a=[...s.tiles,new w(o.t,o.n,[A.HORIZONTAL])];nt(o)&&n.get(o.t,0)==1&&a[3].n==0,r.push(new vt(a))}}if(r.length==0)return!1;for(let s of r)R(s.tiles.filter(o=>o.has(A.HORIZONTAL)).length==2,`h op ${s.toString()}`);return r}doDaiKan(t,n,i){const r=this.hand(t);if(r.reached||t==n)return!1;let s=i.clone({remove:A.HORIZONTAL});if(it(s)&&(s=s.clone({n:5})),r.get(s.t,s.n)!=3)return!1;let o=new xt([s,s,s,s]),a=Math.abs(Number(t[0])-Number(n[0]));a==3&&(a=0),a==1&&(a=3);let c=o.clone({replace:{idx:a,tile:i.clone({add:A.HORIZONTAL})}});if(nt(s)&&nt(i)){const l=a%3+1,u=c.tiles[l].clone({n:0});c=c.clone({replace:{idx:l,tile:u}})}return R(c.tiles.filter(l=>l.has(A.HORIZONTAL)).length==1,`h op ${c.toString()}`),c}canDrawnGame(t){if(this.river.discards(t).length!=0)return!1;const n=this.hand(t);let i=n.get(m.M,1)+n.get(m.M,9)+n.get(m.S,1)+n.get(m.S,9)+n.get(m.P,1)+n.get(m.P,9);for(let r=0;r<n.getArrayLen(m.Z);r++)i+=n.get(m.Z,r);return i>=9}initialHands(){const t=G("");for(let n=0;n<3;n++)for(let i of Object.values(_))for(let r=0;r<4;r++)t[i]+=this.wall.draw().toString();for(let n of Object.values(_))t[n]+=this.wall.draw().toString();return t}}class Zt extends Ge{isBackHand(){for(let t of Object.values(m))if(t!=m.BACK&&this.sum(t)>0)return!1;return this.sum(m.BACK)>0}clone(){const t=new Zt(this.toString());return t.data.reached=this.data.reached,t}dec(t){return this.isBackHand()?(super.dec(t.map(()=>new w(m.BACK,0))),[...t]):super.dec(t)}}class Zi{constructor(t,n){v(this,"id");v(this,"river",new Pi);v(this,"placeManager",new Pe({}));v(this,"scoreManager",new He({}));v(this,"hands",G(new Zt("")));v(this,"counter",new Os);v(this,"doraMarkers",[]);v(this,"eventHandler");this.id=t,this.eventHandler=n}hand(t){return this.hands[t]}handleEvent(t){try{switch(t.type){case"CHOICE_AFTER_CALLED":case"CHOICE_AFTER_DISCARDED":case"CHOICE_AFTER_DRAWN":case"CHOICE_FOR_CHAN_KAN":break;case"DISTRIBUTE":this.counter.reset();const n=w.from(t.doraMarker);this.setHands(t),this.placeManager=new Pe(structuredClone(t.places),{round:structuredClone(t.round),sticks:structuredClone(t.sticks)}),this.scoreManager=new He(structuredClone(t.scores)),this.doraMarkers=[n],this.counter.dec(n);for(let r of Object.values(_))r==t.wind&&this.counter.dec(...this.hand(r).hands);break;case"DRAW":{const r=w.from(t.tile);this.hands[t.iam].draw(r),this.counter.dec(r);break}case"DISCARD":{const r=w.from(t.tile);if(this.river.discard(r,t.iam),this.hands[t.iam].discard(r),t.iam!=t.wind){this.counter.dec(r),this.counter.addTileToSafeMap(r,t.iam);for(let s of Object.values(_))this.hand(s).reached&&this.counter.addTileToSafeMap(r,s)}break}case"PON":case"CHI":case"DAI_KAN":{const r=z.from(t.block);this.hands[t.iam].call(r),this.river.markCalled(),t.iam!=t.wind&&this.counter.dec(...r.tiles.filter(s=>!s.has(A.HORIZONTAL)));break}case"SHO_KAN":{const r=z.from(t.block);this.hands[t.iam].kan(r),t.iam!=t.wind&&this.counter.dec(r.tiles.filter(s=>s.has(A.HORIZONTAL))[0]);break}case"AN_KAN":{const r=z.from(t.block);this.hands[t.iam].kan(r),t.iam!=t.wind&&this.counter.dec(...r.tiles.filter(s=>!s.has(A.HORIZONTAL)));break}case"REACH":const i=this.placeManager.playerID(t.iam);this.hands[t.iam].reach(),this.scoreManager.reach(i),this.placeManager.incrementReachStick();break;case"NEW_DORA":{const r=w.from(t.doraMarker);this.doraMarkers.push(r),this.counter.dec(r);break}case"TSUMO":break;case"RON":if(t.pushBackReachStick){const r=t.victimInfo.wind,s=this.placeManager.playerID(r);this.scoreManager.restoreReachStick(s),this.placeManager.decrementReachStick()}break;case"END_GAME":switch(t.subType){case"NINE_TILES":case"FOUR_KAN":case"FOUR_WIND":this.placeManager.incrementDeadStick();break;case"DRAWN_GAME":{const r=this.placeManager.playerMap;this.scoreManager.update(t.deltas,r),this.placeManager.incrementDeadStick(),t.shouldContinue||this.placeManager.nextRound();break}case"WIN_GAME":{const r=this.placeManager.playerMap;this.scoreManager.update(t.deltas,r),t.shouldContinue?this.placeManager.incrementDeadStick():(this.placeManager.nextRound(),this.placeManager.resetDeadStick()),this.placeManager.resetReachStick();break}}break;default:throw new Error(`unexpected event ${JSON.stringify(t,null,2)}`)}}catch(n){throw new Error(`${this.id} ${t.type} ${n}`)}}}class Zs extends Zi{constructor(n){super("observer",n);v(this,"applied",{});this.counter.disable=!0,this.hands=G(new Zt("_____________"))}setHands(n){this.hands[n.wind]=new Zt(n.hands[n.wind])}handleEvent(n){switch(super.handleEvent(n),n.type){case"DISTRIBUTE":let i=!0;for(let r of Object.values(_))i&&(i=this.hand(r).get(m.BACK,0)==0);if(!i)break;console.debug("DISTRIBUTE:",`round: ${this.placeManager.round}`,`scores: ${JSON.stringify(this.scoreManager.summary,null,2)}`,`map: ${JSON.stringify(this.placeManager.playerMap,null,2)}`,`sticks: ${JSON.stringify(this.placeManager.sticks,null,2)}`);for(let r of Object.values(_))console.debug(this.placeManager.playerID(r),`init hand: ${this.hand(r).toString()}`);break;case"DRAW":console.debug(this.placeManager.playerID(n.iam),`draw: ${this.hand(n.iam).drawn}`,`hand: ${this.hand(n.iam).toString()}`);break;case"DISCARD":console.debug(this.placeManager.playerID(n.iam),`discard: ${n.tile.toString()}`,`hand: ${this.hand(n.iam).toString()}`);break;case"CHI":case"PON":case"DAI_KAN":case"AN_KAN":case"SHO_KAN":console.debug(this.placeManager.playerID(n.iam),`call: ${n.block.toString()}`,`hand: ${this.hand(n.iam).toString()}`);break;case"REACH":console.debug(this.placeManager.playerID(n.iam),`reach: ${this.hand(n.iam).toString()}`,`tile: ${n.tile}`);break;case"TSUMO":case"RON":console.debug(this.placeManager.playerID(n.iam),`ron/tsumo: ${JSON.stringify(n.ret,null,2)}`,`hand: ${this.hand(n.iam).toString()}`);break;case"END_GAME":for(let r of Object.values(_))console.debug(this.placeManager.playerID(r),`end hand: ${this.hand(r).toString()}`);console.debug("END_GAME",n.subType,"scores",JSON.stringify(this.scoreManager.summary,null,2),`sticks: ${JSON.stringify(this.placeManager.sticks,null,2)}`)}}}class Ie extends Zi{constructor(n,i){super(n,i);v(this,"river",new Pi);v(this,"doras",[]);this.eventHandler.on(r=>this.handleEvent(r))}get myWind(){return this.placeManager.wind(this.id)}setHands(n){for(let i of Object.values(_))this.hands[i]=new Zt(n.hands[i])}handleDiscard(n){const i=Object.values(_).filter(u=>u==this.myWind?!1:this.hand(u).reached),r=new Ze(this.hand(this.myWind)).calc();if(i.length>0&&r>=2)return le.selectTile(this.counter,i,n);const s=qt.calcCandidates(this.hand(this.myWind),n),a=We.calcPlayerCandidates(this.counter,s).sort((u,h)=>h.sum-u.sum),c=a.filter(u=>u.sum==a[0].sum);return We.selectMinPriority(this.counter,c,this.doras).tile}handleEvent(n){switch(n.type){case"CHOICE_AFTER_DISCARDED":this.eventHandler.emit(n);break;case"CHOICE_AFTER_CALLED":case"CHOICE_AFTER_DRAWN":if(n.choices.DISCARD){const i=this.handleDiscard(n.choices.DISCARD.map(w.from));n.choices.DISCARD=[i.toString()]}this.eventHandler.emit(n);break;case"CHOICE_FOR_CHAN_KAN":this.eventHandler.emit(n);break;default:super.handleEvent(n)}}}class jh{constructor(t){v(this,"index",0);v(this,"histories",[]);this.histories=JSON.parse(t)}next(){R(this.index<this.histories.length),this.index++}prev(){this.index--,R(this.index<0)}start(){Je.load(this.histories[this.index]).start()}auto(){for(;this.index<this.histories.length;this.next())this.start()}}const Lh=e=>{const[t,n]=Te(),[i,r]=Te(),[s,o]=Te(),[a,c]=Te(),l=(e==null?void 0:e.playerIDs)??["player-1","player-2","player-3","player-4"];new Ie(l[0],n),new Ie(l[1],r),new Ie(l[2],o),new Ie(l[3],c);const u=[{handler:t,id:l[0]},{handler:i,id:l[1]},{handler:s,id:l[2]},{handler:a,id:l[3]}];return new Je(u,{debug:e==null?void 0:e.debug})},Ht=(e,t)=>{let i=1;for(let r of t)r.equals(e,!0)&&(i*=2);return i};class We{static calcPlayerCandidates(t,n){let i=[];for(let r of n){let s=0,o=[];for(let a of r.candidates)o.push({tile:a.clone(),n:t.get(a)}),s+=t.get(a);i.push({sum:s,tile:r.tile,candidates:o,shanten:r.shanten})}return i}static selectMinPriority(t,n,i){R(n.length>0);let r=0,s=0;for(let o=0;o<n.length;o++){const a=We.calcPriority(t,n[o],i);a<r&&(r=a,s=o)}return n[s]}static calcPriority(t,n,i){const r=n.tile;let s=0;if(r.t==m.Z)return s=t.get(r),(r.n==5||r.n==6||r.n==7)&&(s*=2),s*Ht(r,i);{const o=t.get(r);s+=o*Ht(r,i);const a=t.get(new w(r.t,r.n+1)),c=t.get(new w(r.t,r.n+2)),l=t.get(new w(r.t,r.n-1)),u=t.get(new w(r.t,r.n-2)),h=r.n-2>0?Math.min(l,u):0,f=r.n+2<=9?Math.min(a,c):0,p=r.n-1>=1&&r.n+1<=9?Math.min(a,l):0,d=Math.max(h,p),g=Math.max(p,f);return s+=o*Ht(r,i),s+=h*Ht(new w(r.t,r.n-2),i),s+=f*Ht(new w(r.t,r.n+2),i),s+=d*Ht(new w(r.t,r.n-1),i),s+=g*Ht(new w(r.t,r.n+1),i),r.n==0,s}}}class le{static selectTile(t,n,i){R(n.length>0&&i.length>0);let r=i[0],s=Number.POSITIVE_INFINITY;for(let o of i){const a=le.rank(t,n,o);a<s&&(r=o,s=a)}return r}static rank(t,n,i){let r=0;const s=i.isNum()?le.rankN:le.rankZ;for(let o of n){const a=s(t,o,i);r<a&&(r=a)}return r}static rankZ(t,n,i){if(i.t!=m.Z)throw new Error(`expected TYPE.Z but ${i.toString()}`);if(t.isSafeTile(i.t,i.n,n))return 0;const r=t.get(i);return Math.min(r,3)}static rankN(t,n,i){if(!i.isNum())throw new Error(`expected TYPE.NUMBER but ${i.toString()}`);const r=i.n,s=i.t;if(t.isSafeTile(s,r,n))return 0;if(r==1)return t.isSafeTile(s,4,n)?3:6;if(r==9)return t.isSafeTile(s,6,n)?3:6;if(r==2||r==8)return t.isSafeTile(s,5,n)?4:8;if(r==3)return t.isSafeTile(s,6,n)?5:8;if(r==7)return t.isSafeTile(s,4,n)?5:8;const o=t.isSafeTile(s,r-3,n),a=t.isSafeTile(s,r+3,n);return o&&a?4:o||a?8:12}}exports.ActorHand=Zt;exports.BLOCK=x;exports.BaseActor=Zi;exports.Block=z;exports.BlockAnKan=Z;exports.BlockCalculator=xs;exports.BlockChi=ft;exports.BlockDaiKan=xt;exports.BlockHand=yn;exports.BlockIsolated=gi;exports.BlockOther=yi;exports.BlockPair=J;exports.BlockPon=pt;exports.BlockRun=Tt;exports.BlockShoKan=vt;exports.BlockThree=ut;exports.Controller=Je;exports.Counter=Os;exports.DoubleCalculator=ni;exports.Efficiency=qt;exports.FONT_FAMILY=fi;exports.Hand=Ge;exports.INPUT_SEPARATOR=Se;exports.ImageHelper=Di;exports.MeasureText=eo;exports.N19=bt;exports.NZ=$e;exports.OPERATOR=A;exports.Observer=Zs;exports.Parser=at;exports.PlaceManager=Pe;exports.Player=Ie;exports.PlayerEfficiency=We;exports.ROUND=L;exports.ROUND_MAP=pi;exports.Replayer=jh;exports.RiskRank=le;exports.River=Pi;exports.ScoreManager=He;exports.ShantenCalculator=Ze;exports.TABLE_CONTEXT=kr;exports.TILE_CONTEXT=Ot;exports.TYPE=m;exports.Tile=w;exports.WIND=_;exports.WIND_MAP=di;exports.Wall=Kt;exports.convertInput=bs;exports.createControllerMachine=hi;exports.createEventEmitter=Is;exports.createEventPipe=Te;exports.createHand=se;exports.createLocalGame=Lh;exports.createTable=rs;exports.createWindMap=G;exports.deserializeWinResult=en;exports.drawBlocks=bc;exports.drawTable=Ec;exports.incrementalIDGenerator=Gs;exports.isNum0=it;exports.isNum5=nt;exports.isNum5or0=Ce;exports.nextRound=Oe;exports.nextWind=Ct;exports.optimizeSVG=vc;exports.parse=ws;exports.parseTableInput=_s;exports.prevRound=Mu;exports.prevWind=Du;exports.prioritizeDiscardedEvents=As;exports.prioritizeDrawnEvents=Ss;exports.shuffle=Hi;exports.tileSortFunc=Ee;
|