mons-rules 0.2.0 → 0.2.3
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/README.md +21 -69
- package/dist/mons-rules.js +1 -0
- package/mons-rules.d.ts +27 -250
- package/package.json +36 -12
- package/mons-rules.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Gc=Object.defineProperty;var Vc=e=>{throw TypeError(e)};var vy=(e,n,o)=>n in e?Gc(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o;var l=(e,n)=>Gc(e,"name",{value:n,configurable:!0});var Ce=(e,n,o)=>vy(e,typeof n!="symbol"?n+"":n,o),Js=(e,n,o)=>n.has(e)||Vc("Cannot "+o);var F=(e,n,o)=>(Js(e,n,"read from private field"),o?o.call(e):n.get(e)),fe=(e,n,o)=>n.has(e)?Vc("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,o),Te=(e,n,o,r)=>(Js(e,n,"write to private field"),r?r.call(e,o):n.set(e,o),o),me=(e,n,o)=>(Js(e,n,"access private method"),o);var Ay=/^[+-]?\d+/u,gR=(1n<<64n)-1n;function ce(e){return e|0}l(ce,"toI32");function Ur(e){return e>>>0}l(Ur,"toU32");function B(e,n){return e+n|0}l(B,"addI32");function K(e,n){return e-n|0}l(K,"subI32");function X(e,n){return Math.imul(e,n)}l(X,"mulI32");function Ve(e,n){if(n===0)throw new RangeError("attempt to divide by zero");if(e===-2147483648&&n===-1)throw new RangeError("attempt to divide with overflow");return ce(Math.trunc(e/n))}l(Ve,"divI32");function Lc(e){return e===-2147483648?-2147483648:Math.abs(e)}l(Lc,"absI32");function R(e,n){return Hc(e+n)}l(R,"saturatingAddI32");function L(e,n){return Hc(e-n)}l(L,"saturatingSubI32");function Ue(e,n){let o=BigInt(ce(e))*BigInt(ce(n));return o<BigInt(-2147483648)?-2147483648:o>BigInt(2147483647)?2147483647:Number(o)}l(Ue,"saturatingMulI32");function Hc(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}l(Hc,"clampI32");function ri(e){if(Ay.exec(e)?.[0]===e)try{let o=BigInt(e);return o<BigInt(-2147483648)||o>BigInt(2147483647)?void 0:Number(o)}catch{return}}l(ri,"parseI32Strict");var Xe=(o=>(o[o.White=0]="White",o[o.Black=1]="Black",o))(Xe||{}),Sn=(a=>(a[a.Demon=0]="Demon",a[a.Drainer=1]="Drainer",a[a.Angel=2]="Angel",a[a.Spirit=3]="Spirit",a[a.Mystic=4]="Mystic",a))(Sn||{}),$n=(r=>(r[r.Potion=0]="Potion",r[r.Bomb=1]="Bomb",r[r.BombOrPotion=2]="BombOrPotion",r))($n||{}),Ot=(i=>(i[i.MonMove=0]="MonMove",i[i.ManaMove=1]="ManaMove",i[i.Action=2]="Action",i[i.Potion=3]="Potion",i))(Ot||{}),br=(r=>(r[r.SelectPotion=0]="SelectPotion",r[r.SelectBomb=1]="SelectBomb",r[r.Cancel=2]="Cancel",r))(br||{}),jr=(c=>(c[c.MonMove=0]="MonMove",c[c.ManaMove=1]="ManaMove",c[c.MysticAction=2]="MysticAction",c[c.DemonAction=3]="DemonAction",c[c.DemonAdditionalStep=4]="DemonAdditionalStep",c[c.SpiritTargetCapture=5]="SpiritTargetCapture",c[c.SpiritTargetMove=6]="SpiritTargetMove",c[c.SelectConsumable=7]="SelectConsumable",c[c.BombAttack=8]="BombAttack",c))(jr||{});Object.freeze(Xe);Object.freeze(Sn);Object.freeze($n);Object.freeze(Ot);Object.freeze(br);Object.freeze(jr);var Kr=Object.freeze({kind:"supermana"});function U(e){return e===1?0:1}l(U,"otherColor");function jc(e,n,o){return{kind:e,color:n,cooldown:ce(o)}}l(jc,"createMon");function ee(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}l(ee,"cloneMon");function eu(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}l(eu,"monEquals");function V(e){return e.cooldown>0}l(V,"isMonFainted");function ti(e){e.cooldown=2}l(ti,"faintMon");function ai(e){e.cooldown>0&&(e.cooldown=ce(e.cooldown-1))}l(ai,"decreaseMonCooldown");function ou(e){return{kind:"regular",color:e}}l(ou,"regularMana");function xe(e){return e.kind==="regular"?ou(e.color):Kr}l(xe,"cloneMana");function je(e,n){return e.kind===n.kind&&(e.kind==="supermana"||e.color===n.color)}l(je,"manaEquals");function Pe(e,n){return e.kind==="supermana"?2:e.color===n?1:2}l(Pe,"manaScore");function Pn(e){return{kind:"mon",mon:ee(e)}}l(Pn,"monItem");function qo(e){return{kind:"mana",mana:xe(e)}}l(qo,"manaItem");function wo(e,n){return{kind:"mon-with-mana",mon:ee(e),mana:xe(n)}}l(wo,"monWithManaItem");function ru(e,n){return{kind:"mon-with-consumable",mon:ee(e),consumable:n}}l(ru,"monWithConsumableItem");function tu(e){return{kind:"consumable",consumable:e}}l(tu,"consumableItem");function Ne(e){switch(e.kind){case"mon":return Pn(e.mon);case"mana":return qo(e.mana);case"mon-with-mana":return wo(e.mon,e.mana);case"mon-with-consumable":return ru(e.mon,e.consumable);case"consumable":return tu(e.consumable)}}l(Ne,"cloneItem");function H(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}l(H,"itemMon");function Ro(e){let n=H(e);return n===void 0||!V(n)}l(Ro,"isSpiritTargetAllowed");function Gn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}l(Gn,"itemMana");function Mr(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}l(Mr,"itemConsumable");function Kc(e,n){if(e.kind!==n.kind)return!1;switch(e.kind){case"mon":return eu(e.mon,n.mon);case"mana":return je(e.mana,n.mana);case"mon-with-mana":{let o=n;return eu(e.mon,o.mon)&&je(e.mana,o.mana)}case"mon-with-consumable":{let o=n;return eu(e.mon,o.mon)&&e.consumable===o.consumable}case"consumable":return e.consumable===n.consumable}}l(Kc,"itemEquals");function nu(e){return`${e.kind}:${e.color}:${e.cooldown}`}l(nu,"monKey");function Uc(e){return e.kind==="supermana"?"s":`r:${e.color}`}l(Uc,"manaKey");function Et(e){switch(e.kind){case"mon":return`m:${nu(e.mon)}`;case"mana":return`a:${Uc(e.mana)}`;case"mon-with-mana":return`mm:${nu(e.mon)}:${Uc(e.mana)}`;case"mon-with-consumable":return`mc:${nu(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}l(Et,"itemKey");function on(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:{i:e.location.i,j:e.location.j}};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(on,"cloneInput");function Be(e){return e.map(on)}l(Be,"cloneInputs");function _n(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}l(_n,"inputKey");function un(e){return e.map(_n).join(";")}l(un,"inputChainKey");function zo(e,n){return _n(e)===_n(n)}l(zo,"inputEquals");function ae(e,n){return e.length===n.length&&e.every((o,r)=>{let i=n[r];return i!==void 0&&zo(o,i)})}l(ae,"inputChainsEqual");var q=11,Me=q*q,qc=Math.trunc(q/2),gt=q-1;function We(e,n){return{i:ce(e),j:ce(n)}}l(We,"location");function g(e){return{i:e.i,j:e.j}}l(g,"cloneLocation");function we(e,n){return e.i===n.i&&e.j===n.j}l(we,"locationEquals");function Po(e){return e.i>=0&&e.i<q&&e.j>=0&&e.j<q}l(Po,"isValidLocation");function Z(e){return e.i*q+e.j}l(Z,"locationIndex");function Iy(e){return Ur(B(X(ce(e.i),q),ce(e.j)))}l(Iy,"wrappedLocationIndex");function au(e){let n=Iy(e);if(n>=Me)throw new RangeError("location index is out of bounds");return n}l(au,"checkedWrappedLocationIndex");function co(e){return We(Math.trunc(e/q),e%q)}l(co,"fromLocationIndex");function kr(e,n){return We(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}l(kr,"locationBetween");function J(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}l(J,"locationDistance");function zc(e,n){let o=[];for(let r=e.i-n;r<=e.i+n;r+=1)for(let i=e.j-n;i<=e.j+n;i+=1){let a=We(r,i);Po(a)&&!we(a,e)&&o.push(a)}return o}l(zc,"nearbyLocationsFor");function $c(e,n){let o=[];for(let[r,i]of n){let a=We(e.i+r,e.j+i);Po(a)&&o.push(a)}return o}l($c,"directionalReachabilityFor");function Ny(e){let n=[];for(let o=-2;o<=2;o+=1)for(let r=-2;r<=2;r+=1){if(Math.max(Math.abs(o),Math.abs(r))!==2)continue;let i=We(e.i+o,e.j+r);Po(i)&&n.push(i)}return n}l(Ny,"spiritReachabilityFor");function vt(e){return Array.from({length:Me},(n,o)=>e(co(o)))}l(vt,"buildCache");var Dy=vt(e=>zc(e,1)),xy=vt(e=>zc(e,3)),By=vt(e=>$c(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),Wy=vt(e=>$c(e,[[-2,0],[2,0],[0,2],[0,-2]])),Fy=vt(Ny);function At(e,n){return Po(n)?e[Z(n)]??[]:[]}l(At,"cachedLocations");function Re(e){return At(Dy,e)}l(Re,"nearbyLocations");function qr(e){return At(xy,e)}l(qr,"bombReachableLocations");function Oo(e){return At(By,e)}l(Oo,"mysticReachableLocations");function Eo(e){return At(Wy,e)}l(Eo,"demonReachableLocations");function go(e){return At(Fy,e)}l(go,"spiritReachableLocations");var Xc=Array.from({length:Me},(e,n)=>co(n));var ii=(f=>(f[f.Classic=0]="Classic",f[f.SwappedManaRows=1]="SwappedManaRows",f[f.OffsetArcManaRows=2]="OffsetArcManaRows",f[f.CenterSpokeManaRows=3]="CenterSpokeManaRows",f[f.AlternatingManaRows=4]="AlternatingManaRows",f[f.InnerWedgeManaRows=5]="InnerWedgeManaRows",f[f.OuterWedgeManaRows=6]="OuterWedgeManaRows",f[f.BentCenterManaRows=7]="BentCenterManaRows",f[f.OuterEdgeManaRows=8]="OuterEdgeManaRows",f[f.SplitFlankManaRows=9]="SplitFlankManaRows",f[f.ForwardBridgeManaRows=10]="ForwardBridgeManaRows",f[f.CornerChainManaRows=11]="CornerChainManaRows",f))(ii||{});Object.freeze(ii);var $o=0,Ae=5,Se=5,su=1,Xn=1,np=[0,1,2,3,4,5,6,7,8,9,10,11];function Le(...e){return e.map(([n,o])=>We(n,o))}l(Le,"locations");var Yc=[{1:Le([3,4],[3,6],[4,3],[4,5],[4,7]),0:Le([7,4],[7,6],[6,3],[6,5],[6,7])},{1:Le([3,3],[3,5],[3,7],[4,4],[4,6]),0:Le([7,3],[7,5],[7,7],[6,4],[6,6])},{1:Le([3,4],[3,6],[4,2],[4,5],[4,8]),0:Le([6,2],[6,5],[6,8],[7,4],[7,6])},{1:Le([3,5],[4,2],[4,4],[4,6],[4,8]),0:Le([6,2],[6,4],[6,6],[6,8],[7,5])},{1:Le([4,1],[4,3],[4,5],[4,7],[4,9]),0:Le([6,1],[6,3],[6,5],[6,7],[6,9])},{1:Le([3,4],[3,6],[4,4],[4,5],[4,6]),0:Le([6,4],[6,5],[6,6],[7,4],[7,6])},{1:Le([3,4],[3,5],[3,6],[4,3],[4,7]),0:Le([6,3],[6,7],[7,4],[7,5],[7,6])},{1:Le([3,5],[4,4],[4,5],[4,6],[5,3]),0:Le([5,7],[6,4],[6,5],[6,6],[7,5])},{1:Le([4,0],[4,1],[4,9],[4,10],[5,1]),0:Le([5,9],[6,0],[6,1],[6,9],[6,10])},{1:Le([3,4],[3,6],[4,2],[4,3],[5,2]),0:Le([5,8],[6,7],[6,8],[7,4],[7,6])},{1:Le([3,4],[3,6],[4,3],[4,5],[5,4]),0:Le([5,6],[6,5],[6,7],[7,4],[7,6])},{1:Le([3,5],[3,6],[4,6],[4,7],[5,7]),0:Le([5,3],[6,3],[6,4],[7,4],[7,5])}],iu=Object.freeze({kind:"regular"}),Qc=Object.freeze({kind:"consumable-base"}),_y=Object.freeze({kind:"supermana-base"}),uu=We(5,5),It=Le([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function Gy(e){switch(e){case 0:return 0;case 1:return 1;case 2:return 2;case 3:return 3;case 4:return 4;case 5:return 5;case 6:return 6;case 7:return 7;case 8:return 8;case 9:return 9;case 10:return 10;case 11:return 11;default:return}}l(Gy,"gameVariantFromId");function op(e){let n=ri(e);return n===void 0?void 0:Gy(n)}l(op,"parseGameVariant");function Zc(e,n){return(Yc[e]??Yc[0])?.[n]??[]}l(Zc,"manaBaseLocations");function Vy(e){let n=Array.from({length:Me}).fill(iu),o=l((r,i)=>{n[Z(r)]=i},"put");o(We(0,0),{kind:"mana-pool",color:1}),o(We(0,10),{kind:"mana-pool",color:1}),o(We(10,0),{kind:"mana-pool",color:0}),o(We(10,10),{kind:"mana-pool",color:0}),o(We(0,3),{kind:"mon-base",monKind:4,color:1}),o(We(0,4),{kind:"mon-base",monKind:3,color:1}),o(We(0,5),{kind:"mon-base",monKind:1,color:1}),o(We(0,6),{kind:"mon-base",monKind:2,color:1}),o(We(0,7),{kind:"mon-base",monKind:0,color:1}),o(We(10,3),{kind:"mon-base",monKind:0,color:0}),o(We(10,4),{kind:"mon-base",monKind:2,color:0}),o(We(10,5),{kind:"mon-base",monKind:1,color:0}),o(We(10,6),{kind:"mon-base",monKind:3,color:0}),o(We(10,7),{kind:"mon-base",monKind:4,color:0});for(let r of Zc(e,1))o(r,{kind:"mana-base",color:1});for(let r of Zc(e,0))o(r,{kind:"mana-base",color:0});return o(We(5,0),Qc),o(We(5,10),Qc),o(uu,_y),n}l(Vy,"buildSquares");var Jc=np.map(Vy);function rp(e){return Jc[e]??Jc[0]??[]}l(rp,"squaresForVariant");function lu(e,n){return Po(e)?rp(n)[Z(e)]??iu:iu}l(lu,"squareAtForVariant");function Ly(e){return lu(e,$o)}l(Ly,"squareAt");function Hy(e){switch(e.kind){case"mon-base":return Pn(jc(e.monKind,e.color,0));case"mana-base":return qo(ou(e.color));case"supermana-base":return qo(Kr);case"consumable-base":return tu(2);case"regular":case"mana-pool":return}}l(Hy,"initialItemForSquare");function Uy(e){return rp(e).map(Hy)}l(Uy,"buildInitialItems");var ep=np.map(Uy);function tp(e){return(ep[e]??ep[0]??[]).map(o=>o===void 0?void 0:Ne(o))}l(tp,"initialItemsForVariant");function ap(e,n){for(let o of It){let r=Ly(o);if(r.kind==="mon-base"&&r.monKind===e&&r.color===n)return o}throw new Error("Expected at least one base for the given mon")}l(ap,"monBase");var cu=Symbol();function jy(e){return Array.from({length:Me},(n,o)=>{let r=e[o];return r===void 0?void 0:Ne(r)})}l(jy,"cloneBoardItems");var Xo,zr=class zr{constructor(n=$o,o){Ce(this,"itemSlots");Ce(this,"occupiedEntries");fe(this,Xo);let r=o?.[cu];this.itemSlots=r===void 0?tp(n):r.kind==="deep"?jy(r.items):[...r.items],Te(this,Xo,n),this.occupiedEntries=r?.kind==="simulation"?r.occupiedEntries:void 0}get items(){return[...this.itemSlots]}static fromItems(n,o){return new zr(o,{[cu]:{kind:"deep",items:n}})}clone(){return zr.fromItems(this.itemSlots,F(this,Xo))}cloneForSimulation(){return new zr(F(this,Xo),{[cu]:{kind:"simulation",items:this.itemSlots,occupiedEntries:this.getOccupiedEntries()}})}removeItem(n){this.itemSlots[au(n)]=void 0,this.occupiedEntries=void 0}put(n,o){this.itemSlots[au(o)]=Ne(n),this.occupiedEntries=void 0}item(n){if(Po(n))return this.itemSlots[Z(n)]}square(n){return Po(n)?lu(n,F(this,Xo)):{kind:"regular"}}variant(){return F(this,Xo)}allMonsBases(){return It.map(g)}supermanaBase(){return g(uu)}allMonsLocations(n){let o=[];for(let r=0;r<Me;r+=1){let i=this.itemSlots[r];i!==void 0&&H(i)?.color===n&&o.push(co(r))}return o}allFreeRegularManaLocations(n){let o=[];for(let r=0;r<Me;r+=1){let i=this.itemSlots[r];i?.kind==="mana"&&i.mana.kind==="regular"&&i.mana.color===n&&o.push(co(r))}return o}base(n){return g(ap(n.kind,n.color))}faintedMonsLocations(n){let o=[];for(let r=0;r<Me;r+=1){let i=this.itemSlots[r];i?.kind==="mon"&&i.mon.color===n&&V(i.mon)&&o.push(co(r))}return o}findMana(n){for(let o=0;o<Me;o+=1){let r=this.itemSlots[o];if(r?.kind==="mana"&&r.mana.kind==="regular"&&r.mana.color===n)return co(o)}}findAwakeAngel(n){for(let o=0;o<Me;o+=1){let r=this.itemSlots[o],i=r===void 0?void 0:H(r);if(i?.color===n&&i.kind===2&&!V(i))return co(o)}}itemsEqual(n){for(let o=0;o<Me;o+=1){let r=this.itemSlots[o],i=n.itemSlots[o];if(r===void 0||i===void 0){if(r!==i)return!1}else if(!Kc(r,i))return!1}return!0}getOccupiedEntries(){if(this.occupiedEntries!==void 0)return this.occupiedEntries;let n=[];for(let o=0;o<Me;o+=1){let r=this.itemSlots[o];if(r!==void 0){let i=Xc[o];i!==void 0&&n.push([i,r])}}return this.occupiedEntries=n,n}occupied(){return this.getOccupiedEntries().values()}};Xo=new WeakMap,l(zr,"Board");var Cr=zr;function ip(e,n){return e.variant()!==n.variant()?!1:e.itemsEqual(n)}l(ip,"boardEquals");function Ze(e){let n="",o=0;for(let r=0;r<e.length;r+=1){let i=e.charCodeAt(r);if(i>=55296&&i<=56319){let a=e.charCodeAt(r+1);if(a>=56320&&a<=57343){r+=1;continue}}else if(i<56320||i>57343)continue;n+=`${e.slice(o,r)}\uFFFD`,o=r+1}return o===0?e:n+e.slice(o)}l(Ze,"toWellFormedString");function pu(e){return e>=9&&e<=13||e===32||e===133||e===160||e===5760||e>=8192&&e<=8202||e===8232||e===8233||e===8239||e===8287||e===12288}l(pu,"isParserWhitespaceCodePoint");function up(e){let n=Ze(e),o=[],r="";for(let i of n){let a=i.codePointAt(0);a!==void 0&&pu(a)?r!==""&&(o.push(r),r=""):r+=i}return r!==""&&o.push(r),o}l(up,"splitParserWhitespace");function lp(e){return e<=127?1:e<=2047?2:e<=65535?3:4}l(lp,"utf8ScalarLength");function du(e){let n=0;for(let o of Ze(e))n+=lp(o.codePointAt(0)??0);return n}l(du,"utf8ByteLength");function sp(e,n){if(!Number.isInteger(n)||n<0)throw new RangeError("UTF-8 byte index is not a scalar boundary");let o=0,r=0;for(let i of e){if(o===n)return r;if(o+=lp(i.codePointAt(0)??0),r+=i.length,o>n)throw new RangeError("UTF-8 byte index is not a scalar boundary")}if(o===n)return r;throw new RangeError("UTF-8 byte index is not a scalar boundary")}l(sp,"utf16IndexAtUtf8Offset");function fu(e,n,o){if(o<n)throw new RangeError("UTF-8 byte index is not a scalar boundary");let r=Ze(e);return r.slice(sp(r,n),sp(r,o))}l(fu,"sliceByUtf8Bytes");function cp(e){let n=Array.from(Ze(e)),o=0,r=n.length;for(;o<r&&pu(n[o]?.codePointAt(0)??-1);)o+=1;for(;r>o&&pu(n[r-1]?.codePointAt(0)??-1);)r-=1;return n.slice(o,r).join("")}l(cp,"trimParserWhitespace");function mu(e){return ri(e)}l(mu,"parseI32");function Nt(e){return e===0?"w":"b"}l(Nt,"colorFen");function Ky(e){switch(e){case"w":return 0;case"b":return 1;default:return}}l(Ky,"parseColorFen");function Yn(e){let n=(()=>{switch(e.kind){case 0:return"e";case 1:return"d";case 2:return"a";case 3:return"s";case 4:return"y"}})();return`${e.color===0?n.toUpperCase():n}${e.cooldown%10}`}l(Yn,"monFen");function qy(e){let n=Ze(e);if(du(n)!==2)return;let o=Array.from(n),r=o[0],i=o[1];if(r===void 0||i===void 0)return;let a=(()=>{switch(r.toLowerCase()){case"e":return 0;case"d":return 1;case"a":return 2;case"s":return 3;case"y":return 4;default:return}})();if(!(a===void 0||!/^[0-9]$/u.test(i)))return{kind:a,color:r===r.toUpperCase()?0:1,cooldown:i.charCodeAt(0)-48}}l(qy,"parseMonFen");function $r(e){return e.kind==="supermana"?"U":e.color===0?"M":"m"}l($r,"manaFen");function pp(e){switch(e){case"M":return{kind:"regular",color:0};case"m":return{kind:"regular",color:1};case"U":return{kind:"supermana"};default:return}}l(pp,"parseManaFen");function dp(e){switch(e){case 0:return"P";case 1:return"B";case 2:return"Q"}}l(dp,"consumableFen");function fp(e){switch(e){case"P":return 0;case"B":return 1;case"Q":return 2;default:return}}l(fp,"parseConsumableFen");function si(e){switch(e.kind){case"mon":return`${Yn(e.mon)}x`;case"mana":return`xx${$r(e.mana)}`;case"mon-with-mana":return`${Yn(e.mon)}${$r(e.mana)}`;case"mon-with-consumable":return`${Yn(e.mon)}${dp(e.consumable)}`;case"consumable":return`xx${dp(e.consumable)}`}}l(si,"itemFen");function zy(e){let n=Ze(e);if(du(n)!==3)return;let o=fu(n,0,2),r=fu(n,2,3);if(o==="xx"){let s=pp(r);if(s!==void 0)return{kind:"mana",mana:s};let u=fp(r);return u===void 0?void 0:{kind:"consumable",consumable:u}}let i=qy(o);if(i===void 0)return;let a=pp(r);if(a!==void 0)return{kind:"mon-with-mana",mon:i,mana:a};let t=fp(r);return t!==void 0?{kind:"mon-with-consumable",mon:i,consumable:t}:{kind:"mon",mon:i}}l(zy,"parseItemFen");function ge(e){return`${e.i},${e.j}`}l(ge,"locationFen");function $y(e){let n=e.split(",");if(n.length!==2)return;let o=n[0],r=n[1];if(o===void 0||r===void 0)return;let i=mu(o),a=mu(r);return i===void 0||a===void 0?void 0:{i,j:a}}l($y,"parseLocationFen");function Xy(e){let n=[];for(let o=0;o<q;o+=1){let r="",i=0;for(let a=0;a<q;a+=1){let t=e.item({i:o,j:a});if(t===void 0){i+=1;continue}i>0&&(r+=mp(i),i=0),r+=si(t)}i>0&&(r+=mp(i)),n.push(r)}return n.join("/")}l(Xy,"boardFen");function Yy(e,n){let o=Ze(e).split("/");if(o.length!==q)return;let r=Array.from({length:Me},()=>{});for(let[i,a]of o.entries()){let t=Array.from(a),s=0,u=0;for(;s<t.length;){if(t[s]==="n"){let d=t.slice(s+1,s+3).join("");if(s+=1+Math.min(2,t.length-s-1),/^\+?[0-9]+$/u.test(d)){let f=Number(d);Number.isSafeInteger(f)&&(u=Ur(u+f))}continue}let c=t.slice(s,s+3).join("");s+=Math.min(3,t.length-s);let p=zy(c);if(p!==void 0){let d=Ur(i*q+u);if(d>=Me)throw new RangeError("board FEN item index is out of bounds");r[d]=p}u=Ur(u+1)}}return Cr.fromItems(r,n)}l(Yy,"parseBoardFen");function Sp(e){let n=[e.whiteScore,e.blackScore,Nt(e.activeColor),e.actionsUsedCount,e.manaMovesCount,e.monsMovesCount,e.whitePotionsCount,e.blackPotionsCount,e.turnNumber,Xy(e.board)].map(String),o=e.board.variant();return o!==$o&&n.push(String(o)),n.join(" ")}l(Sp,"gameFen");function yp(e){let n=up(e);if(n.length!==10&&n.length!==11)return;let o=n.length===10?$o:op(n[10]??"");if(o===void 0)return;let r=n[9],i=n[2];if(r===void 0||i===void 0)return;let a=Yy(r,o),t=Ky(i);if(a===void 0||t===void 0)return;let s=[n[0],n[1],n[3],n[4],n[5],n[6],n[7],n[8]].map(y=>mu(y??""));if(s.some(y=>y===void 0))return;let[u,c,p,d,f,m,S,h]=s;if(!(u===void 0||c===void 0||p===void 0||d===void 0||f===void 0||m===void 0||S===void 0||h===void 0))return{board:a,whiteScore:u,blackScore:c,activeColor:t,actionsUsedCount:p,manaMovesCount:d,monsMovesCount:f,whitePotionsCount:m,blackPotionsCount:S,turnNumber:h}}l(yp,"parseGameFen");function Qy(e){switch(e){case 0:return"p";case 1:return"b";case 2:return"c"}}l(Qy,"modifierFen");function Zy(e){switch(e){case"p":return 0;case"b":return 1;case"c":return 2;default:return}}l(Zy,"parseModifierFen");function Jy(e){switch(e.kind){case"takeback":return"z";case"location":return`l${ge(e.location)}`;case"modifier":return`m${Qy(e.modifier)}`}}l(Jy,"inputFen");function Su(e){switch(e[0]){case"l":{let n=$y(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=Zy(e.slice(1));return n===void 0?void 0:{kind:"modifier",modifier:n}}case"z":return{kind:"takeback"};default:return}}l(Su,"parseInputFen");function Tr(e){return e.map(Jy).join(";")}l(Tr,"inputArrayFen");function ui(e){if(e==="")return[];let n=[];for(let o of e.split(";")){let r=Su(o);r!==void 0&&n.push(r)}return n}l(ui,"parseInputArrayFen");function eh(e){switch(e.kind){case"mon-move":return`mm ${si(e.item)} ${ge(e.from)} ${ge(e.to)}`;case"mana-move":return`mma ${$r(e.mana)} ${ge(e.from)} ${ge(e.to)}`;case"mana-scored":return`ms ${$r(e.mana)} ${ge(e.at)}`;case"mystic-action":return`ma ${Yn(e.mystic)} ${ge(e.from)} ${ge(e.to)}`;case"demon-action":return`da ${Yn(e.demon)} ${ge(e.from)} ${ge(e.to)}`;case"demon-additional-step":return`das ${Yn(e.demon)} ${ge(e.from)} ${ge(e.to)}`;case"spirit-target-move":return`stm ${si(e.item)} ${ge(e.from)} ${ge(e.to)} ${ge(e.by)}`;case"pickup-bomb":return`pb ${Yn(e.by)} ${ge(e.at)}`;case"pickup-potion":return`pp ${si(e.by)} ${ge(e.at)}`;case"use-potion":return`up ${ge(e.from)} ${ge(e.to)}`;case"pickup-mana":return`pm ${$r(e.mana)} ${Yn(e.by)} ${ge(e.at)}`;case"mon-fainted":return`mf ${Yn(e.mon)} ${ge(e.from)} ${ge(e.to)}`;case"mana-dropped":return`md ${$r(e.mana)} ${ge(e.at)}`;case"supermana-back-to-base":return`sb ${ge(e.from)} ${ge(e.to)}`;case"bomb-attack":return`ba ${Yn(e.by)} ${ge(e.from)} ${ge(e.to)}`;case"mon-awake":return`maw ${Yn(e.mon)} ${ge(e.at)}`;case"bomb-explosion":return`be ${ge(e.at)}`;case"next-turn":return`nt ${Nt(e.color)}`;case"game-over":return`go ${Nt(e.winner)}`;case"takeback":return"z"}}l(eh,"eventFen");function hp(e){return e.map(eh).join(" ")}l(hp,"eventArrayFen");function mp(e){return`n${String(e).padStart(2,"0")}`}l(mp,"emptyRunFen");var nh=8,oh=4096,rh=8192,th=8192,ah=Object.freeze({includeManaStartsWithPotionAction:!1}),kn=Object.freeze({includeManaStartsWithPotionAction:!0});function bp(){return{startSuggestions:new Map,secondInputOptions:new Map,secondStage:new Map,thirdStage:new Map}}l(bp,"createProcessInputCache");function xt(e){let n={input:on(e.input),kind:e.kind};return e.actorMonItem===void 0?n:{...n,actorMonItem:Ne(e.actorMonItem)}}l(xt,"cloneNextInput");function Xr(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Ne(e.item),from:g(e.from),to:g(e.to)};case"mana-move":return{kind:e.kind,mana:xe(e.mana),from:g(e.from),to:g(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:xe(e.mana),at:g(e.at)};case"mystic-action":return{kind:e.kind,mystic:ee(e.mystic),from:g(e.from),to:g(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:ee(e.demon),from:g(e.from),to:g(e.to)};case"spirit-target-move":return{kind:e.kind,item:Ne(e.item),from:g(e.from),to:g(e.to),by:g(e.by)};case"pickup-bomb":return{kind:e.kind,by:ee(e.by),at:g(e.at)};case"pickup-potion":return{kind:e.kind,by:Ne(e.by),at:g(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:g(e.from),to:g(e.to)};case"pickup-mana":return{kind:e.kind,mana:xe(e.mana),by:ee(e.by),at:g(e.at)};case"mon-fainted":return{kind:e.kind,mon:ee(e.mon),from:g(e.from),to:g(e.to)};case"bomb-attack":return{kind:e.kind,by:ee(e.by),from:g(e.from),to:g(e.to)};case"mon-awake":return{kind:e.kind,mon:ee(e.mon),at:g(e.at)};case"bomb-explosion":return{kind:e.kind,at:g(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}l(Xr,"cloneEvent");function Mp(e){switch(e.kind){case"invalid-input":return{kind:e.kind};case"locations-to-start-from":return{kind:e.kind,locations:e.locations.map(g)};case"next-input-options":return{kind:e.kind,nextInputs:e.nextInputs.map(xt)};case"events":return{kind:e.kind,events:e.events.map(Xr)}}}l(Mp,"cloneOutput");function li(e,n,o,r){e.size>=r&&!e.has(n)&&e.clear(),e.set(n,o)}l(li,"boundedCacheInsert");function An(e,n,o){let r={input:on(e),kind:n};return o===void 0?r:{...r,actorMonItem:Ne(o)}}l(An,"nextInput");function Dt(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}l(Dt,"regularSquareForMovement");var kp=Symbol(),On,Mn,Ie,Yr,po,Bt,Cp,ci,Tp,wp,Rp,Pp,Op,Ep,gp,yu,In=class In{constructor(n=!1,o=$o,r){fe(this,Ie);Ce(this,"board");Ce(this,"whiteScore");Ce(this,"blackScore");Ce(this,"activeColor");Ce(this,"actionsUsedCount");Ce(this,"manaMovesCount");Ce(this,"monsMovesCount");Ce(this,"whitePotionsCount");Ce(this,"blackPotionsCount");Ce(this,"turnNumber");Ce(this,"takebackFens");Ce(this,"isMovesVerified");Ce(this,"withVerboseTracking");Ce(this,"verboseTrackingEntities");fe(this,On);fe(this,Mn);this.board=r?.[kp]??new Cr(o),this.whiteScore=0,this.blackScore=0,this.activeColor=0,this.actionsUsedCount=0,this.manaMovesCount=0,this.monsMovesCount=0,this.whitePotionsCount=0,this.blackPotionsCount=0,this.turnNumber=1,this.takebackFens=[],this.isMovesVerified=!0,this.withVerboseTracking=n,this.verboseTrackingEntities=[],Te(this,On,!0),Te(this,Mn,bp())}static new(n,o){return new In(n,o)}static newSimulationState(n){var r,i;let o=me(r=In,po,Bt).call(r,!1,n.board);return me(i=o,Ie,Yr).call(i,n),Te(o,On,!1),o}static fromFen(n,o=!1){var a,t;let r=yp(n);if(r===void 0)return;let i=me(a=In,po,Bt).call(a,o,r.board);return me(t=i,Ie,Yr).call(t,r),i.takebackFens=[],i.isMovesVerified=!1,i.verboseTrackingEntities=[],i}fen(){return Sp(this)}clone(){var o,r;let n=me(o=In,po,Bt).call(o,this.withVerboseTracking,this.board.clone());return me(r=n,Ie,Yr).call(r,this),n.takebackFens=[...this.takebackFens],n.isMovesVerified=this.isMovesVerified,n.verboseTrackingEntities=this.verboseTrackingEntities.map(i=>({fen:i.fen,color:i.color,events:i.events.map(Xr)})),Te(n,On,F(this,On)),n}cloneForSimulation(){var o,r;let n=me(o=In,po,Bt).call(o,!1,this.board.cloneForSimulation());return me(r=n,Ie,Yr).call(r,this),Te(n,On,!1),n.isMovesVerified=this.isMovesVerified,n}variant(){return this.board.variant()}replaceBoardItems(n){let o=Array.from({length:Me},()=>{});for(let[r,i]of n)o[Z(r)]=Ne(i);this.board=Cr.fromItems(o,this.variant()),this.takebackFens=[],this.verboseTrackingEntities=[],this.isMovesVerified=!1,this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){Te(this,On,n),n||(this.takebackFens=[]),this.invalidateProcessInputCache()}invalidateProcessInputCache(){Te(this,Mn,bp())}setVerboseTracking(n){this.withVerboseTracking=n,n||(this.verboseTrackingEntities=[])}clearTracking(){this.takebackFens=[],this.verboseTrackingEntities=[],this.invalidateProcessInputCache()}canTakeback(n){return F(this,On)&&this.takebackFens.length>1&&this.activeColor===n}processInput(n,o,r){return this.processInputWithStartOptions(n,o,r,void 0)}processInputWithStartOptions(n,o,r,i){return me(this,Ie,ci).call(this,n,o,r,i??ah)}applyAndAddResultingEvents(n){if(this.invalidateProcessInputCache(),F(this,On)&&this.takebackFens.length===0){let a=this.fen();this.takebackFens.push(a),this.withVerboseTracking&&this.verboseTrackingEntities.length===0&&this.verboseTrackingEntities.push({fen:a,color:this.activeColor,events:[]})}let o=[];for(let a of n)switch(a.kind){case"mon-move":this.monsMovesCount=B(this.monsMovesCount,1),this.board.removeItem(a.from),this.board.put(a.item,a.to);break;case"mana-move":this.manaMovesCount=B(this.manaMovesCount,1),this.board.removeItem(a.from),this.board.put(qo(a.mana),a.to);break;case"mana-scored":{let t=Pe(a.mana,this.activeColor);this.activeColor===0?this.whiteScore=B(this.whiteScore,t):this.blackScore=B(this.blackScore,t);let s=this.board.item(a.at);if(s!==void 0){let u=H(s);u===void 0?this.board.removeItem(a.at):this.board.put(Pn(u),a.at)}break}case"mystic-action":this.actionsUsedCount>=Xn?(this.activeColor===0?this.whitePotionsCount=K(this.whitePotionsCount,1):this.blackPotionsCount=K(this.blackPotionsCount,1),o.push({kind:"use-potion",from:g(a.from),to:g(a.to)})):this.actionsUsedCount=B(this.actionsUsedCount,1),this.board.removeItem(a.to);break;case"demon-action":{this.board.removeItem(a.from);let t=n.find(s=>s.kind==="demon-additional-step")?.to;if(t===void 0?this.board.put(Pn(a.demon),a.to):this.board.removeItem(a.to),this.actionsUsedCount>=Xn){this.activeColor===0?this.whitePotionsCount=K(this.whitePotionsCount,1):this.blackPotionsCount=K(this.blackPotionsCount,1);let s=t??a.to;o.push({kind:"use-potion",from:g(s),to:g(s)})}else this.actionsUsedCount=B(this.actionsUsedCount,1);break}case"demon-additional-step":this.board.put(Pn(a.demon),a.to);break;case"spirit-target-move":this.actionsUsedCount>=Xn?(this.activeColor===0?this.whitePotionsCount=K(this.whitePotionsCount,1):this.blackPotionsCount=K(this.blackPotionsCount,1),o.push({kind:"use-potion",from:g(a.by),to:g(a.to)})):this.actionsUsedCount=B(this.actionsUsedCount,1),this.board.removeItem(a.from),this.board.put(a.item,a.to);break;case"pickup-bomb":this.board.put(ru(a.by,1),a.at);break;case"pickup-potion":{let t=H(a.by);if(t===void 0)break;t.color===0?this.whitePotionsCount=B(this.whitePotionsCount,1):this.blackPotionsCount=B(this.blackPotionsCount,1),this.board.put(a.by,a.at);break}case"pickup-mana":this.board.put(wo(a.by,a.mana),a.at);break;case"mon-fainted":{let t=ee(a.mon);ti(t),this.board.put(Pn(t),a.to);break}case"mana-dropped":this.board.put(qo(a.mana),a.at);break;case"supermana-back-to-base":{let t=this.board.item(a.to);t?.kind==="mon"?this.board.put(wo(t.mon,Kr),a.to):this.board.put(qo(Kr),a.to);break}case"bomb-attack":this.board.removeItem(a.to),this.board.put(Pn(a.by),a.from);break;case"bomb-explosion":this.board.removeItem(a.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}let r=this.winnerColor();if(r!==void 0)o.push({kind:"game-over",winner:r}),F(this,On)&&(this.takebackFens=[]);else if(this.isFirstTurn()&&!this.playerCanMoveMon()||!this.isFirstTurn()&&!this.playerCanMoveMana()||!this.isFirstTurn()&&!this.playerCanMoveMon()&&this.board.findMana(this.activeColor)===void 0){this.activeColor=U(this.activeColor),this.turnNumber=B(this.turnNumber,1),me(this,Ie,gp).call(this),o.push({kind:"next-turn",color:this.activeColor});for(let a of this.board.faintedMonsLocations(this.activeColor)){let t=this.board.item(a),s=t===void 0?void 0:H(t);if(s!==void 0){let u=ee(s);ai(u),V(u)||o.push({kind:"mon-awake",mon:ee(u),at:g(a)}),this.board.put(Pn(u),a)}}F(this,On)&&(this.takebackFens=[this.fen()])}else F(this,On)&&this.takebackFens.push(this.fen());let i=[...n,...o].map(Xr);return this.withVerboseTracking&&this.verboseTrackingEntities.push({fen:this.fen(),color:this.activeColor,events:i.map(Xr)}),i}nextInputsFromLocations(n,o,r,i,a){if(i!==void 0)return n.some(t=>we(t,i))&&a(i)?[An({kind:"location",location:i},o)]:[];if(r){let t=n.find(a);return t===void 0?[]:[An({kind:"location",location:t},o)]}return n.filter(a).map(t=>An({kind:"location",location:t},o))}availableMoveKinds(){let n=new Map;return n.set(0,K(Se,this.monsMovesCount)),n.set(2,0),n.set(3,0),n.set(1,0),this.turnNumber===1||(n.set(2,K(Xn,this.actionsUsedCount)),n.set(3,this.playerPotionsCount()),n.set(1,K(su,this.manaMovesCount))),n}winnerColor(){return this.whiteScore>=Ae?0:this.blackScore>=Ae?1:void 0}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(U(this.activeColor)).length>n.board.faintedMonsLocations(U(n.activeColor)).length}isFirstTurn(){return this.turnNumber===1}playerPotionsCount(){return this.activeColor===0?this.whitePotionsCount:this.blackPotionsCount}playerCanMoveMon(){return this.monsMovesCount<Se}playerCanMoveMana(){return!this.isFirstTurn()&&this.manaMovesCount<su}playerCanUseAction(){return!this.isFirstTurn()&&(this.playerPotionsCount()>0||this.actionsUsedCount<Xn)}};On=new WeakMap,Mn=new WeakMap,Ie=new WeakSet,Yr=l(function(n){this.whiteScore=n.whiteScore,this.blackScore=n.blackScore,this.activeColor=n.activeColor,this.actionsUsedCount=n.actionsUsedCount,this.manaMovesCount=n.manaMovesCount,this.monsMovesCount=n.monsMovesCount,this.whitePotionsCount=n.whitePotionsCount,this.blackPotionsCount=n.blackPotionsCount,this.turnNumber=n.turnNumber},"#copyFenFieldsFrom"),po=new WeakSet,Bt=l(function(n,o){return new In(n,o.variant(),{[kp]:o})},"#fromBoard"),Cp=l(function(n){this.board=n.board.clone(),me(this,Ie,Yr).call(this,n),this.invalidateProcessInputCache()},"#updateWith"),ci=l(function(n,o,r,i){if(this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let I=i.includeManaStartsWithPotionAction?"1":"0",D=F(this,Mn).startSuggestions.get(I);if(D!==void 0)return Mp(D);let x=me(this,Ie,Tp).call(this,i);return li(F(this,Mn).startSuggestions,I,Mp(x),nh),x}let a=n[0];if(n.length===1&&a?.kind==="takeback"){if(!this.canTakeback(this.activeColor))return{kind:"invalid-input"};this.takebackFens.pop(),this.verboseTrackingEntities.pop();let I=this.takebackFens[this.takebackFens.length-1];if(I===void 0)return{kind:"invalid-input"};let D=In.fromFen(I,!1);return D!==void 0&&me(this,Ie,Cp).call(this,D),this.invalidateProcessInputCache(),{kind:"events",events:[{kind:"takeback"}]}}if(a?.kind!=="location")return{kind:"invalid-input"};let t=a.location,s=this.board.item(t);if(s===void 0)return{kind:"invalid-input"};let u=Ne(s),c=n[1],p=me(this,Ie,wp).call(this,t,u,r,c);if(c===void 0)return p.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:p};if(c.kind!=="location")return{kind:"invalid-input"};let d=c.location,f=p.find(I=>zo(I.input,c));if(f===void 0)return{kind:"invalid-input"};let m=n[2],S=me(this,Ie,Rp).call(this,f.kind,u,t,d),h=S?.[0].map(Xr)??[],y=S?.[1].map(xt)??[];if(m===void 0)return y.length!==0?{kind:"next-input-options",nextInputs:y}:h.length!==0?{kind:"events",events:o?h:this.applyAndAddResultingEvents(h)}:{kind:"invalid-input"};let M=y.find(I=>zo(I.input,m));if(M===void 0)return{kind:"invalid-input"};let C=n[3],k=me(this,Ie,Op).call(this,M,u,t,d);h.push(...k?.[0].map(Xr)??[]);let b=k?.[1].map(xt)??[];if(C===void 0)return b.length!==0?{kind:"next-input-options",nextInputs:b}:h.length!==0?{kind:"events",events:o?h:this.applyAndAddResultingEvents(h)}:{kind:"invalid-input"};if(C.kind!=="modifier"||M.input.kind!=="location")return{kind:"invalid-input"};let P=b.find(I=>zo(I.input,C))?.actorMonItem,O=P===void 0?void 0:H(P);if(P===void 0||O===void 0)return{kind:"invalid-input"};switch(C.modifier){case 1:h.push({kind:"pickup-bomb",by:ee(O),at:g(M.input.location)});break;case 0:h.push({kind:"pickup-potion",by:Ne(P),at:g(M.input.location)});break;case 2:return{kind:"invalid-input"}}return{kind:"events",events:o?h:this.applyAndAddResultingEvents(h)}},"#processInputInternal"),Tp=l(function(n){let o=[],r=Array.from({length:Me},()=>!1);for(let a of this.board.allMonsLocations(this.activeColor)){let t=me(this,Ie,ci).call(this,[{kind:"location",location:a}],!0,!0,n);if(t.kind==="next-input-options"&&t.nextInputs.length!==0){let s=Z(a);r[s]||(r[s]=!0,o.push(a))}}if(this.playerCanMoveMana()&&(!this.playerCanMoveMon()&&!this.playerCanUseAction()||o.length===0||n.includeManaStartsWithPotionAction&&!this.playerCanMoveMon()&&this.actionsUsedCount>=Xn&&this.playerPotionsCount()>0))for(let a of this.board.allFreeRegularManaLocations(this.activeColor)){let t=me(this,Ie,ci).call(this,[{kind:"location",location:a}],!0,!0,n);if(t.kind==="next-input-options"&&t.nextInputs.length!==0){let s=Z(a);r[s]||(r[s]=!0,o.push(a))}}return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}},"#suggestedInputToStartWith"),wp=l(function(n,o,r,i){let a=`${Z(n)}|${Et(o)}|${r?1:0}|${i===void 0?"":_n(i)}`,t=F(this,Mn).secondInputOptions.get(a);if(t!==void 0)return t.map(xt);let s=i?.kind==="location"?i.location:void 0,u=this.board.findAwakeAngel(U(this.activeColor)),c=this.board.square(n),p=[];switch(o.kind){case"mon":{let d=o.mon;if(d.color!==this.activeColor||V(d))break;if(this.playerCanMoveMon()&&p.push(...this.nextInputsFromLocations(Re(n),0,r,i===void 0?void 0:i.kind==="location"?i.location:n,f=>{let m=this.board.item(f),S=this.board.square(f),h;switch(m?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":h=!1;break;case"mana":h=d.kind===1;break;case"consumable":case void 0:h=!0;break}if(!h)return!1;switch(S.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return d.kind===1&&(m===void 0||m.kind==="mana"&&m.mana.kind==="supermana");case"mon-base":return S.monKind===d.kind&&S.color===d.color}})),c.kind!=="mon-base"&&this.playerCanUseAction())switch(d.kind){case 2:case 1:break;case 4:p.push(...this.nextInputsFromLocations(Oo(n),2,r,s,f=>{var h;let m=this.board.item(f);if(m===void 0||me(h=In,po,yu).call(h,u,f))return!1;let S=H(m);return S!==void 0&&d.color!==S.color&&!V(S)}));break;case 0:p.push(...this.nextInputsFromLocations(Eo(n),3,r,s,f=>{var M;let m=this.board.item(f),S=kr(n,f),h=this.board.square(S);if(m===void 0||me(M=In,po,yu).call(M,u,f)||this.board.item(S)!==void 0||h.kind==="supermana-base"||h.kind==="mon-base")return!1;let y=H(m);return y!==void 0&&d.color!==y.color&&!V(y)}));break;case 3:p.push(...this.nextInputsFromLocations(go(n),5,r,s,f=>{let m=this.board.item(f);return m===void 0?!1:Ro(m)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===this.activeColor&&this.playerCanMoveMana()&&p.push(...this.nextInputsFromLocations(Re(n),1,r,s,d=>{let f=this.board.item(d),m=this.board.square(d);return f?.kind==="mon"?Dt(m)&&f.mon.kind===1:f!==void 0?!1:Dt(m)}));break;case"mon-with-mana":o.mon.color===this.activeColor&&this.playerCanMoveMon()&&p.push(...this.nextInputsFromLocations(Re(n),0,r,s,d=>{let f=this.board.item(d),m=this.board.square(d);switch(f?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Dt(m)?!0:m.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let d=o.mon;if(d.color!==this.activeColor)break;this.playerCanMoveMon()&&p.push(...this.nextInputsFromLocations(Re(n),0,r,s,f=>{let m=this.board.item(f),S=this.board.square(f);switch(m?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Dt(S)}})),o.consumable===1&&p.push(...this.nextInputsFromLocations(qr(n),8,r,s,f=>{let m=this.board.item(f),S=m===void 0?void 0:H(m);return S!==void 0&&d.color!==S.color&&!V(S)}));break}case"consumable":break}return li(F(this,Mn).secondInputOptions,a,p.map(xt),oh),p},"#secondInputOptions"),Rp=l(function(n,o,r,i){let a=`${n}|${Et(o)}|${Z(r)}|${Z(i)}`;if(F(this,Mn).secondStage.has(a))return F(this,Mn).secondStage.get(a);let t=me(this,Ie,Pp).call(this,n,o,r,i);return li(F(this,Mn).secondStage,a,t,rh),t},"#processSecondInput"),Pp=l(function(n,o,r,i){let a=[],t=[],s=this.board.square(i),u=this.board.item(i);switch(n){case 0:{let c=H(o);if(c===void 0)return;if(t.push({kind:"mon-move",item:Ne(o),from:g(r),to:g(i)}),u!==void 0)switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let p=Gn(o);p!==void 0&&t.push({kind:"mana-dropped",mana:xe(p),at:g(r)}),t.push({kind:"pickup-mana",mana:xe(u.mana),by:ee(c),at:g(i)});break}case"consumable":switch(u.consumable){case 1:case 0:return;case 2:Mr(o)!==void 0||Gn(o)!==void 0?t.push({kind:"pickup-potion",by:Ne(o),at:g(i)}):(a.push(An({kind:"modifier",modifier:1},7,o)),a.push(An({kind:"modifier",modifier:0},7,o)));break}break}if(s.kind==="mana-pool"){let p=Gn(o);p!==void 0&&t.push({kind:"mana-scored",mana:xe(p),at:g(i)})}break}case 1:{if(o.kind!=="mana")return;let c=o.mana;if(t.push({kind:"mana-move",mana:xe(c),from:g(r),to:g(i)}),u!==void 0){if(u.kind!=="mon")return;t.push({kind:"pickup-mana",mana:xe(c),by:ee(u.mon),at:g(i)})}switch(s.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":t.push({kind:"mana-scored",mana:xe(c),at:g(i)});break;case"mon-base":case"supermana-base":return}break}case 2:{if(o.kind!=="mon")return;if(t.push({kind:"mystic-action",mystic:ee(o.mon),from:g(r),to:g(i)}),u!==void 0){let c=H(u);if(c===void 0)return;if(t.push({kind:"mon-fainted",mon:ee(c),from:g(i),to:this.board.base(c)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?t.push({kind:"mana-dropped",mana:xe(u.mana),at:g(i)}):t.push({kind:"supermana-back-to-base",from:g(i),to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case 1:t.push({kind:"bomb-explosion",at:g(i)});break;case 0:case 2:return}}break}case 3:{if(o.kind!=="mon")return;let c=o.mon;t.push({kind:"demon-action",demon:ee(c),from:g(r),to:g(i)});let p=!1;if(u!==void 0){let d=H(u);if(d===void 0)return;if(t.push({kind:"mon-fainted",mon:ee(d),from:g(i),to:this.board.base(d)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(p=!0,t.push({kind:"mana-dropped",mana:xe(u.mana),at:g(i)})):t.push({kind:"supermana-back-to-base",from:g(i),to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case 1:t.push({kind:"bomb-explosion",at:g(i)}),t.push({kind:"mon-fainted",mon:ee(c),from:g(i),to:this.board.base(c)});break;case 0:case 2:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(p=!0),p)for(let d of Re(i)){let f=this.board.item(d),m=this.board.square(d);f!==void 0&&f.kind!=="consumable"||(Dt(m)?a.push(An({kind:"location",location:d},4)):m.kind==="mon-base"&&m.monKind===c.kind&&m.color===c.color&&a.push(An({kind:"location",location:d},4)))}break}case 5:{if(u===void 0)return;let c=H(u),p=Gn(u);a.push(...this.nextInputsFromLocations(Re(i),6,!1,void 0,d=>{let f=this.board.item(d),m=this.board.square(d),S;switch(f?.kind){case"mon":switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":S=!1;break;case"mana":S=f.mon.kind===1&&!V(f.mon);break;case"consumable":S=u.consumable===2;break}break;case"mana":S=c?.kind===1&&!V(c);break;case"mon-with-mana":case"mon-with-consumable":S=u.kind==="consumable"&&u.consumable===2;break;case"consumable":S=f.consumable===2&&(u.kind==="mon"||u.kind==="mon-with-mana"||u.kind==="mon-with-consumable");break;case void 0:S=!0;break}if(!S)return!1;switch(m.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let h=f?.kind==="mana"&&f.mana.kind==="supermana";return p?.kind==="supermana"||p===void 0&&c?.kind===1&&(f===void 0||h)||c?.kind===1&&h}case"mon-base":return c?.kind===m.monKind&&c.color===m.color&&p===void 0&&Mr(u)===void 0}}));break}case 8:{let c=H(o);if(c===void 0)return;if(t.push({kind:"bomb-attack",by:ee(c),from:g(r),to:g(i)}),u!==void 0){let p=H(u);if(p===void 0)return;if(t.push({kind:"mon-fainted",mon:ee(p),from:g(i),to:this.board.base(p)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?t.push({kind:"mana-dropped",mana:xe(u.mana),at:g(i)}):t.push({kind:"supermana-back-to-base",from:g(i),to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case 1:t.push({kind:"bomb-explosion",at:g(i)});break;case 0:case 2:return}}break}case 4:case 6:case 7:break}return[t,a]},"#processSecondInputUncached"),Op=l(function(n,o,r,i){let a=`${_n(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":Et(n.actorMonItem)}|${Et(o)}|${Z(r)}|${Z(i)}`;if(F(this,Mn).thirdStage.has(a))return F(this,Mn).thirdStage.get(a);let t=me(this,Ie,Ep).call(this,n,o,r,i);return li(F(this,Mn).thirdStage,a,t,th),t},"#processThirdInput"),Ep=l(function(n,o,r,i){let a=this.board.item(i),t=[],s=[];switch(n.kind){case 6:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,c=this.board.item(u),p=this.board.square(u);if(s.push({kind:"spirit-target-move",item:Ne(a),from:g(i),to:g(u),by:g(r)}),c!==void 0)switch(a.kind){case"mon":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:xe(c.mana),by:ee(a.mon),at:g(u)});break;case"consumable":switch(c.consumable){case 0:case 1:return;case 2:t.push(An({kind:"modifier",modifier:1},7,a)),t.push(An({kind:"modifier",modifier:0},7,a));break}break}break;case"mana":if(c.kind!=="mon")return;s.push({kind:"pickup-mana",mana:xe(a.mana),by:ee(c.mon),at:g(u)});break;case"mon-with-mana":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"mana-dropped",mana:xe(a.mana),at:g(i)}),s.push({kind:"pickup-mana",mana:xe(c.mana),by:ee(a.mon),at:g(u)});break;case"consumable":switch(c.consumable){case 0:case 1:return;case 2:s.push({kind:"pickup-potion",by:Ne(a),at:g(u)});break}break}break;case"mon-with-consumable":if(c.kind!=="consumable"||c.consumable!==2)return;s.push({kind:"pickup-potion",by:Ne(a),at:g(u)});break;case"consumable":switch(c.kind){case"mana":case"consumable":return;case"mon":t.push(An({kind:"modifier",modifier:1},7,c)),t.push(An({kind:"modifier",modifier:0},7,c));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case 0:case 1:return;case 2:s.push({kind:"pickup-potion",by:Ne(c),at:g(u)});break}break}break}if(p.kind==="mana-pool"){let d=Gn(a);d!==void 0&&s.push({kind:"mana-scored",mana:xe(d),at:g(u)})}break}case 4:{if(n.input.kind!=="location")return;let u=H(o);if(u===void 0)return;let c=n.input.location;s.push({kind:"demon-additional-step",demon:ee(u),from:g(i),to:g(c)});let p=this.board.item(c);if(p?.kind==="consumable")switch(p.consumable){case 0:case 1:return;case 2:t.push(An({kind:"modifier",modifier:1},7,o)),t.push(An({kind:"modifier",modifier:0},7,o));break}break}case 7:{if(n.input.kind!=="modifier")return;let u=H(o);if(u===void 0)return;switch(n.input.modifier){case 1:s.push({kind:"pickup-bomb",by:ee(u),at:g(i)});break;case 0:s.push({kind:"pickup-potion",by:Ne(o),at:g(i)});break;case 2:return}break}case 0:case 1:case 2:case 3:case 5:case 8:return}return[s,t]},"#processThirdInputUncached"),gp=l(function(){this.actionsUsedCount=0,this.manaMovesCount=0,this.monsMovesCount=0},"#resetTurnState"),yu=l(function(n,o){return n!==void 0&&J(n,o)===1},"#isLocationGuardedByAngelLocation"),fe(In,po),l(In,"MonsGame");var ln=In;var vp="invalid enum value passed";function Qn(e){return e==null}l(Qn,"isNullish");function Cn(e,n){let o=ce(e);if(o<0||o>n)throw new Error(vp);return o}l(Cn,"coerceEnum");function Yo(e,n){if(Qn(e))return;let o=ce(e);if(o!==n+1){if(o<0||o>n)throw new Error(vp);return o}}l(Yo,"coerceOptionalEnum");function Wt(e,n){if(!(e instanceof n))throw new Error(`expected instance of ${n.name}`)}l(Wt,"assertModelInstance");var Ft,_t,Gt,Qr,pi,hu=class hu{constructor(){fe(this,Qr);fe(this,Ft,Symbol());fe(this,_t,Symbol());fe(this,Gt,new WeakMap)}get(n){return me(this,Qr,pi).call(this,n)?.value}getOrInsert(n,o){let r=me(this,Qr,pi).call(this,n);if(r!==void 0)return r.value;let i=o();return this.set(n,i),i}set(n,o){let r=me(this,Qr,pi).call(this,n);if(r!==void 0){r.value=o;return}let i={value:o};if(!Object.isExtensible(n)){F(this,Gt).set(n,i);return}let a=F(this,_t),t=l(s=>s===a?i:void 0,"access");Object.defineProperty(n,F(this,Ft),{configurable:!1,enumerable:!1,value:t,writable:!1})}};Ft=new WeakMap,_t=new WeakMap,Gt=new WeakMap,Qr=new WeakSet,pi=l(function(n){let o=Object.getOwnPropertyDescriptor(n,F(this,Ft));if(o!==void 0){let r=o.value;return r(F(this,_t))}return F(this,Gt).get(n)},"#cell"),l(hu,"ModelStateMap");var Tn=hu;var bu=(i=>(i[i.InvalidInput=0]="InvalidInput",i[i.LocationsToStartFrom=1]="LocationsToStartFrom",i[i.NextInputOptions=2]="NextInputOptions",i[i.Events=3]="Events",i))(bu||{}),Mu=(t=>(t[t.Regular=0]="Regular",t[t.ConsumableBase=1]="ConsumableBase",t[t.SupermanaBase=2]="SupermanaBase",t[t.ManaBase=3]="ManaBase",t[t.ManaPool=4]="ManaPool",t[t.MonBase=5]="MonBase",t))(Mu||{}),ku=(a=>(a[a.Mon=0]="Mon",a[a.Mana=1]="Mana",a[a.MonWithMana=2]="MonWithMana",a[a.MonWithConsumable=3]="MonWithConsumable",a[a.Consumable=4]="Consumable",a))(ku||{}),Cu=(o=>(o[o.Regular=0]="Regular",o[o.Supermana=1]="Supermana",o))(Cu||{}),Tu=(b=>(b[b.MonMove=0]="MonMove",b[b.ManaMove=1]="ManaMove",b[b.ManaScored=2]="ManaScored",b[b.MysticAction=3]="MysticAction",b[b.DemonAction=4]="DemonAction",b[b.DemonAdditionalStep=5]="DemonAdditionalStep",b[b.SpiritTargetMove=6]="SpiritTargetMove",b[b.PickupBomb=7]="PickupBomb",b[b.PickupPotion=8]="PickupPotion",b[b.PickupMana=9]="PickupMana",b[b.MonFainted=10]="MonFainted",b[b.ManaDropped=11]="ManaDropped",b[b.SupermanaBackToBase=12]="SupermanaBackToBase",b[b.BombAttack=13]="BombAttack",b[b.MonAwake=14]="MonAwake",b[b.BombExplosion=15]="BombExplosion",b[b.NextTurn=16]="NextTurn",b[b.GameOver=17]="GameOver",b[b.Takeback=18]="Takeback",b[b.UsePotion=19]="UsePotion",b))(Tu||{});Object.freeze(bu);Object.freeze(Mu);Object.freeze(ku);Object.freeze(Cu);Object.freeze(Tu);var Ap=new Tn;function di(e){return Ap.getOrInsert(e,()=>({i:0,j:0}))}l(di,"locationState");var Iu=class Iu{constructor(n,o){Ap.set(this,{i:ce(n),j:ce(o)})}free(){}get i(){return di(this).i}set i(n){di(this).i=ce(n)}get j(){return di(this).j}set j(n){di(this).j=ce(n)}};l(Iu,"Location");var Ht=Iu;function et(e){return new Ht(e.i,e.j)}l(et,"locationModelFrom");function Jo(e){return Wt(e,Ht),We(e.i,e.j)}l(Jo,"locationModelToEngine");var yi=new Tn;function fo(e){return yi.getOrInsert(e,()=>({kind:0,color:0,cooldown:0}))}l(fo,"monState");var Ti=class Ti{constructor(){yi.set(this,{kind:0,color:0,cooldown:0})}free(){}get kind(){return fo(this).kind}set kind(n){fo(this).kind=Cn(n,4)}get color(){return fo(this).color}set color(n){fo(this).color=Cn(n,1)}get cooldown(){return fo(this).cooldown}set cooldown(n){fo(this).cooldown=ce(n)}is_fainted(){return V(fo(this))}decrease_cooldown(){ai(fo(this))}static new(n,o,r){let i=Cn(n,4),a=Cn(o,1),t=new Ti;return yi.set(t,{kind:i,color:a,cooldown:ce(r)}),t}faint(){ti(fo(this))}};l(Ti,"Mon");var Ut=Ti;function Ip(e){let n=new Ut;return yi.set(n,ee(e)),n}l(Ip,"monModelFrom");function Np(e){return Wt(e,Ut),ee(fo(e))}l(Np,"monModelToEngine");var wu=new Tn;function Vt(e){return wu.getOrInsert(e,()=>({kind:0,color:0}))}l(Vt,"manaModelState");var Nu=class Nu{constructor(){wu.set(this,{kind:0,color:0})}free(){}get kind(){return Vt(this).kind}set kind(n){Vt(this).kind=Cn(n,1)}get color(){return Vt(this).color}set color(n){Vt(this).color=Cn(n,1)}};l(Nu,"ManaModel");var jt=Nu;function Ru(e){return{kind:e.kind,color:e.color}}l(Ru,"cloneManaModelState");function Jr(e){return e.kind==="regular"?{kind:0,color:e.color}:{kind:1,color:0}}l(Jr,"manaModelStateFromEngine");function Dp(e){let n=new jt;return wu.set(n,Ru(e)),n}l(Dp,"manaModelFromState");function xp(e){return Wt(e,jt),Ru(Vt(e))}l(xp,"manaModelStateFromModel");var Pu=new Tn;function vo(e){return Pu.getOrInsert(e,()=>({kind:0}))}l(vo,"itemModelState");var Du=class Du{constructor(){Pu.set(this,{kind:0})}free(){}get kind(){return vo(this).kind}set kind(n){vo(this).kind=Cn(n,4)}get mon(){let n=vo(this).mon;return n===void 0?void 0:Ip(n)}set mon(n){let o=vo(this);Qn(n)?delete o.mon:o.mon=Np(n)}get mana(){let n=vo(this).mana;return n===void 0?void 0:Dp(n)}set mana(n){let o=vo(this);Qn(n)?delete o.mana:o.mana=xp(n)}get consumable(){return vo(this).consumable}set consumable(n){let o=vo(this),r=Yo(n,2);r===void 0?delete o.consumable:o.consumable=r}};l(Du,"ItemModel");var Kt=Du;function Bp(e){let n={kind:e.kind};return e.mon!==void 0&&(n.mon=ee(e.mon)),e.mana!==void 0&&(n.mana=Ru(e.mana)),e.consumable!==void 0&&(n.consumable=e.consumable),n}l(Bp,"cloneItemModelState");function Lt(e){switch(e.kind){case"mon":return{kind:0,mon:ee(e.mon)};case"mana":return{kind:1,mana:Jr(e.mana)};case"mon-with-mana":return{kind:2,mon:ee(e.mon),mana:Jr(e.mana)};case"mon-with-consumable":return{kind:3,mon:ee(e.mon),consumable:e.consumable};case"consumable":return{kind:4,consumable:e.consumable}}}l(Lt,"itemModelStateFromEngine");function Ou(e){let n=new Kt;return Pu.set(n,Bp(e)),n}l(Ou,"itemModelFromState");function Wp(e){return Wt(e,Kt),Bp(vo(e))}l(Wp,"itemModelStateFromModel");function Fp(e){return Ou(Lt(e))}l(Fp,"itemModelFrom");var Eu=new Tn;function Qo(e){return Eu.getOrInsert(e,()=>({kind:0}))}l(Qo,"nextInputModelState");var xu=class xu{constructor(){Eu.set(this,{kind:0})}free(){}get location(){let n=Qo(this).location;return n===void 0?void 0:et(n)}set location(n){let o=Qo(this);Qn(n)?delete o.location:o.location=Jo(n)}get modifier(){return Qo(this).modifier}set modifier(n){let o=Qo(this),r=Yo(n,2);r===void 0?delete o.modifier:o.modifier=r}get kind(){return Qo(this).kind}set kind(n){Qo(this).kind=Cn(n,8)}get actor_mon_item(){let n=Qo(this).actorMonItem;return n===void 0?void 0:Ou(n)}set actor_mon_item(n){let o=Qo(this);Qn(n)?delete o.actorMonItem:o.actorMonItem=Wp(n)}};l(xu,"NextInputModel");var hi=xu;function ih(e){let n=new hi,o={kind:e.kind};return e.input.kind==="location"?o.location=g(e.input.location):e.input.kind==="modifier"&&(o.modifier=e.input.modifier),e.actorMonItem!==void 0&&(o.actorMonItem=Lt(e.actorMonItem)),Eu.set(n,o),n}l(ih,"nextInputModelFrom");var gu=new Tn;function En(e){return gu.getOrInsert(e,()=>({kind:0}))}l(En,"eventModelState");var Bu=class Bu{constructor(){gu.set(this,{kind:0})}free(){}get kind(){return En(this).kind}set kind(n){En(this).kind=Cn(n,19)}get item(){let n=En(this).item;return n===void 0?void 0:Ou(n)}set item(n){let o=En(this);Qn(n)?delete o.item:o.item=Wp(n)}get mon(){let n=En(this).mon;return n===void 0?void 0:Ip(n)}set mon(n){let o=En(this);Qn(n)?delete o.mon:o.mon=Np(n)}get mana(){let n=En(this).mana;return n===void 0?void 0:Dp(n)}set mana(n){let o=En(this);Qn(n)?delete o.mana:o.mana=xp(n)}get loc1(){let n=En(this).loc1;return n===void 0?void 0:et(n)}set loc1(n){let o=En(this);Qn(n)?delete o.loc1:o.loc1=Jo(n)}get loc2(){let n=En(this).loc2;return n===void 0?void 0:et(n)}set loc2(n){let o=En(this);Qn(n)?delete o.loc2:o.loc2=Jo(n)}get color(){return En(this).color}set color(n){let o=En(this),r=Yo(n,1);r===void 0?delete o.color:o.color=r}};l(Bu,"EventModel");var bi=Bu;function sh(e){switch(e.kind){case"mon-move":return{kind:0,item:Lt(e.item),loc1:g(e.from),loc2:g(e.to)};case"mana-move":return{kind:1,mana:Jr(e.mana),loc1:g(e.from),loc2:g(e.to)};case"mana-scored":return{kind:2,mana:Jr(e.mana),loc1:g(e.at)};case"mystic-action":return{kind:3,mon:ee(e.mystic),loc1:g(e.from),loc2:g(e.to)};case"demon-action":return{kind:4,mon:ee(e.demon),loc1:g(e.from),loc2:g(e.to)};case"demon-additional-step":return{kind:5,mon:ee(e.demon),loc1:g(e.from),loc2:g(e.to)};case"spirit-target-move":return{kind:6,item:Lt(e.item),loc1:g(e.from),loc2:g(e.to)};case"pickup-bomb":return{kind:7,mon:ee(e.by),loc1:g(e.at)};case"pickup-potion":return{kind:8,item:Lt(e.by),loc1:g(e.at)};case"pickup-mana":return{kind:9,mon:ee(e.by),mana:Jr(e.mana),loc1:g(e.at)};case"mon-fainted":return{kind:10,mon:ee(e.mon),loc1:g(e.from),loc2:g(e.to)};case"mana-dropped":return{kind:11,mana:Jr(e.mana),loc1:g(e.at)};case"supermana-back-to-base":return{kind:12,loc1:g(e.from),loc2:g(e.to)};case"bomb-attack":return{kind:13,mon:ee(e.by),loc1:g(e.from),loc2:g(e.to)};case"mon-awake":return{kind:14,mon:ee(e.mon),loc1:g(e.at)};case"bomb-explosion":return{kind:15,loc1:g(e.at)};case"next-turn":return{kind:16,color:e.color};case"game-over":return{kind:17,color:e.winner};case"takeback":return{kind:18};case"use-potion":return{kind:19,loc1:g(e.from),loc2:g(e.to)}}}l(sh,"eventStateFrom");function _p(e){let n=new bi;return gu.set(n,sh(e)),n}l(_p,"eventModelFrom");var Zo=new Tn;function Zr(e){return Zo.getOrInsert(e,()=>({kind:0}))}l(Zr,"squareModelState");var Wu=class Wu{constructor(){Zo.set(this,{kind:0})}free(){}get kind(){return Zr(this).kind}set kind(n){Zr(this).kind=Cn(n,5)}get color(){return Zr(this).color}set color(n){let o=Zr(this),r=Yo(n,1);r===void 0?delete o.color:o.color=r}get mon_kind(){return Zr(this).monKind}set mon_kind(n){let o=Zr(this),r=Yo(n,4);r===void 0?delete o.monKind:o.monKind=r}};l(Wu,"SquareModel");var Mi=Wu;function Gp(e){let n=new Mi;switch(e.kind){case"regular":Zo.set(n,{kind:0});break;case"consumable-base":Zo.set(n,{kind:1});break;case"supermana-base":Zo.set(n,{kind:2});break;case"mana-base":Zo.set(n,{kind:3,color:e.color});break;case"mana-pool":Zo.set(n,{kind:4,color:e.color});break;case"mon-base":Zo.set(n,{kind:5,color:e.color,monKind:e.monKind});break}return n}l(Gp,"squareModelFrom");var vu=new Tn;function fi(e){return vu.get(e)??{locations:[],nextInputs:[],events:[],inputFen:""}}l(fi,"outputModelState");var Fu=class Fu{constructor(){vu.set(this,{locations:[],nextInputs:[],events:[],inputFen:""}),Si.set(this,0)}free(){}next_inputs(){return fi(this).nextInputs.map(ih)}events(){return fi(this).events.map(_p)}input_fen(){return fi(this).inputFen}locations(){return fi(this).locations.map(et)}get kind(){return Si.get(this)??0}set kind(n){Si.set(this,Cn(n,3))}};l(Fu,"OutputModel");var ki=Fu,Si=new Tn;function nt(e,n){let o=new ki,r={locations:e.kind==="locations-to-start-from"?e.locations.map(g):[],nextInputs:e.kind==="next-input-options"?e.nextInputs.map(a=>({...a,input:a.input.kind==="location"?{kind:"location",location:g(a.input.location)}:{...a.input},...a.actorMonItem===void 0?{}:{actorMonItem:Ne(a.actorMonItem)}})):[],events:e.kind==="events"?[...e.events]:[],inputFen:n};vu.set(o,r);let i=(()=>{switch(e.kind){case"invalid-input":return 0;case"locations-to-start-from":return 1;case"next-input-options":return 2;case"events":return 3}})();return Si.set(o,i),o}l(nt,"outputModelFrom");var Au=new Tn;function mi(e){return Au.get(e)??{fen:"",color:0,events:[],eventsFen:""}}l(mi,"verboseTrackingState");var _u=class _u{constructor(){Au.set(this,{fen:"",color:0,events:[],eventsFen:""})}free(){}events_fen(){return mi(this).eventsFen}fen(){return mi(this).fen}color(){return mi(this).color}events(){return mi(this).events.map(_p)}};l(_u,"VerboseTrackingEntityModel");var Ci=_u;function Vp(e,n,o,r){let i=new Ci;return Au.set(i,{fen:e,color:n,events:[...o],eventsFen:r}),i}l(Vp,"verboseTrackingEntityModelFrom");var uh=4;function lh(e){if(e==="")return;let n=e.split(";");if(n.length>uh)return;let o=[];for(let r of n){let i=Su(r);if(i===void 0||i.kind==="takeback"&&r!=="z")return;o.push(i)}return o}l(lh,"parseReplayMove");function wi(e,n,o,r){let i=0,a=0;for(;i<n.length||a<o.length;){let t=e.activeColor===0,c=(t?n:o)[t?i:a];if(c===void 0)return{status:"missing-move",whiteMovesProcessed:i,blackMovesProcessed:a};let p=lh(c);if(p===void 0)return{status:"invalid-move",whiteMovesProcessed:i,blackMovesProcessed:a};let d=e.processInput(p,!1,!1);if(d.kind!=="events"||d.events.length===0)return{status:"invalid-move",whiteMovesProcessed:i,blackMovesProcessed:a};t?i+=1:a+=1;let f={whiteMovesProcessed:i,blackMovesProcessed:a};if(r?.(e,f)===!1)return{status:"stopped",...f}}return{status:"complete",whiteMovesProcessed:i,blackMovesProcessed:a}}l(wi,"replayInterleavedMoves");var Gu;function Up(e){Gu=e}l(Up,"setMonsGameAutomoveDelegate");var jp=new Tn,Kp=Symbol();function Fe(e){return jp.getOrInsert(e,()=>new ln(!0,0))}l(Fe,"gameState");function qt(e){return new Ri({[Kp]:e})}l(qt,"modelFromGame");var Vu=class Vu{constructor(n=void 0){jp.set(this,n?.[Kp]??new ln(!0,0))}free(){}black_score(){return Fe(this).blackScore}remove_item(n){let o=Fe(this);o.board.removeItem(Jo(n)),o.invalidateProcessInputCache()}turn_number(){return Fe(this).turnNumber}white_score(){return Fe(this).whiteScore}active_color(){return Fe(this).activeColor}can_takeback(n){return Fe(this).canTakeback(ch(n))}verify_moves(n,o){let r=Fe(this),i=Ze(n),a=Ze(o),t=i===""?[]:i.split("-"),s=a===""?[]:a.split("-"),u=new ln(r.withVerboseTracking,r.variant());return wi(u,t,s).status!=="complete"||u.fen()!==r.fen()?!1:(r.takebackFens=[...u.takebackFens],r.verboseTrackingEntities=r.withVerboseTracking?[...u.verboseTrackingEntities]:[],r.isMovesVerified=!0,!0)}winner_color(){return Fe(this).winnerColor()}is_later_than(n){let o=ln.fromFen(Ze(n),!1);return o===void 0?!0:Fe(this).isLaterThan(o)}process_input(n,o){let r=n.map(s=>({kind:"location",location:Jo(s)})),i=Yo(o,2);i!==void 0&&r.push({kind:"modifier",modifier:i});let a=Tr(r),t=Fe(this).processInput(r,!1,!1);return nt(t,a)}takeback_fens(){return[...Fe(this).takebackFens]}clearTracking(){Fe(this).clearTracking()}smartAutomove(n){let o=ph(n),i=Hp().smartAutomove(Fe(this).cloneForSimulation(),o);return nt(i.output,i.inputFen)}is_moves_verified(){return Fe(this).isMovesVerified}process_input_fen(n){let o=Ze(n),r=Fe(this).processInput(ui(o),!1,!1);return nt(r,o)}without_last_turn(n){let o=Fe(this);if(o.verboseTrackingEntities.length<=1)return;let r=o.verboseTrackingEntities.slice(0,-1),i=r[r.length-1],a=ln.fromFen(i?.fen??o.fen(),!0);if(a!==void 0)return a.takebackFens=n.map(Ze),a.verboseTrackingEntities=[...r],a.withVerboseTracking=o.withVerboseTracking,a.isMovesVerified=o.isMovesVerified,qt(a)}static newForSimulation(n){let o=new ln(!1,Lp(n));return o.setTakebackHistoryTracking(!1),qt(o)}available_move_kinds(){let n=Fe(this).availableMoveKinds();return new Int32Array([n.get(0)??0,n.get(1)??0,n.get(2)??0,n.get(3)??0])}setVerboseTracking(n){Fe(this).setVerboseTracking(ce(Number(n))!==0)}locations_with_content(){let n=Fe(this),o=new Set;for(let[r]of n.board.occupied())o.add(r.i*11+r.j);for(let r of n.board.allMonsBases())o.add(r.i*11+r.j);return[...o].sort((r,i)=>r-i).map(r=>et(co(r)))}static fromFenForSimulation(n){let o=ln.fromFen(Ze(n),!1);if(o!==void 0)return o.setTakebackHistoryTracking(!1),qt(o)}verbose_tracking_entities(){return Fe(this).verboseTrackingEntities.map(n=>Vp(n.fen,n.color,n.events,hp(n.events)))}inactive_player_items_counters(){let n=Fe(this),o=n.activeColor===0?n.blackPotionsCount:n.whitePotionsCount;return new Int32Array([0,0,0,o])}fen(){return Fe(this).fen()}static new(n){return qt(new ln(!0,Lp(n)))}item(n){let o=Fe(this).board.item(Jo(n));return o===void 0?void 0:Fp(o)}square(n){return Gp(Fe(this).board.square(Jo(n)))}automove(){let n=Hp().automove(Fe(this));return nt(n.output,n.inputFen)}static from_fen(n){let o=ln.fromFen(Ze(n),!0);return o===void 0?void 0:qt(o)}takeback(){let n=[{kind:"takeback"}],o=Fe(this).processInput(n,!1,!1);return nt(o,Tr(n))}};l(Vu,"MonsGameModel");var Ri=Vu;function Lp(e){return Cn(e,11)}l(Lp,"toGameVariant");function ch(e){return Cn(e,1)}l(ch,"toColor");function ph(e){let n=dh(cp(e));if(n==="fast"||n==="normal"||n==="pro")return n;throw"invalid smart automove mode; expected 'fast', 'normal', or 'pro'"}l(ph,"normalizeSmartAutomovePreference");function dh(e){return e.replace(/[A-Z]/gu,n=>String.fromCharCode(n.charCodeAt(0)+32))}l(dh,"asciiLowercase");function Hp(){if(Gu===void 0)throw new Error("automove runtime is not configured");return Gu}l(Hp,"requireAutomoveDelegate");var Ke,Hu=!1;function zt(){return globalThis.performance.now()}l(zt,"now");function Uu(e){return Math.max(e,0)}l(Uu,"nonnegativeDuration");function fh(e){Ke===void 0?Ke={endMs:zt()+Uu(e),timedOut:!1,nesting:1}:Ke.nesting=Math.min(Number.MAX_SAFE_INTEGER,Ke.nesting+1)}l(fh,"enterDeadline");function mh(){Ke!==void 0&&(Ke.nesting<=1?(Hu=Ke.timedOut,Ke=void 0):Ke.nesting-=1)}l(mh,"exitDeadline");function Pi(e,n){fh(e);try{return n()}finally{mh()}}l(Pi,"withDeadlineIfAbsent");function Sh(e,n){let o;return Pi(e,()=>{if(T())return;let r=n();T()||(o=r)}),o}l(Sh,"runWithStandaloneSubdeadline");function Lu(e){let n=zt(),o=Ke===void 0||Ke.timedOut||n>=Ke.endMs;return n>=e.endMs&&(e.timedOut=!0),Ke=e,o}l(Lu,"restoreOuterDeadline");function yh(e,n,o){if(T())return;let r={...e};if(e.endMs=Math.min(e.endMs,zt()+Uu(n)),T()){Lu(r);return}let i=!1;try{let a=o(),t=Lu(r);return i=!0,t?void 0:a}finally{i||Lu(r)}}l(yh,"runWithNestedSubdeadline");function qp(e,n){let o=Ke;return o===void 0?Sh(e,n):yh(o,e,n)}l(qp,"withCooperativeSubdeadline");function T(){return Ke===void 0?!1:Ke.timedOut?!0:zt()>=Ke.endMs?(Ke.timedOut=!0,!0):!1}l(T,"checkpoint");function De(e){return Ke===void 0?!1:Ke.timedOut?!0:zt()+Uu(e)>=Ke.endMs?(Ke.timedOut=!0,!0):!1}l(De,"checkpointWithReserve");function Y(){return Ke?.timedOut??!1}l(Y,"cancelled");function ju(){if(Ke!==void 0)return!1;let e=Hu;return Hu=!1,e}l(ju,"takePreviousTimeout");function ye(){return!T()}l(ye,"cacheWriteAllowed");var zp=Object.freeze({hi:0,lo:0});function Oe(e,n){return{hi:e>>>0,lo:n>>>0}}l(Oe,"hash64");function Ln(e){return Oe(0,e)}l(Ln,"hash64FromU32");function Zn(e){let n=e|0;return e===n?Oe(n<0?4294967295:0,n):hh(BigInt(e))}l(Zn,"hash64FromIntegerNumber");function $u(e,n){let o=e.lo+n.lo>>>0,r=o<e.lo>>>0?1:0;return Oe(e.hi+n.hi+r,o)}l($u,"hash64Add");function Hn(e,n){let o=e.lo&65535,r=e.lo>>>16,i=n.lo&65535,a=n.lo>>>16,t=o*i,s=(t>>>16)+r*i+o*a,u=(t&65535|(s&65535)<<16)>>>0,c=r*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return Oe(c,u)}l(Hn,"hash64Mul");function dn(e,n){return Oe(e.hi^n.hi,e.lo^n.lo)}l(dn,"hash64Xor");function Oi(e,n){let o=n>>>0&63;if(o===0)return Oe(e.hi,e.lo);if(o===32)return Oe(e.lo,e.hi);if(o<32)return Oe(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let r=o-32;return Oe(e.lo<<r|e.hi>>>32-r,e.hi<<r|e.lo>>>32-r)}l(Oi,"hash64RotateLeft");function wr(e,n){let o=n>>>0&63;return o===0?Oe(e.hi,e.lo):o===32?Oe(0,e.hi):o<32?Oe(e.hi>>>o,e.lo>>>o|e.hi<<32-o):Oe(0,e.hi>>>o-32)}l(wr,"hash64ShiftRight");function Xu(e,n){return e.hi===n.hi&&e.lo===n.lo}l(Xu,"hash64Equals");function $p(e){return e.hi===0&&e.lo===0}l($p,"hash64IsZero");function Xp(e,n){return e.hi!==n.hi?e.hi<n.hi?-1:1:e.lo!==n.lo?e.lo<n.lo?-1:1:0}l(Xp,"hash64CompareUnsigned");function Ku(e){let n=(e.hi^(e.lo<<16|e.lo>>>16))>>>0;return n=Math.imul(n^n>>>16,2146121005)>>>0,n=Math.imul(n^n>>>15,2221713035)>>>0,(n^n>>>16)>>>0}l(Ku,"hash64Bucket");function hh(e){let n=BigInt.asUintN(64,e);return Oe(Number(n>>32n&0xffffffffn),Number(n&0xffffffffn))}l(hh,"hash64FromBigInt");function bh(e,n,o,r,i){return{primaryHi:e.hi,primaryLo:e.lo,tag:o,hasSecondary:r!==void 0,secondaryHi:r?.hi??0,secondaryLo:r?.lo??0,qualifier:i,value:n}}l(bh,"createEntry");function Mh(e,n){return e===n||e!==e&&n!==n}l(Mh,"sameValueZero");function qu(e,n,o,r,i){return e.primaryHi===n.hi&&e.primaryLo===n.lo&&(e.tag===o||e.tag!==e.tag&&o!==o)&&e.hasSecondary===(r!==void 0)&&(r===void 0||e.secondaryHi===r.hi&&e.secondaryLo===r.lo)&&Mh(e.qualifier,i)}l(qu,"entryMatches");function kh(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}l(kh,"validateCapacity");var Ao,ot,er,$t,zu,Yu=class Yu{constructor(n){fe(this,$t);fe(this,Ao,new Map);fe(this,ot);fe(this,er,0);Te(this,ot,kh(n))}get capacity(){return F(this,ot)}get size(){return F(this,er)}clear(){F(this,Ao).clear(),Te(this,er,0)}has(n,o=0,r,i){return me(this,$t,zu).call(this,n,o,r,i)!==void 0}get(n,o=0,r,i){return me(this,$t,zu).call(this,n,o,r,i)?.value}set(n,o,r=0,i,a){let t=Ku(n),s=F(this,Ao).get(t),u=s?.find(c=>qu(c,n,r,i,a));return u!==void 0?(u.value=o,this):(F(this,er)>=F(this,ot)&&(this.clear(),s=void 0),s===void 0&&(s=[],F(this,Ao).set(t,s)),s.push(bh(n,o,r,i,a)),Te(this,er,F(this,er)+1),this)}delete(n,o=0,r,i){let a=Ku(n),t=F(this,Ao).get(a);if(t===void 0)return!1;let s=t.findIndex(u=>qu(u,n,o,r,i));return s<0?!1:(t.splice(s,1),Te(this,er,F(this,er)-1),t.length===0&&F(this,Ao).delete(a),!0)}};Ao=new WeakMap,ot=new WeakMap,er=new WeakMap,$t=new WeakSet,zu=l(function(n,o,r,i){return F(this,Ao).get(Ku(n))?.find(a=>qu(a,n,o,r,i))},"#find"),l(Yu,"Hash64Table");var ke=Yu,mo,Qu=class Qu{constructor(n){fe(this,mo);Te(this,mo,new ke(n))}get capacity(){return F(this,mo).capacity}get size(){return F(this,mo).size}clear(){F(this,mo).clear()}has(n,o=0,r,i){return F(this,mo).has(n,o,r,i)}add(n,o=0,r,i){return F(this,mo).set(n,!0,o,r,i),this}delete(n,o=0,r,i){return F(this,mo).delete(n,o,r,i)}};mo=new WeakMap,l(Qu,"Hash64Set");var Vn=Qu;var il=512,Ch=8192,Th=8192,wh=8192,Rh=8192,Ph=8192,Oh=8192,Ni=4096,Eh=4096,rd=2048,Yp=6,td=Oe(1779033703,4089235721),ad=Oe(2654435761,2246822535),id=Oe(2496678331,321982955),gh=Oe(2654435769,2135587861),sd=Oe(3210233709,484763065),ud=Oe(2496678331,321982955),tr=1,ar=2,Er=4,gr=8,yo=16,ld=tr|ar|Er|gr|yo;function He(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}l(He,"defaultSpiritSummary");function Io(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:He()}}l(Io,"defaultColorSummary");function Rr(){return{canAttackOpponentDrainer:!1,safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:0,scorePathBestSteps:void 0}}l(Rr,"defaultTurnSummary");function No(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}l(No,"defaultTurnTacticalProjection");function Pr(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:No(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}l(Pr,"defaultOpportunityContext");var dl=class dl{constructor(n=Io(),o=Io()){Ce(this,"white");Ce(this,"black");this.white=n,this.black=o}colorSummary(n){return n===0?this.white:this.black}};l(dl,"ExactStrategicAnalysis");var rr=dl,nr,or,tt,fl=class fl{constructor(){fe(this,nr);fe(this,or);fe(this,tt);Te(this,nr,new Uint8Array(Me)),Te(this,or,new Uint8Array(Me)),Te(this,tt,new Uint8Array(Me))}canAttackTarget(n){let o=Z(n);return(F(this,or)[o]??0)>0||(F(this,tt)[o]??0)===0&&(F(this,nr)[o]??0)>0}immediateThreats(n){let o=Z(n);return[F(this,nr)[o]??0,F(this,or)[o]??0]}markGuarded(n,o){F(this,tt)[Z(n)]=o?1:0}addActionThreat(n){let o=Z(n);F(this,nr)[o]=Math.min(255,(F(this,nr)[o]??0)+1)}addBombThreat(n){let o=Z(n);F(this,or)[o]=Math.min(255,(F(this,or)[o]??0)+1)}};nr=new WeakMap,or=new WeakMap,tt=new WeakMap,l(fl,"AttackReachSummary");var Or=fl;function Wi(e){return e===0?1:2}l(Wi,"exactHashColorBits");function vh(e){return e+1}l(vh,"exactHashMonKindBits");function Di(e){return e.kind==="supermana"?2:1|Wi(e.color)<<4}l(Di,"exactHashManaBits");function Qp(e){return e.kind==="supermana"?32:16|Wi(e.color)}l(Qp,"exactSearchHashManaBits");function Zp(e){switch(e){case 1:return 1;case 0:return 2;case 2:return 3}}l(Zp,"exactHashConsumableBits");function Jp(e){switch(e){case 0:return 1;case 1:return 2;case 2:return 3}}l(Jp,"exactSearchHashConsumableBits");function rt(e){return(vh(e.kind)|Wi(e.color)<<4|(e.cooldown&255)<<8)>>>0}l(rt,"exactHashMonBits");function Ah(e){let n;switch(e.kind){case"mon":n=256|rt(e.mon);break;case"mana":n=512|Di(e.mana);break;case"mon-with-mana":n=768|rt(e.mon)|Di(e.mana)<<16;break;case"mon-with-consumable":n=1024|rt(e.mon)|Zp(e.consumable)<<16;break;case"consumable":n=1280|Zp(e.consumable);break}return Ln(n>>>0)}l(Ah,"exactHashItem");function Ih(e){let n;switch(e.kind){case"mon":n=256|rt(e.mon);break;case"mana":n=512|Qp(e.mana);break;case"mon-with-mana":n=768|rt(e.mon)|Qp(e.mana)<<16;break;case"mon-with-consumable":n=1024|rt(e.mon)|Jp(e.consumable)<<16;break;case"consumable":n=1280|Jp(e.consumable);break}return Ln(n>>>0)}l(Ih,"exactSearchHashItem");function cd(e){let n=e;return n=dn(n,wr(n,30)),n=Hn(n,sd),n=dn(n,wr(n,27)),n=Hn(n,ud),dn(n,wr(n,31))}l(cd,"exactMixU64");function Zu(e){let n=$u(e,gh);return n=Hn(dn(n,wr(n,30)),sd),n=Hn(dn(n,wr(n,27)),ud),dn(n,wr(n,31))}l(Zu,"exactSearchMixU64");function Nh(e,n){return cd(dn(Hn(Ln(e+1),ad),Hn(Ah(n),id)))}l(Nh,"exactBoardEntryHash");function Dh(e){return cd($u(Zn(e),Oe(608135816,2242054355)))}l(Dh,"exactBoardVariantHash");function rn(e){let n=dn(td,Dh(e.variant()));for(let[o,r]of e.occupied())n=dn(n,Nh(Z(o),r));return n}l(rn,"exactBoardHash");function se(e){let n=td;for(let[r,i]of e.board.occupied()){let a=dn(Hn(Ln(Z(r)+1),ad),Ih(i));n=dn(n,Zu(a)),n=Hn(Oi(n,17),id)}let o=[[Zn(e.whiteScore),17],[Zn(e.blackScore),35],[Ln(Wi(e.activeColor)),53],[Zn(e.actionsUsedCount),71],[Zn(e.manaMovesCount),89],[Zn(e.monsMovesCount),107],[Zn(e.whitePotionsCount),125],[Zn(e.blackPotionsCount),143],[Zn(e.turnNumber),161],[Zn(e.variant()),179]];for(let[r,i]of o)n=dn(n,Zu(dn(r,Ln(i))));return Zu(n)}l(se,"exactSearchStateHash");var Do=Object.freeze({kind:"none"}),Qt=Object.freeze({kind:"bomb"}),Ei=new ke(Ch),Ju=new ke(Oh),el=new ke(wh),gi=new ke(Th),vi=new ke(Rh),Ai=new ke(Ph),nl=new ke(il),ol=new ke(il),Xt=new ke(il),Ii=new ke(Ni),rl=new ke(Eh),Yt=new ke(rd);function Nn(e){return e===0?0:1}l(Nn,"colorKey");function Dn(...e){if(e.length>6)return;let n=0,o=1;for(let r of e){if(!Number.isInteger(r))return;let i=r;if(i<-1||i>254)return;n+=(i+1)*o,o*=256}return Number.isSafeInteger(n)?n:void 0}l(Dn,"exactCacheTag");function xh(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===0?3:4}}l(xh,"payloadSlot");function So(e,n){return Z(e)*5+xh(n)}l(So,"payloadSeenSlot");function Jt(e,n,o){let r=e.findAwakeAngel(n);return r!==void 0&&J(r,o)===1}l(Jt,"exactIsLocationGuardedByAngel");function Fi(e,n,o){let r=Math.abs(n.i-o.i),i=Math.abs(n.j-o.j),a=kr(n,o),t=e.square(a);return(r===2&&i===0||r===0&&i===2)&&e.item(a)===void 0&&t.kind!=="supermana-base"&&t.kind!=="mon-base"}l(Fi,"demonHasLineAttack");function Bh(e,n,o){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n===1;case"mon-base":return e.monKind===n&&e.color===o}}l(Bh,"squareAllowsEmptyMon");function Wh(e,n){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n.kind==="supermana";case"mon-base":return!1}}l(Wh,"squareAllowsManaCarrier");function _i(e,n,o,r,i,a){let t=e.item(i);switch(r.kind){case"none":{if(t===void 0)return Bh(e.square(i),n,o)?Do:void 0;switch(t.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return n===1?{kind:"mana",mana:xe(t.mana)}:void 0;case"consumable":return t.consumable===2?a?Qt:Do:void 0}}case"mana":{if(t===void 0)return Wh(e.square(i),r.mana)?r:void 0;switch(t.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return{kind:"mana",mana:xe(t.mana)};case"consumable":return t.consumable===2?r:void 0}}case"bomb":{if(t===void 0)switch(e.square(i).kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return Qt;case"supermana-base":case"mon-base":return}return t.kind==="consumable"&&t.consumable===2?Qt:void 0}}}l(_i,"actorPayloadAfterMoveCompute");function pd(e,n,o,r,i,a){if(!(r.kind==="mana"||e.item(i)?.kind==="mana"))return _i(e,n,o,r,i,a)}l(pd,"exactAttackPayloadAfterMove");function Fh(e,n,o){return e.square(o).kind!=="mon-base"&&(we(o,n)||e.item(o)===void 0)}l(Fh,"exactAttackActionSourceAvailable");function dd(e,n,o,r){let i;switch(n){case 4:i=Oo(r);break;case 0:i=Eo(r);break;case 1:case 2:case 3:return}let a;for(let t of i){if(!Fh(e,o,t)||n===0&&e.item(kr(t,r))!==void 0)continue;let s=J(o,t);a=a===void 0?s:Math.min(a,s)}return a}l(dd,"exactAttackActionStepsLowerBound");function _h(e,n,o,r,i,a,t,s){if(a.kind==="bomb")return Math.max(J(i,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:dd(e,t,i,n);if(s)for(let c of r){let p=R(J(i,c),Math.max(J(c,n)-3,0));u=u===void 0?p:Math.min(u,p)}return u}l(_h,"exactAttackRemainingStepsLowerBound");function fd(e){let n=[];for(let[o,r]of e.occupied())r.kind==="consumable"&&r.consumable===2&&n.push(o);return n}l(fd,"bombPickupLocations");function md(e,n,o,r,i,a,t,s){if(T())return!1;if(a.kind==="mon-with-consumable"&&a.consumable===1&&J(i,n)<=o+3)return!0;if(!r){let u=dd(e,t.kind,i,n);if(u!==void 0&&u<=o)return!0}if(a.kind==="mon-with-mana")return!1;for(let u of s){if(T())return!1;let c=J(i,u);if(!(c>o)&&J(u,n)<=o-c+3)return!0}return!1}l(md,"exactAttackTargetPlausibleForAttacker");function Gh(e,n,o,r,i,a){if(i<0||!a||e.item(r)===void 0||T())return!1;let t=Jt(e,o,r),s=fd(e);for(let[u,c]of e.occupied()){if(T())return!1;let p=H(c);if(!(p?.color!==n||V(p))&&md(e,r,i,t,u,c,p,s))return!0}return!1}l(Gh,"exactAttackTargetPlausibleOnBoard");function Gi(e,n){let o=[];for(let[r,i]of e.occupied())H(i)?.color===n&&o.push(r);return o}l(Gi,"attackReachSummaryTargetLocations");function Vi(e,n,o,r,i,a){let t=new Or;if(r<0||!i||a.length===0||T())return t;for(let s of a){if(T())return new Or;let u=e.item(s),c=u===void 0?void 0:H(u);c!==void 0&&t.markGuarded(s,Jt(e,c.color,s))}for(let[s,u]of e.occupied()){if(T())return new Or;let c=H(u);if(c?.color!==o||V(c))continue;let p=u.kind!=="mon-with-mana",d=u.kind==="mon-with-consumable"&&u.consumable===1?Qt:Do,f=[{location:s,payload:d,steps:0}],m=new Uint8Array(Me*5);m[So(s,d)]=1;let S=0;for(;S<f.length;){let h=f[S];if(S+=1,h===void 0)break;if(T())return new Or;if(!(h.steps>r)){if(h.payload.kind==="bomb")for(let y of a)J(h.location,y)<=3&&t.addBombThreat(y);if(e.square(h.location).kind!=="mon-base")for(let y of a)(c.kind===4&&Math.abs(h.location.i-y.i)===2&&Math.abs(h.location.j-y.j)===2||c.kind===0&&Fi(e,h.location,y))&&t.addActionThreat(y);if(h.steps!==r)for(let y of Re(h.location)){let M=pd(e,c.kind,c.color,h.payload,y,p);if(M===void 0)continue;let C=So(y,M);m[C]===0&&(m[C]=1,f.push({location:y,payload:M,steps:h.steps+1}))}}}}return T()?new Or:t}l(Vi,"attackReachSummaryForTargetsWithHash");function Sd(e,n,o,r,i,a){return Vi(e,n,o,i,a,Gi(e,r))}l(Sd,"attackReachSummaryWithHash");function Vh(e,n,o,r,i,a){if(T())return!1;let t=Jt(e,r,i),s=fd(e);for(let[u,c]of e.occupied()){if(T())return!1;let p=H(c);if(p?.color!==o||V(p)||!md(e,i,a,t,u,c,p,s))continue;let d=c.kind!=="mon-with-mana",f=c.kind==="mon-with-consumable"&&c.consumable===1?Qt:Do,m=[{location:u,payload:f,steps:0}],S=new Uint8Array(Me*5);S[So(u,f)]=1;let h=0;for(;h<m.length;){let y=m[h];if(h+=1,y===void 0||T())return!1;if(y.steps>a)continue;if(y.payload.kind==="bomb"&&e.item(i)!==void 0&&J(y.location,i)<=3||e.square(y.location).kind!=="mon-base"&&!t&&(p.kind===4&&Math.abs(y.location.i-i.i)===2&&Math.abs(y.location.j-i.j)===2||p.kind===0&&Fi(e,y.location,i)))return!0;if(y.steps===a)continue;let M=_h(e,i,t,s,y.location,y.payload,p.kind,d);if(!(M!==void 0&&R(y.steps,M)>a))for(let C of Re(y.location)){let k=pd(e,p.kind,p.color,y.payload,C,d);if(k===void 0)continue;let b=So(C,k);S[b]===0&&(S[b]=1,m.push({location:C,payload:k,steps:y.steps+1}))}}}return!1}l(Vh,"canAttackTargetOnBoardUncached");function at(e,n,o,r,i,a,t){if(a<0||!t||e.item(i)===void 0||T())return!1;let s=Dn(Nn(o),Nn(r),Z(i),a,1),u=s===void 0?void 0:Ei.get(n,s);if(u!==void 0)return u;if(!Gh(e,o,r,i,a,t))return ye()&&s!==void 0&&Ei.set(n,!1,s),!1;let c=Vh(e,n,o,r,i,a);return ye()?(s!==void 0&&Ei.set(n,c,s),c):!1}l(at,"canAttackTargetOnBoardWithHash");function yd(e,n,o,r,i,a,t,s){if(T())return;let u=[{location:n,payload:i,steps:0}],c=new Uint8Array(Me*5);c[So(n,i)]=1;let p=0;for(;p<u.length;){let d=u[p];if(p+=1,d===void 0||T())return;if(s(d.location,d.payload))return d.steps;if(!(t!==void 0&&d.steps>=t))for(let f of Re(d.location)){let m=_i(e,o,r,d.payload,f,a);if(m===void 0)continue;let S=So(f,m);c[S]===0&&(c[S]=1,u.push({location:f,payload:m,steps:d.steps+1}))}}}l(yd,"shortestPayloadState");function Zt(e,n,o,r,i){if(T()||i!==void 0&&i<0)return;let a=Dn(Z(n),Di(o));if(a!==void 0&&gi.has(r,a)){let s=gi.get(r,a);return i===void 0||s===void 0||s<=i?s:void 0}let t=yd(e,n,1,0,{kind:"mana",mana:o},!1,i,(s,u)=>u.kind==="mana"&&e.square(s).kind==="mana-pool");if(ye())return a!==void 0&&(i===void 0||t!==void 0)&&gi.set(r,t,a),t}l(Zt,"exactCarrierStepsToAnyPoolWithHash");function Lh(e,n,o){if(T())return;let r=rn(e),i=Dn(Nn(n),Z(o));if(i!==void 0&&vi.has(r,i))return vi.get(r,i);let a=yd(e,o,1,n,Do,!1,void 0,(t,s)=>s.kind==="mana");if(ye())return i!==void 0&&vi.set(r,a,i),a}l(Lh,"exactDrainerToAnyManaSteps");function Hh(e,n){if(n===void 0)return!0;let o=K(e.pathSteps*3,e.manaValue),r=K(n.pathSteps*3,n.manaValue);return o<r||o===r&&e.manaValue>n.manaValue}l(Hh,"pickupPathBeats");function sl(e,n,o,r,i){if(T())return;let a=Dn(Nn(n),Z(o),r??-1);if(a!==void 0&&Ai.has(i,a))return Ai.get(i,a);let t=[{location:o,payload:Do,steps:0}],s=new Uint8Array(Me*5);s[So(o,Do)]=1;let u,c=0;for(;c<t.length;){let p=t[c];if(c+=1,p===void 0||T())return;if(!(r!==void 0&&p.steps>r)){if(p.payload.kind==="mana"&&e.square(p.location).kind==="mana-pool"){let d={pathSteps:Math.max(p.steps-1,0),totalMoves:p.steps,manaValue:Pe(p.payload.mana,n),mana:xe(p.payload.mana)};Hh(d,u)&&(u=d)}if(!(r!==void 0&&p.steps>=r))for(let d of Re(p.location)){let f=_i(e,1,n,p.payload,d,!1);if(f===void 0||f.kind==="bomb")continue;let m=So(d,f);s[m]===0&&(s[m]=1,t.push({location:d,payload:f,steps:p.steps+1}))}}}if(ye())return a!==void 0&&Ai.set(i,u,a),u}l(sl,"exactBestDrainerPickupPathWithHash");function Li(e,n,o,r){if(T())return[1,1];let i=0,a=0;for(let t of Oo(o)){if(T())return[1,1];let s=e.item(t),u=s===void 0?void 0:H(s);u?.kind===4&&u.color!==n&&!V(u)&&e.square(t).kind!=="mon-base"&&(i+=1)}for(let t of Eo(o)){if(T())return[1,1];let s=e.item(t),u=s===void 0?void 0:H(s);u?.kind===0&&u.color!==n&&!V(u)&&e.square(t).kind!=="mon-base"&&Fi(e,t,o)&&(i+=1)}for(let t of qr(o)){if(T())return[1,1];let s=e.item(t);s?.kind==="mon-with-consumable"&&s.consumable===1&&s.mon.color!==n&&!V(s.mon)&&e.square(t).kind!=="mon-base"&&(a+=1)}return T()?[1,1]:[i,a]}l(Li,"drainerImmediateThreatsWithHash");function ul(e,n,o){return Li(e,n,o,rn(e))}l(ul,"drainerImmediateThreats");function hd(e,n,o,r){if(T())return!0;let[i,a]=ul(e,n,o);return T()?!0:r?a>0:i+a>0}l(hd,"isDrainerUnderImmediateThreat");function Uh(e,n,o,r){if(T())return!1;if(r){for(let[i,a]of e.occupied())if(a.kind==="mon-with-consumable"&&a.consumable===1&&a.mon.color!==n&&!V(a.mon)&&e.square(i).kind!=="mon-base"&&J(i,o)<=4)return!0;return!1}for(let[i,a]of e.occupied()){if(T())return!1;let t=H(a);if(!(t===void 0||t.color===n||V(t)||e.square(i).kind==="mon-base")){if(t.kind===4||t.kind===0)for(let s=-1;s<=1;s+=1)for(let u=-1;u<=1;u+=1){if(s===0&&u===0)continue;let c={i:i.i+s,j:i.j+u};if(c.i<0||c.i>10||c.j<0||c.j>10||e.item(c)!==void 0)continue;let p=e.square(c);if(!(p.kind==="mon-base"||p.kind==="supermana-base")&&(t.kind===4&&Math.abs(c.i-o.i)===2&&Math.abs(c.j-o.j)===2||t.kind===0&&Fi(e,c,o)))return!0}if(a.kind==="mon-with-consumable"&&a.consumable===1&&J(i,o)<=4)return!0}}return!1}l(Uh,"isDrainerUnderWalkThreatUncached");function it(e,n,o,r,i){if(T())return!0;let a=Dn(Nn(o),Z(r),i?1:0),t=a===void 0?void 0:Ju.get(n,a);if(t!==void 0)return t||T();let s=Uh(e,o,r,i);return ye()?(a!==void 0&&Ju.set(n,s,a),s):!0}l(it,"isDrainerUnderWalkThreatWithHash");function Hi(e,n,o,r){if(T())return!1;let i=Jt(e,o,r),a=at(e,n,U(o),o,r,Se,!0);return T()?!1:!a&&!it(e,n,o,r,i)&&!T()}l(Hi,"isDrainerExactlySafeNextTurnOnBoardWithHash");function ea(e,n,o){return Hi(e,rn(e),n,o)}l(ea,"isDrainerExactlySafeNextTurnOnBoard");function st(e,n){for(let[o,r]of e.occupied()){let i=H(r);if(i?.color===n&&i.kind===1&&!V(i))return o}}l(st,"findAwakeDrainer");function ll(e,n,o){if(T())return 0;let r=Dn(Nn(o)),i=r===void 0?void 0:el.get(n,r);if(i!==void 0)return i;let a=st(e,o),t=0;if(a!==void 0){let s=Jt(e,o,a),[u,c]=Li(e,o,a,n),p=s?c>0:u+c>0,d=it(e,n,o,a,s);t=Hi(e,n,o,a)?p||d?1:2:p||d?-2:-1}return ye()?(r!==void 0&&el.set(n,t,r),t):0}l(ll,"exactOwnDrainerSafetyScoreWithHash");function jh(e){let n=0,o=0;for(let[,r]of e.board.occupied())r.kind!=="mana"||r.mana.kind!=="regular"||(r.mana.color===0?n+=1:o+=1);return{hash:se(e),whiteRegularManaCount:n,blackRegularManaCount:o}}l(jh,"secureManaStateKey");function tl(e,n,o){let r;for(let[i,a]of e.occupied()){if(a.kind!=="mana"||!je(a.mana,n))continue;let t=J(o,i);r=r===void 0?t:Math.min(r,t)}return r}l(tl,"exactDistanceToWantedManaStepsLowerBound");function bd(e,n,o){if(T())return;let r=e.cloneForSimulation(),i=r.processInput([{kind:"location",location:n},{kind:"location",location:o}],!1,!1);if(i.kind!=="events")return;let a=i.events.find(t=>t.kind==="mana-scored");return{after:r,scoredMana:a?.kind==="mana-scored"?xe(a.mana):void 0}}l(bd,"applySecureDrainerWalk");function Kh(e,n,o,r){let i=jh(e);return{hash:i.hash,tag:Dn(i.whiteRegularManaCount,i.blackRegularManaCount,Nn(n),Di(r),Z(o))}}l(Kh,"secureSpecificManaQueryKey");function qh(e,n,o,r,i){if(T())return;let a=e.board.item(o),t=a?.kind==="mon-with-mana"&&je(a.mana,r);if(t&&ea(e.board,n,o))return 0;if(e.activeColor!==n||!e.playerCanMoveMon())return;let s=Math.max(Se-e.monsMovesCount,0);if(!t){let c=tl(e.board,r,o);if(c===void 0||c>s)return}let u;for(let c of Re(o)){if(T())return;if(!t){let f=e.board.item(c);if(!(f?.kind==="mana"&&je(f.mana,r))){let S=tl(e.board,r,c);if(S===void 0||S>s-1)continue}}let p=bd(e,o,c);if(T())return;if(p===void 0)continue;let d;if(p.scoredMana!==void 0&&je(p.scoredMana,r))d=1;else{let f=st(p.after.board,n);if(f===void 0)continue;let m=xi(p.after,n,f,r,i);if(T())return;m!==void 0&&(d=m+1)}if(d!==void 0&&(u===void 0||d<u)&&(u=d,d===1))break}return u}l(qh,"secureSpecificManaStepsInGameUncached");function xi(e,n,o,r,i){if(T())return;let a=Kh(e,n,o,r);if(a.tag!==void 0&&Ii.has(a.hash,a.tag))return Ii.get(a.hash,a.tag);if(a.tag!==void 0&&i.has(a.hash,a.tag))return;a.tag!==void 0&&i.add(a.hash,a.tag);let t;try{t=qh(e,n,o,r,i)}finally{a.tag!==void 0&&i.delete(a.hash,a.tag)}if(ye())return a.tag!==void 0&&Ii.set(a.hash,t,a.tag),t}l(xi,"secureSpecificManaStepsInGame");function al(e,n,o,r){if(r<0||T())return;let i=st(e,n);if(i===void 0)return;let a=e.item(i);if(!(a?.kind==="mon-with-mana"&&je(a.mana,o))){let c=tl(e,o,i);if(c===void 0||c>r)return}let s=Math.max(0,Math.min(Se,Se-r)),u=ln.newSimulationState({board:e.clone(),whiteScore:0,blackScore:0,activeColor:n,actionsUsedCount:Xn,manaMovesCount:0,monsMovesCount:s,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return xi(u,n,i,o,new Vn(Ni))}l(al,"exactSecureSpecificManaStepsOnBoard");function Ui(e,n,o,r){if(T())return;let i=e.cloneForSimulation(),a=g(o),t=xi(i,n,a,r,new Vn(Ni));if(t===void 0||T())return;let s=[];for(;t>0;){let u;for(let c of Re(a)){if(T())return;let p=bd(i,a,c);if(T())return;if(p===void 0)continue;if(t===1&&p.scoredMana!==void 0&&je(p.scoredMana,r)){u={next:c,after:p.after,steps:0};break}let d=st(p.after.board,n);if(d===void 0)continue;let f=xi(p.after,n,d,r,new Vn(Ni));if(T())return;if(f===t-1){u={next:c,after:p.after,steps:f};break}}if(u===void 0)return;s.push(g(u.next)),i=u.after,a=g(u.next),t=u.steps}return s}l(Ui,"exactSecureSpecificManaPathFrom");function cl(e,n){if(T())return;let o=rn(e),r;for(let[i,a]of e.occupied()){if(T())return;let t=H(a);if(t?.color!==n||V(t))continue;let s;a.kind==="mon-with-mana"?s=Zt(e,i,a.mana,o):(a.kind==="mon"||a.kind==="mon-with-consumable")&&t.kind===1&&(s=sl(e,n,i,void 0,o)?.totalMoves),s!==void 0&&(r=r===void 0?s:Math.min(r,s))}return T()?void 0:r}l(cl,"exactBestScoreStepsOnBoard");function Md(e,n,o){if(o<0||T())return 0;let r=rn(e),i=0;for(let[a,t]of e.occupied()){if(T())return 0;let s=H(t);if(!(s?.color!==n||V(s))){if(t.kind==="mon-with-mana")Zt(e,a,t.mana,r,o)!==void 0&&(i=Math.max(i,Pe(t.mana,n)));else if((t.kind==="mon"||t.kind==="mon-with-consumable")&&s.kind===1){let u=sl(e,n,a,o,r);u!==void 0&&(i=Math.max(i,u.manaValue))}if(i>=2)return i}}return i}l(Md,"exactBestImmediateScoreOnBoard");function kd(e,n,o,r){if(r<0||T())return[];let i=rn(e),a=Dn(Z(n),Nn(o),r),t=a===void 0?void 0:rl.get(i,a);if(t!==void 0)return t;let s=[],u=[[n,0]],c=new Uint8Array(Me);c[Z(n)]=1;let p=0;for(;p<u.length;){let f=u[p];if(p+=1,f===void 0||T())return[];let[m,S]=f;if(s.push([m,S]),!(S>=r))for(let h of Re(m)){if(T())return[];let y=Z(h);if(c[y]!==0)continue;let M=e.item(h),C=e.square(h),k=!1;M===void 0?k=C.kind==="regular"||C.kind==="consumable-base"||C.kind==="mana-base"||C.kind==="mana-pool"||C.kind==="mon-base"&&C.monKind===3&&C.color===o:k=M.kind==="consumable"&&M.consumable===2,k&&(c[y]=1,u.push([h,S+1]))}}if(!ye())return[];let d=Object.freeze(s.map(([f,m])=>Object.freeze([f,m])));return a!==void 0&&rl.set(i,d,a),d}l(kd,"reachableSpiritPositions");function Cd(e,n,o){let r=e.item(o),i=H(n),a=Gn(n),t;if(r===void 0)t=!0;else switch(r.kind){case"mon":n.kind==="mana"?t=r.mon.kind===1&&!V(r.mon):n.kind==="consumable"?t=n.consumable===2:t=!1;break;case"mana":t=i?.kind===1&&!V(i);break;case"mon-with-mana":case"mon-with-consumable":t=n.kind==="consumable"&&n.consumable===2;break;case"consumable":t=r.consumable===2&&(n.kind==="mon"||n.kind==="mon-with-mana"||n.kind==="mon-with-consumable");break}if(!t)return!1;let s=e.square(o);switch(s.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return a?.kind==="supermana"||a===void 0&&i?.kind===1;case"mon-base":return i?.kind===s.monKind&&i.color===s.color&&a===void 0&&Mr(n)===void 0}}l(Cd,"spiritDestinationAllowed");function zh(e,n,o,r){if(o<0||!r||T())return He();let i=He();for(let[a,t]of e.occupied()){if(T())return He();let s=H(t);if(!(s?.color!==n||s.kind!==3||V(s)))for(let[u]of kd(e,a,n,o)){if(T())return He();if(e.square(u).kind==="mon-base")continue;let c=0,p=0,d=!1,f=!1;for(let S of go(u)){let h=e.item(S);if(!(h===void 0||!Ro(h)||!Re(S).some(y=>Cd(e,h,y))))if(c+=1,h.kind==="mana")h.mana.kind==="supermana"?(d=!0,p=Math.max(p,2)):h.mana.color===U(n)&&(f=!0,p=Math.max(p,2));else{let y=H(h);y?.color===n&&y.kind===1&&!V(y)?p=Math.max(p,2):y!==void 0&&y.color!==n&&!V(y)&&(p=Math.max(p,1))}}let m=Math.max(Math.min(c,Yp),Math.min(1+p,Yp));i={...i,utility:Math.max(i.utility,m),nextTurnSetupGain:m>i.utility?p:m===i.utility?Math.max(i.nextTurnSetupGain,p):i.nextTurnSetupGain,supermanaProgress:i.supermanaProgress||d,opponentManaProgress:i.opponentManaProgress||f}}}return T()?He():i}l(zh,"exactPassiveSpiritSummary");function $h(e,n,o,r,i,a,t){if(!a&&!t||T())return{bestScore:0,bestOpponentManaScore:0};let s=a?Pe({kind:"supermana"},n):0,u=t?Pe({kind:"regular",color:U(n)},n):0,c=[{location:o,payload:Do,steps:0}],p=new Uint8Array(Me*5);p[So(o,Do)]=1;let d=0,f=0,m=0;for(;m<c.length;){let S=c[m];if(m+=1,S===void 0||T())return{bestScore:0,bestOpponentManaScore:0};if(S.payload.kind==="mana"&&e.square(S.location).kind==="mana-pool"){let h=Pe(S.payload.mana,n);if(a&&h>=i&&(d=Math.max(d,h)),t&&S.payload.mana.kind==="regular"&&S.payload.mana.color===U(n)&&(f=Math.max(f,h)),(!a||d>=s)&&(!t||f>=u))return{bestScore:d,bestOpponentManaScore:f}}if(!(S.steps>=r))for(let h of Re(S.location)){if(T())return{bestScore:0,bestOpponentManaScore:0};let y=_i(e,1,n,S.payload,h,!1);if(y===void 0||y.kind==="bomb")continue;let M=So(h,y);p[M]===0&&(p[M]=1,c.push({location:h,payload:y,steps:S.steps+1}))}}return{bestScore:d,bestOpponentManaScore:f}}l($h,"exactDrainerImmediateTacticalWindow");function ed(e,n,o,r,i,a=1){if(o<0||!r&&!i||T())return{bestScore:0,bestOpponentManaScore:0};let t=r?Math.max(a,1):0,s={kind:"regular",color:U(n)},u=r?Pe({kind:"supermana"},n):0,c=i?Pe(s,n):0,p=rn(e),d=0,f=0;for(let[m,S]of e.occupied()){if(T())return{bestScore:0,bestOpponentManaScore:0};let h=H(S);if(!(h?.color!==n||V(h))){if(S.kind==="mon-with-mana"){let y=Pe(S.mana,n),M=r&&y>=t,C=i&&je(S.mana,s);if(!M&&!C)continue;let k=Zt(e,m,S.mana,p,o);if(T())return{bestScore:0,bestOpponentManaScore:0};if(k===void 0)continue;M&&(d=Math.max(d,y)),C&&(f=Math.max(f,y))}else if(h.kind===1&&(S.kind==="mon"||S.kind==="mon-with-consumable")){let y=$h(e,n,m,o,t,r,i);if(T())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,y.bestScore)),i&&(f=Math.max(f,y.bestOpponentManaScore))}if((!r||d>=u)&&(!i||f>=c))return{bestScore:d,bestOpponentManaScore:f}}}return T()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:f}}l(ed,"exactBestImmediateTacticalWindow");function Xh(e,n,o,r,i){let a=e.item(n),t=e.item(r),s={from:g(n),fromItem:a===void 0?void 0:Ne(a),to:g(r),toItem:t===void 0?void 0:Ne(t)},u=e.square(r);e.removeItem(n);let c=Ne(o);o.kind==="mon"&&t?.kind==="mana"?c=wo(o.mon,t.mana):o.kind==="mana"&&t?.kind==="mon"?c=wo(t.mon,o.mana):o.kind==="mon-with-mana"&&t?.kind==="mana"?(e.put({kind:"mana",mana:xe(o.mana)},n),c=wo(o.mon,t.mana)):o.kind==="consumable"&&t?.kind==="mon"?c=Pn(t.mon):o.kind==="mon"&&t?.kind==="consumable"?c=Pn(o.mon):o.kind==="mon-with-mana"&&t?.kind==="consumable"?c=wo(o.mon,o.mana):o.kind==="mon-with-consumable"&&t?.kind==="consumable"&&(c={kind:"mon-with-consumable",mon:ee(o.mon),consumable:1});let p=0,d=0,f=Gn(c);if(u.kind==="mana-pool"&&f!==void 0){p=Pe(f,i),f.kind==="regular"&&f.color===U(i)&&(d=p);let m=H(c);if(m===void 0)return e.removeItem(r),{undo:s,scoreDelta:p,opponentManaScoreDelta:d};c=Pn(m)}return e.put(c,r),{undo:s,scoreDelta:p,opponentManaScoreDelta:d}}l(Xh,"applySpiritMovePreviewInPlace");function Yh(e,n){n.fromItem===void 0?e.removeItem(n.from):e.put(n.fromItem,n.from),n.toItem===void 0?e.removeItem(n.to):e.put(n.toItem,n.to)}l(Yh,"undoSpiritMovePreview");var na=1,oa=2,ji=4,nd=na|oa|ji;function Qh(e,n){let o=(n&na)!==0,r=(n&oa)!==0,i=(n&ji)!==0;return{...He(),sameTurnScore:o&&e.sameTurnScore,sameTurnScoreValue:o?e.sameTurnScoreValue:0,sameTurnOpponentManaScore:r&&e.sameTurnOpponentManaScore,sameTurnOpponentManaScoreValue:r?e.sameTurnOpponentManaScoreValue:0,supermanaProgress:i&&e.supermanaProgress,opponentManaProgress:i&&e.opponentManaProgress}}l(Qh,"tacticalSpiritSummaryForFields");function Td(e,n,o,r,i){if(i&=nd,o<0||i===0||!r||T())return He();let a=rn(e),t=Dn(Nn(n),o,Number(r),i),s=t===void 0?void 0:Yt.get(a,t);if(s!==void 0)return s;for(let c=1;c<=nd;c+=1){if(c===i||(c&i)!==i)continue;let p=Dn(Nn(n),o,Number(r),c),d=p===void 0?void 0:Yt.get(a,p);if(d===void 0)continue;let f=Qh(d,i);return ye()?(t!==void 0&&Yt.set(a,f,t),f):He()}let u=Zh(e,n,o,r,i);return ye()?(t!==void 0&&Yt.set(a,u,t),u):He()}l(Td,"exactTacticalSpiritSummary");function Zh(e,n,o,r,i){if(!r||T())return He();let a=(i&na)!==0,t=(i&oa)!==0,s=(i&ji)!==0,u=ed(e,n,o,a,t);if(T())return He();let c=a?Pe({kind:"supermana"},n):0,p=t?Pe({kind:"regular",color:U(n)},n):0,d=He(),f=new ke(rd);for(let[m,S]of e.occupied()){if(T())return He();let h=H(S);if(!(h?.color!==n||h.kind!==3||V(h)))for(let[y,M]of kd(e,m,n,o)){if(T())return He();if(e.square(y).kind==="mon-base")continue;let C=e.clone();we(y,m)||(C.removeItem(m),C.put(S,y));let k=L(o,M);for(let b of go(y)){if(T())return He();let w=C.item(b);if(!(w===void 0||!Ro(w)))for(let P of Re(b)){if(T())return He();if(!Cd(C,w,P))continue;let O=Xh(C,b,w,P,n);try{if(T())return He();let I=Math.max(d.sameTurnScoreValue,u.bestScore,O.scoreDelta),D=Math.max(d.sameTurnOpponentManaScoreValue,u.bestOpponentManaScore,O.opponentManaScoreDelta),x=a&&I<c,W=t&&D<p,_={bestScore:0,bestOpponentManaScore:0};if(x||W){let de=x?I+1:1,he=rn(C),$e=Dn(Nn(n),k,de,Number(x),Number(W)),ie=$e===void 0?void 0:f.get(he,$e);if(ie!==void 0)_=ie;else{if(_=ed(C,n,k,x,W,de),T())return He();$e!==void 0&&f.set(he,_,$e)}}if(T())return He();let v=Math.max(O.scoreDelta,_.bestScore),j=Math.max(O.opponentManaScoreDelta,_.bestOpponentManaScore);if(a&&(O.scoreDelta>0||v>u.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,v)}),t&&(O.opponentManaScoreDelta>0||j>u.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,j)}),s&&!d.supermanaProgress){let he=w.kind==="mana"&&w.mana.kind==="supermana"&&O.scoreDelta>0;if(!he&&(he=al(C,n,{kind:"supermana"},k)!==void 0,T()))return He();he&&(d={...d,supermanaProgress:!0})}if(s&&!d.opponentManaProgress){let de=O.opponentManaScoreDelta>0;if(!de&&(de=al(C,n,{kind:"regular",color:U(n)},k)!==void 0,T()))return He();de&&(d={...d,opponentManaProgress:!0})}if(T())return He();if((!a||d.sameTurnScoreValue>=c)&&(!t||d.sameTurnOpponentManaScoreValue>=p)&&(!s||d.supermanaProgress&&d.opponentManaProgress))return d}finally{Yh(C,O.undo)}}}}}return T()?He():d}l(Zh,"exactTacticalSpiritSummaryUncached");function Jh(e){let n=e[1],o=e[2];return(n===void 0?0:Math.trunc(70/Math.max(n,1)))+(o===void 0?0:Math.trunc(40/Math.max(o,1)))}l(Jh,"multiPressureFromSteps");function eb(e){return(e[1]??0)*70+(e[2]??0)*35}l(eb,"multiPressureFromScores");function od(e,n){if(De(20))return Io();let o=e.activeColor===n?Math.max(Se-e.monsMovesCount,0):Se,r=e.activeColor===n?e.playerCanUseAction():!0,i=rn(e.board),a=[],t;for(let[m,S]of e.board.occupied()){if(T())return Io();if(S.kind!=="mon-with-mana"||S.mon.color!==n||V(S.mon))continue;let h=Zt(e.board,m,S.mana,i);h!==void 0&&(t=t===void 0?h:Math.min(t,h),a.push(h))}let s=st(e.board,n),u=s===void 0?void 0:sl(e.board,n,s,void 0,i);if(De(20))return Io();let c=s===void 0?void 0:Lh(e.board,n,s);u!==void 0&&a.push(u.totalMoves),a.sort((m,S)=>m-S);let p=a.filter((m,S)=>S===0||a[S-1]!==m),d=[];for(let[m,S]of e.board.occupied()){if(T())return Io();if(S.kind!=="mon-with-mana"||S.mon.color!==n||V(S.mon))continue;let h=Zt(e.board,m,S.mana,i,o);h!==void 0&&h<=o&&d.push(Pe(S.mana,n))}u!==void 0&&u.totalMoves<=o&&d.push(u.manaValue);let f=zh(e.board,n,o,r);return De(20)?Io():(d.sort((m,S)=>S-m),{scorePathWindow:{bestSteps:p[0],multiPressure:Jh(p)},immediateWindow:{bestScore:d[0]??0,multiPressure:eb(d)},bestDrainerPickup:u,bestCarrierSteps:t,bestDrainerToManaSteps:c,spirit:f})}l(od,"buildColorSummary");function nb(e){if(De(20))return new rr;let n=od(e,0);if(De(20))return new rr;let o=od(e,1);return De(20)?new rr:new rr(n,o)}l(nb,"buildExactStrategicAnalysis");function ra(e,n){if(De(20))return new rr;let o=nl.get(n);if(o!==void 0)return o;let r=nb(e);return ye()?(nl.set(n,r),r):new rr}l(ra,"exactStrategicAnalysisWithSearchHash");function ut(e){return ra(e,se(e))}l(ut,"exactStrategicAnalysis");function Bi(e,n,o){let r=e.activeColor===n?Math.max(Se-e.monsMovesCount,0):Se;return al(e.board,n,o,r)}l(Bi,"exactSecureSpecificManaStepsThisTurn");function wd(e,n,o){let r=st(e.board,U(n));return r===void 0?!1:at(e.board,o,n,U(n),r,e.activeColor===n?Math.max(Se-e.monsMovesCount,0):Se,e.activeColor===n?e.playerCanUseAction():!0)}l(wd,"canAttackOpponentDrainerExactWithHash");function ob(e,n){let o=(n&tr)!==0,r=(n&ar)!==0,i=(n&Er)!==0,a=(n&gr)!==0,t=(n&yo)!==0,s=t&&(r||a),u=i||t,c=a||s,p=o?e.safeSupermanaProgressSteps:void 0,d=r?e.safeOpponentManaProgressSteps:void 0,f=c&&e.spiritAssistedDenial;return{safeSupermanaProgress:p!==void 0,safeSupermanaProgressSteps:p,safeOpponentManaProgress:d!==void 0||f,safeOpponentManaProgressSteps:d,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:f,spiritAssistedDenialValue:c?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:t?e.sameTurnScoreWindowValue:0}}l(ob,"turnTacticalProjectionForFlags");function rb(e,n){if(De(20))return No();let o=e.activeColor,r=Math.max(Se-e.monsMovesCount,0),i=(n&tr)!==0,a=(n&ar)!==0,t=(n&Er)!==0,s=(n&gr)!==0,u=(n&yo)!==0,c=u&&(a||s),p=0;(t||u)&&(p|=na),(s||c)&&(p|=oa);let d=p===0?He():Td(e.board,o,r,e.playerCanUseAction(),p);if(De(20))return No();let f=i?Bi(e,o,{kind:"supermana"}):void 0;if(De(20))return No();let m=a?Bi(e,o,{kind:"regular",color:U(o)}):void 0;if(De(20))return No();let S=u?Math.max(Md(e.board,o,r),d.sameTurnScoreValue,c?d.sameTurnOpponentManaScoreValue:0):0;return De(20)?No():{safeSupermanaProgress:f!==void 0,safeSupermanaProgressSteps:f,safeOpponentManaProgress:m!==void 0||d.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:m,spiritAssistedScore:d.sameTurnScore,spiritAssistedScoreValue:d.sameTurnScoreValue,spiritAssistedDenial:d.sameTurnOpponentManaScore,spiritAssistedDenialValue:d.sameTurnOpponentManaScoreValue,sameTurnScoreWindowValue:S}}l(rb,"buildExactTurnTacticalProjection");function Jn(e,n,o,r){if(r===0||e.activeColor!==n||De(20))return No();let i=Math.max(Se-e.monsMovesCount,0),a=Dn(Nn(n),i,e.playerCanUseAction()?1:0,r),t=a===void 0?void 0:Xt.get(o,a);if(t!==void 0)return t;for(let u=1;u<=ld;u+=1){if(u===r||(u&r)!==r)continue;let c=Dn(Nn(n),i,e.playerCanUseAction()?1:0,u),p=c===void 0?void 0:Xt.get(o,c);if(p!==void 0){let d=ob(p,r);return ye()?(a!==void 0&&Xt.set(o,d,a),d):No()}}let s=rb(e,r);return ye()?(a!==void 0&&Xt.set(o,s,a),s):No()}l(Jn,"exactTurnTacticalProjectionWithSearchHash");function Rd(e,n,o){return Jn(e,n,o,yo).sameTurnScoreWindowValue}l(Rd,"exactSameTurnScoreWindowWithSearchHash");function tb(e){if(De(20))return Rr();let n=e.activeColor,o=Math.max(Se-e.monsMovesCount,0),r=Td(e.board,n,o,e.playerCanUseAction(),na|oa|ji);if(De(20))return Rr();let i=Bi(e,n,{kind:"supermana"});if(De(20))return Rr();let a=Bi(e,n,{kind:"regular",color:U(n)});if(De(20))return Rr();let t=Math.max(Md(e.board,n,o),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),s=rn(e.board),u={canAttackOpponentDrainer:wd(e,n,s),safeSupermanaProgress:i!==void 0,safeSupermanaProgressSteps:i,safeOpponentManaProgress:a!==void 0||r.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:a,spiritAssistedSupermanaProgress:r.supermanaProgress,spiritAssistedOpponentManaProgress:r.opponentManaProgress,spiritAssistedScore:r.sameTurnScore,spiritAssistedDenial:r.sameTurnOpponentManaScore,sameTurnScoreWindowValue:t,scorePathBestSteps:cl(e.board,n)};return De(20)?Rr():u}l(tb,"buildExactTurnSummary");function ab(e,n,o){if(e.activeColor!==n||De(20))return Rr();let r=ol.get(o);if(r!==void 0)return r;let i=tb(e);return ye()?(ol.set(o,i),i):Rr()}l(ab,"exactTurnSummaryWithSearchHash");function pl(e,n){return ab(e,n,se(e))}l(pl,"exactTurnSummary");function Pd(e,n){return pl(e,n).canAttackOpponentDrainer}l(Pd,"canAttackOpponentDrainerThisTurn");function ta(e,n,o){if(e.activeColor!==n||De(20))return Pr();let r={remainingMonMoves:Math.max(Se-e.monsMovesCount,0),canUseAction:e.playerCanUseAction(),canMoveMana:e.playerCanMoveMana()},i=rn(e.board),a=Jn(e,n,o,ld);if(De(20))return Pr();let t=ll(e.board,i,n);if(De(20))return Pr();let s=U(n),u=s===0?e.whiteScore:e.blackScore,c=Math.max(Ae-u,0),p=ra(e,o).colorSummary(s).immediateWindow.bestScore;if(De(20))return Pr();let d=c>0&&p>=c,f=c>0&&a.sameTurnScoreWindowValue>0?Math.min(a.sameTurnScoreWindowValue,c):0,m={budget:r,turn:a,delta:{sameTurnScoreWindowValue:a.sameTurnScoreWindowValue,spiritGain:Math.max(a.spiritAssistedScoreValue,a.spiritAssistedDenialValue),opponentWindowDenyGain:f,drainerAttackAvailable:wd(e,n,i),drainerSafety:t,safeSupermanaProgressSteps:a.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:a.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return De(20)?Pr():m}l(ta,"exactOpportunityContextWithSearchHash");function qe(e,n){return ta(e,n,se(e))}l(qe,"exactOpportunityContext");function Ki(){Ei.clear(),Ju.clear(),el.clear(),gi.clear(),vi.clear(),Ai.clear(),nl.clear(),ol.clear(),Xt.clear(),Ii.clear(),rl.clear(),Yt.clear()}l(Ki,"clearExactStateAnalysisCache");var ib=2500,sb=2500,ub=9200,lb=2,ml=new Set(It.map(Z));function cb(e,n){let o=e.kind!=="mon-with-mana"&&(n.kind===4||n.kind===0||e.kind==="mon-with-consumable"),r=n.kind===4||n.kind===0,i=e.kind==="mon-with-consumable"&&e.consumable===1;return[o,r,i]}l(cb,"scoringDangerSourceFlags");function pb(e){let n={manaEntries:[],liveManaCarriers:[[],[]],liveMonLocations:[[],[]],liveDrainerLocations:[[],[]],liveAngelLocations:[[],[]],dangerSources:[[],[]],looseConsumableLocations:[],regularManaMoveScores:[0,0],regularManaScorePathSteps:[void 0,void 0]};for(let[o,r]of e.occupied())switch(r.kind){case"mana":{let i=eo(o,{kind:"any-closest-pool"})-1;if(n.manaEntries.push({location:o,mana:r.mana}),r.mana.kind==="regular"){let a=yn(r.mana.color),t=i+1,s=n.regularManaScorePathSteps[a];n.regularManaScorePathSteps[a]=s===void 0?t:Math.min(s,t),i<=1&&(n.regularManaMoveScores[a]=Pe(r.mana,r.mana.color))}break}case"mon":case"mon-with-mana":case"mon-with-consumable":{let i=r.mon;if(V(i))break;let a=yn(i.color);r.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:r.mana}),n.liveMonLocations[a].push(o),i.kind===1&&n.liveDrainerLocations[a].push(o),i.kind===2&&n.liveAngelLocations[a].push(o);let[t,s,u]=cb(r,i);(t||s||u)&&n.dangerSources[a].push({location:o,heuristicThreat:t,exactActionThreat:s,exactBombThreat:u});break}case"consumable":n.looseConsumableLocations.push(o);break}return n}l(pb,"scoringBoardSummary");function db(e){return!e.exactDangerThreat&&!e.walkThreat}l(db,"exactSafe");function Od(e){return e.angelNearby&&!e.exactDangerThreat}l(Od,"guardedAgainstExactAttack");var ho,aa,lt,ia,vr,sa,ua,la,ca,ct,pt,pa,Mo,Wd,Fd,zi,$i=class $i{constructor(n,o,r=!1,i=!1,a=!1){fe(this,Mo);fe(this,ho);fe(this,aa);fe(this,lt);fe(this,ia);fe(this,vr);fe(this,sa);fe(this,ua);fe(this,la);fe(this,ca);fe(this,ct);fe(this,pt);fe(this,pa,new Map);Te(this,ho,rn(n.board)),Te(this,aa,o),Te(this,lt,r),Te(this,ia,i),Te(this,vr,a),Te(this,pt,Array.from({length:Me*2},()=>{}))}static newWithFlags(n,o,r,i,a){return new $i(n,o,r,i,a)}boardHash(){return F(this,ho)}boardSummary(n){return F(this,sa)??Te(this,sa,pb(n)),F(this,sa)}manaPathSnapshot(n){return F(this,ua)??Te(this,ua,bb(this.boardSummary(n))),F(this,ua)}exactAnalysis(n){if(F(this,aa))return F(this,la)??Te(this,la,ut(n)),F(this,la)}drainerImmediateThreats(n,o,r){if(F(this,lt))return me(this,Mo,zi).call(this,n,U(o),o,0,!0,F(this,vr)).immediateThreats(r);let i=Z(r)+(o===1?Me:0),a=F(this,pt)[i];if(a!==void 0)return a;let t=Li(n,o,r,F(this,ho));return F(this,pt)[i]=t,t}canAttackTargetOnBoard(n,o,r,i,a,t){if(F(this,lt)){let s=n.item(i),u=s===void 0?void 0:H(s);if(F(this,vr)&&u?.color===r&&u.kind===1)return me(this,Mo,zi).call(this,n,o,r,a,t,!0).canAttackTarget(i);if(!F(this,vr))return me(this,Mo,zi).call(this,n,o,r,a,t,!1).canAttackTarget(i)}return at(n,F(this,ho),o,r,i,a,t)}};ho=new WeakMap,aa=new WeakMap,lt=new WeakMap,ia=new WeakMap,vr=new WeakMap,sa=new WeakMap,ua=new WeakMap,la=new WeakMap,ca=new WeakMap,ct=new WeakMap,pt=new WeakMap,pa=new WeakMap,Mo=new WeakSet,Wd=l(function(n,o){return F(this,ca)??Te(this,ca,[Gi(n,0),Gi(n,1)]),F(this,ca)[yn(o)]},"#targets"),Fd=l(function(n,o){if(F(this,ct)===void 0){let r=[],i=[];for(let[a,t]of n.occupied()){let s=H(t);s?.kind===1&&(s.color===0?r:i).push(a)}Te(this,ct,[r,i])}return F(this,ct)[yn(o)]},"#drainerTargets"),zi=l(function(n,o,r,i,a,t){let s=Number.isInteger(i)&&i>=0&&i<=65535?i*16+o+r*2+Number(a)*4+Number(t)*8:void 0;if(s!==void 0){let c=F(this,pa).get(s);if(c!==void 0)return c}let u;return t?u=Vi(n,F(this,ho),o,i,a,me(this,Mo,Fd).call(this,n,r)):F(this,ia)?u=Vi(n,F(this,ho),o,i,a,me(this,Mo,Wd).call(this,n,r)):u=Sd(n,F(this,ho),o,r,i,a),s!==void 0&&F(this,pa).set(s,u),u},"#attackReachSummary"),l($i,"ScoringEvalContext");var hl=$i;function Un(e){return Object.freeze(e)}l(Un,"freezeWeights");var Xi=Un({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0,confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,drainerAtRisk:-350,manaCloseToSamePool:500,monWithManaCloseToAnyPool:800,extraForSupermana:120,extraForOpponentsMana:100,drainerCloseToMana:300,drainerHoldingMana:350,drainerCloseToOwnPool:180,drainerCloseToSupermana:120,monCloseToCenter:210,spiritCloseToEnemy:160,spiritOnOwnBasePenalty:180,angelGuardingDrainer:180,angelCloseToFriendlyDrainer:120,hasConsumable:110,activeMon:50,regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0,drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),jn=Un({...Xi,faintedMon:-520,faintedDrainer:-900,faintedCooldownStep:-80,drainerAtRisk:-420,manaCloseToSamePool:520,monWithManaCloseToAnyPool:820,extraForSupermana:130,extraForOpponentsMana:120,drainerCloseToMana:330,drainerHoldingMana:370,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,monCloseToCenter:180,spiritCloseToEnemy:220,angelGuardingDrainer:280,angelCloseToFriendlyDrainer:180,hasConsumable:105,activeMon:45,manaCarrierOneStepFromPool:160,supermanaCarrierOneStepFromPoolExtra:80}),fb=Un({...jn,regularManaToOwnerPool:150,regularManaDrainerControl:15,supermanaDrainerControl:26,manaCarrierAtRisk:-150,manaCarrierGuarded:70,drainerCloseToOwnPool:290,drainerCloseToSupermana:200,angelGuardingDrainer:290,manaCloseToSamePool:420,faintedCooldownStep:-70,manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:120,immediateWinningCarrier:0}),_d=Un({...jn,manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}),Gd=Un({...jn,manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}),Yi=Un({...fb,regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCloseToSamePool:380,drainerCloseToOwnPool:320,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}),bl=Un({...jn,faintedCooldownStep:-120,spiritCloseToEnemy:230,angelGuardingDrainer:300,manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}),Vd=Un({...bl,faintedCooldownStep:-160,manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220,spiritCloseToEnemy:250,angelGuardingDrainer:320}),Qi=Un({...Yi,useHeuristicFormula:!1,confirmedScore:920,drainerBestManaPath:250,drainerPickupScoreThisTurn:210,manaCarrierScoreThisTurn:290,drainerImmediateThreat:-220,scoreRacePathProgress:165,opponentScoreRacePathProgress:150,scoreRaceMultiPath:60,opponentScoreRaceMultiPath:90,immediateScoreWindow:240,opponentImmediateScoreWindow:220,immediateScoreMultiWindow:80,opponentImmediateScoreMultiWindow:120,spiritActionUtility:56,drainerCloseToMana:360,drainerHoldingMana:430,manaCarrierAtRisk:-285,manaCarrierGuarded:145,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:210,immediateWinningCarrier:520}),Zi=Un({...Qi,hasConsumable:320,spiritActionUtility:72}),da=Un({...Qi,drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300,supermanaRaceControl:30}),Ml=Un({...da,hasConsumable:320,spiritActionUtility:72});function sr(e,n,o,r){let i=new hl(e,r);return mb(e,n,o,r,i)}l(sr,"evaluatePreferabilityWithWeightsAndExactPolicy");function mb(e,n,o,r,i){let a=r?o.useHeuristicFormula:!0,t=o.includeRegularManaMoveWindows&&!a,s=o.includeMatchPointWindow&&!a,u=Math.min(2e4,Math.max(0,ce(o.nextTurnWindowScaleBp))),c=e.board.supermanaBase(),p=Math.max(0,K(Se,e.monsMovesCount)),d=a?void 0:i.exactAnalysis(e),f=d?.colorSummary(n),m=d?.colorSummary(U(n)),S=n===0?e.whiteScore:e.blackScore,h=n===0?e.blackScore:e.whiteScore,y=n===0?K(e.whiteScore,e.blackScore):K(e.blackScore,e.whiteScore),M=n===0?K(e.whitePotionsCount,e.blackPotionsCount):K(e.blackPotionsCount,e.whitePotionsCount),C=B(X(y,o.confirmedScore),X(M,o.hasConsumable));return o.doubleConfirmedScore&&(C=X(C,o.confirmedScore)),C=Sb(e,n,o,i,a,c,p,d,f,m,C),C=yb(e,n,o,i,a,t,f,m,C),hb(e,n,o,i,a,t,s,u,p,f,m,S,h,C)}l(mb,"evaluatePreferabilityWithContext");function Sb(e,n,o,r,i,a,t,s,u,c,p){let d=p,f=l(M=>{d=B(d,M)},"addScore"),m=l((M,C)=>{f(X(M,C))},"addSigned"),S=l((M,C,k)=>{f(Ve(X(M,C),k))},"addSignedRatio"),h=l((M,C,k,b)=>{let w=xd(e.board,M.color,C,i,o.drainerWalkThreatBoolean!==0,r);if(S(k,o.drainerCloseToMana,w.minMana),S(k,o.drainerCloseToOwnPool,eo(C,{kind:"closest-pool",color:M.color})),S(k,o.drainerCloseToSupermana,Cb(C,a)),Od(w)?m(k,o.angelGuardingDrainer):S(k,o.drainerAtRisk,w.riskDanger),b||!i){let I=i?Ld(r.manaPathSnapshot(e.board),M.color,C):s?.colorSummary(M.color).bestDrainerPickup;if(I!==void 0){let D="pathSteps"in I?I.pathSteps:I[0],x="totalMoves"in I?I.totalMoves:B(D,1),W="manaValue"in I?I.manaValue:I[1];S(k,X(o.drainerBestManaPath,W),B(D,1)),M.color===e.activeColor&&x<=t&&m(k,X(o.drainerPickupScoreThisTurn,W))}}if(o.drainerImmediateThreat!==0){let[I,D]=Bd(e.board,M.color,C,r),x=w.angelNearby?D:B(I,D);x>0&&m(k,X(o.drainerImmediateThreat,x))}let O=(o.drainerDangerBoolean!==0||o.drainerWalkThreatBoolean!==0)&&w.exactDangerThreat;o.drainerDangerBoolean!==0&&O&&(m(k,o.drainerDangerBoolean),k===-1&&f(o.opponentDrainerAttackBonus)),o.drainerWalkThreatBoolean!==0&&!O&&w.walkThreat&&m(k,o.drainerWalkThreatBoolean)},"evaluateDrainer"),y=l((M,C,k)=>{let b=kb(e.board,M.color,C,r);S(k,o.spiritCloseToEnemy,b),m(-k,gd(e.board,M,C,o.spiritOnOwnBasePenalty));let w=i?4:6,P,O;if(i)P=Dd(e.board,C),O=0;else{let I=Ed(bo(u),bo(c),M.color,n).spirit;P=I.utility,O=Nd(I,o)}m(k,X(o.spiritActionUtility,Math.min(P,w))),m(k,O)},"evaluateSpirit");for(let[M,C]of e.board.occupied())switch(C.kind){case"mon":{let k=C.mon,b=k.color===n?1:-1;V(k)?(m(b,k.kind===1?o.faintedDrainer:o.faintedMon),m(b,X(o.faintedCooldownStep,k.cooldown))):k.kind===1?h(k,M,b,!0):k.kind===3?y(k,M,b):k.kind===2?S(b,o.angelCloseToFriendlyDrainer,ir(e.board,k.color,M,r)):S(b,o.monCloseToCenter,eo(M,{kind:"center"})),o.attackerCloseToOpponentDrainer!==0&&!V(k)&&(k.kind===0||k.kind===4)&&S(b,o.attackerCloseToOpponentDrainer,ir(e.board,U(k.color),M,r)),ml.has(Z(M))||m(b,o.activeMon);break}case"mon-with-consumable":{let k=C.mon,b=k.color===n?1:-1;m(b,o.hasConsumable),k.kind===1?h(k,M,b,!1):k.kind===3?y(k,M,b):k.kind===2?S(b,o.angelCloseToFriendlyDrainer,ir(e.board,k.color,M,r)):S(b,o.monCloseToCenter,eo(M,{kind:"center"})),o.attackerCloseToOpponentDrainer!==0&&!V(k)&&(k.kind===0||k.kind===4||C.consumable===1)&&S(b,o.attackerCloseToOpponentDrainer,ir(e.board,U(k.color),M,r)),!i&&!ml.has(Z(M))&&m(b,o.activeMon);break}case"mana":{f(Ve(o.manaCloseToSamePool,eo(M,{kind:"closest-pool",color:n})));let k;if(C.mana.kind==="regular"){let b=C.mana.color,w=b===n?1:-1,P=eo(M,{kind:"closest-pool",color:b}),O=ir(e.board,b,M,r),I=ir(e.board,U(b),M,r),D=Math.min(4,Math.max(-4,K(I,O)));k=X(w,B(Ve(o.regularManaToOwnerPool,P),X(o.regularManaDrainerControl,D))),!i&&b===U(n)&&(k=B(k,X(o.opponentManaDenial,-D)))}else{let b=ir(e.board,n,M,r),w=ir(e.board,U(n),M,r),P=Math.min(4,Math.max(-4,K(w,b)));k=B(X(o.supermanaDrainerControl,P),i?0:X(o.supermanaRaceControl,P))}f(k);break}case"mon-with-mana":{let{mon:k,mana:b}=C,w=k.color===n?1:-1,P=eo(M,{kind:"any-closest-pool"}),O=b.kind==="supermana"?o.extraForSupermana:b.color===n?0:o.extraForOpponentsMana;if(m(w,o.drainerHoldingMana),S(w,B(o.monWithManaCloseToAnyPool,O),P),P<=2){let x=b.kind==="supermana"?B(o.manaCarrierOneStepFromPool,o.supermanaCarrierOneStepFromPoolExtra):o.manaCarrierOneStepFromPool;m(w,x);let W=k.color===0?e.whiteScore:e.blackScore;B(W,Pe(b,k.color))>=Ae&&m(w,o.immediateWinningCarrier)}let I=!i&&k.kind===1&&(b.kind==="supermana"||b.color!==k.color),D=xd(e.board,k.color,M,i,o.manaCarrierWalkThreatBoolean!==0||I,r);if(S(w,o.manaCarrierAtRisk,D.riskDanger),Od(D)&&m(w,o.manaCarrierGuarded),!i&&k.kind===1&&I){let x;b.kind==="supermana"?x=Ue(o.supermanaRaceControl,ib):b.color!==k.color?x=Ue(o.opponentManaDenial,sb):x=0,x=Math.min(ub,Math.max(0,x));let W=k.color===0?e.blackScore:e.whiteScore,_=Math.max(0,Ae-lb);if(x>0&&db(D)&&W<=_){let v=Ue(o.confirmedScore,2);m(w,xn(v,x))}}if(k.color===e.activeColor&&P-1<=t&&m(w,o.manaCarrierScoreThisTurn),k.kind===1){S(w,o.drainerCloseToOwnPool,eo(M,{kind:"closest-pool",color:k.color}));let[x,W]=Bd(e.board,k.color,M,r),_=D.angelNearby?W:B(x,W);_>0&&m(w,X(o.drainerImmediateThreat,_));let j=(o.manaCarrierDangerBoolean!==0||o.manaCarrierWalkThreatBoolean!==0)&&D.exactDangerThreat;o.manaCarrierDangerBoolean!==0&&j&&(m(w,o.manaCarrierDangerBoolean),w===-1&&f(o.opponentDrainerAttackBonus)),o.manaCarrierWalkThreatBoolean!==0&&!j&&D.walkThreat&&m(w,o.manaCarrierWalkThreatBoolean)}else if(k.kind===3){m(-w,gd(e.board,k,M,o.spiritOnOwnBasePenalty));let x=i?4:6,W,_;if(i)W=Dd(e.board,M),_=0;else{let v=Ed(bo(u),bo(c),k.color,n).spirit;W=v.utility,_=Nd(v,o)}m(w,X(o.spiritActionUtility,Math.min(W,x))),m(w,_)}!i&&!ml.has(Z(M))&&m(w,o.activeMon);break}case"consumable":break}return d}l(Sb,"scorePreferabilityBoardItems");function yb(e,n,o,r,i,a,t,s,u){let c=u,p=i?Ad(e.board,r,n,!1,a):vd(e.board,r,n,bo(t),a),d=i?Ad(e.board,r,U(n),!1,a):vd(e.board,r,U(n),bo(s),a);return p.bestSteps!==void 0&&(c=B(c,xn(Ve(o.scoreRacePathProgress,Math.max(1,p.bestSteps)),1e4)),i||(c=B(c,xn(Ve(X(o.scoreRaceMultiPath,p.multiPressure),100),1e4)))),d.bestSteps!==void 0&&(c=B(c,-xn(Ve(o.opponentScoreRacePathProgress,Math.max(1,d.bestSteps)),1e4)),i||(c=B(c,-xn(Ve(X(o.opponentScoreRaceMultiPath,d.multiPressure),100),1e4)))),c}l(yb,"scorePreferabilityRaceWindows");function hb(e,n,o,r,i,a,t,s,u,c,p,d,f,m){let S=m;if(e.activeColor===n){let h=i?Id(e.board,r,n,u,!1,a,a&&e.playerCanMoveMana()):qi(e.board,r,n,bo(c),a&&e.playerCanMoveMana());if(S=B(S,xn(X(o.immediateScoreWindow,h.bestScore),1e4)),!i){S=B(S,xn(Ve(X(o.immediateScoreMultiWindow,h.multiPressure),100),1e4));let y=qi(e.board,r,U(n),bo(p),a);S=B(S,-xn(Ve(X(X(o.opponentImmediateScoreWindow,y.bestScore),s),1e4),1e4)),S=B(S,-xn(Ve(X(X(o.opponentImmediateScoreMultiWindow,y.multiPressure),s),1e6),1e4)),t&&(B(d,h.bestScore)>=Ae&&(S=B(S,o.immediateWinningCarrier)),B(f,y.bestScore)>=Ae&&(S=B(S,-o.immediateWinningCarrier)))}}else{let h=i?Id(e.board,r,U(n),u,!1,a,a&&e.playerCanMoveMana()):qi(e.board,r,U(n),bo(p),a&&e.playerCanMoveMana());if(S=B(S,-xn(X(o.opponentImmediateScoreWindow,h.bestScore),1e4)),!i){S=B(S,-xn(Ve(X(o.opponentImmediateScoreMultiWindow,h.multiPressure),100),1e4));let y=qi(e.board,r,n,bo(c),a);S=B(S,xn(Ve(X(X(o.immediateScoreWindow,y.bestScore),s),1e4),1e4)),S=B(S,xn(Ve(X(X(o.immediateScoreMultiWindow,y.multiPressure),s),1e6),1e4)),t&&(B(f,h.bestScore)>=Ae&&(S=B(S,-o.immediateWinningCarrier)),B(d,y.bestScore)>=Ae&&(S=B(S,o.immediateWinningCarrier)))}}return S}l(hb,"scorePreferabilityImmediateWindows");function bo(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}l(bo,"requireExactSummary");function xn(e,n){let o=BigInt(ce(e))*BigInt(ce(n))/10000n;return Number(BigInt.asIntN(32,o))}l(xn,"scaleByBp");function Ed(e,n,o,r){return o===r?e:n}l(Ed,"exactSummaryForScoring");function gd(e,n,o,r){return n.kind===3&&!V(n)&&we(o,e.base(n))?r:0}l(gd,"spiritOnOwnBasePenalty");function bb(e){return{candidates:e.manaEntries.map(n=>({location:n.location,scoreSteps:eo(n.location,{kind:"any-closest-pool"})-1,mana:n.mana})),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}l(bb,"manaPathSnapshot");function vd(e,n,o,r,i){if(!i)return r.scorePathWindow;let t=n.boardSummary(e).regularManaScorePathSteps[yn(o)];return{bestSteps:t===void 0?r.scorePathWindow.bestSteps:r.scorePathWindow.bestSteps===void 0?t:Math.min(t,r.scorePathWindow.bestSteps),multiPressure:r.scorePathWindow.multiPressure}}l(vd,"exactScorePathWindowForContext");function Ad(e,n,o,r,i){let a=n.boardSummary(e),t=[2147483647,2147483647,2147483647];for(let c of a.liveManaCarriers[yn(o)])Sl(t,eo(c.location,{kind:"any-closest-pool"}));if(r){let c=n.manaPathSnapshot(e);for(let p of a.liveDrainerLocations[yn(o)]){let d=Ld(c,o,p);d!==void 0&&Sl(t,B(d[0],1))}}if(i){let c=a.regularManaScorePathSteps[yn(o)];c!==void 0&&Sl(t,c)}let s=t[0]===2147483647?void 0:t[0],u=0;return t[1]!==2147483647&&(u=B(u,Ve(70,Math.max(1,t[1]??1)))),t[2]!==2147483647&&(u=B(u,Ve(40,Math.max(1,t[2]??1)))),{bestSteps:s,multiPressure:u}}l(Ad,"scorePathWindowToAnyPoolForContext");function qi(e,n,o,r,i){if(!i)return r.immediateWindow;let a=n.boardSummary(e).regularManaMoveScores[yn(o)];return{bestScore:Math.max(r.immediateWindow.bestScore,a),multiPressure:r.immediateWindow.multiPressure}}l(qi,"exactImmediateScoreWindowForContext");function Id(e,n,o,r,i,a,t){if(r<=0)return{bestScore:0,multiPressure:0};let s=n.boardSummary(e),u=[0,0,0];for(let c of s.liveManaCarriers[yn(o)])eo(c.location,{kind:"any-closest-pool"})-1<=r&&yl(u,Pe(c.mana,o));if(i){let c=n.manaPathSnapshot(e);for(let p of s.liveDrainerLocations[yn(o)]){let d=0;for(let f of c.candidates){let m=J(p,f.location);B(m,f.scoreSteps)<=r&&(d=Math.max(d,Pe(f.mana,o)))}d>0&&yl(u,d)}}if(a&&t){let c=s.regularManaMoveScores[yn(o)];c>0&&yl(u,c)}return{bestScore:u[0]??0,multiPressure:B(X(u[1]??0,70),X(u[2]??0,35))}}l(Id,"immediateScoreWindowSummaryForContext");function Nd(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),r=0;return o>0&&(r=R(r,Ve(Ue(Math.max(0,n.scoreRacePathProgress),o),4)),r=R(r,Ve(Ue(Math.max(0,n.opponentScoreRacePathProgress),o),6)),r=R(r,Ve(Ue(Math.max(0,n.scoreRaceMultiPath),o),8)),r=R(r,Ve(Ue(Math.max(0,n.opponentScoreRaceMultiPath),o),10))),e.supermanaProgress&&!e.sameTurnScore&&(r=R(R(r,Ue(Math.max(0,n.supermanaRaceControl),3)),Ve(Math.max(0,n.drainerBestManaPath),4))),e.opponentManaProgress&&!e.sameTurnOpponentManaScore&&(r=R(R(R(r,Ue(Math.max(0,n.opponentManaDenial),3)),Ve(Math.max(0,n.drainerBestManaPath),4)),Ve(Math.max(0,n.scoreRacePathProgress),5))),r}l(Nd,"exactSpiritPressureBonus");function Dd(e,n){let o=0;for(let r of go(n)){let i=e.item(r);i!==void 0&&Ro(i)&&(o+=1)}return o}l(Dd,"heuristicSpiritActionUtility");function yn(e){return e===0?0:1}l(yn,"colorSlot");function Sl(e,n){n>=(e[2]??2147483647)||(n<(e[0]??2147483647)?(e[2]=e[1]??2147483647,e[1]=e[0]??2147483647,e[0]=n):n<(e[1]??2147483647)?(e[2]=e[1]??2147483647,e[1]=n):e[2]=n)}l(Sl,"insertLowestStep");function yl(e,n){n<=(e[2]??0)||(n>(e[0]??0)?(e[2]=e[1]??0,e[1]=e[0]??0,e[0]=n):n>(e[1]??0)?(e[2]=e[1]??0,e[1]=n):e[2]=n)}l(yl,"insertTopScore");function Ld(e,n,o){let r;for(let i of e.candidates){let a=J(o,i.location),t=B(a,i.scoreSteps),s=Pe(i.mana,n);if(r===void 0){r=[t,s];continue}let u=K(X(t,3),s),c=K(X(r[0],3),r[1]);(u<c||u===c&&s>r[1])&&(r=[t,s])}return r}l(Ld,"bestDrainerPickupPathWithSnapshot");function Mb(e,n,o,r,i){let a=i.boardSummary(e),t=q,s=q;for(let c of a.manaEntries)t=Math.min(t,J(c.location,o));for(let c of a.dangerSources[yn(U(n))]){if(r){c.heuristicThreat&&(s=Math.min(s,J(c.location,o)));continue}let p=2147483647;if(c.exactActionThreat&&(p=J(c.location,o)),c.exactBombThreat){let d=Math.max(1,J(c.location,o)-2);p=Math.min(p,d)}s=Math.min(s,p)}if(r)for(let c of a.looseConsumableLocations)s=Math.min(s,J(c,o));let u=a.liveAngelLocations[yn(n)].some(c=>J(c,o)===1);return r?[s,t,u]:[Math.max(1,s),Math.max(1,t),u]}l(Mb,"drainerDistancesWithContext");function xd(e,n,o,r,i,a){let[t,s,u]=Mb(e,n,o,r,a),c=r?hd(e,n,o,u):a.canAttackTargetOnBoard(e,U(n),n,o,Se,!0),p=i&&!c&&it(e,a.boardHash(),n,o,u);return{riskDanger:r?Math.max(1,t):c?1:Math.max(1,t),minMana:s,angelNearby:u,exactDangerThreat:c,walkThreat:p}}l(xd,"drainerSafetySnapshotWithContext");function Bd(e,n,o,r){return r===void 0?ul(e,n,o):r.drainerImmediateThreats(e,n,o)}l(Bd,"drainerImmediateThreatsWithContext");function kb(e,n,o,r){let i=q;for(let a of r.boardSummary(e).liveMonLocations[yn(U(n))])i=Math.min(i,J(a,o));return Math.max(1,i)}l(kb,"nearestEnemyMonDistanceWithContext");function ir(e,n,o,r){let i=q;for(let a of r.boardSummary(e).liveDrainerLocations[yn(n)])i=Math.min(i,J(a,o));return Math.max(1,i)}l(ir,"nearestFriendlyDrainerDistanceWithContext");function Cb(e,n){return B(J(e,n),1)}l(Cb,"distanceToLocation");function eo(e,n){let o;switch(n.kind){case"center":o=Math.max(1,Math.abs(qc-e.i));break;case"any-closest-pool":o=Math.max(Math.min(e.i,Math.abs(gt-e.i)),Math.min(e.j,Math.abs(gt-e.j)));break;case"closest-pool":{let r=n.color===0?gt:0;o=Math.max(Math.abs(r-e.i),Math.min(e.j,Math.abs(gt-e.j)));break}}return B(o,1)}l(eo,"distance");var _e=Object.freeze({ProV1:0,CurrentPro:1});function N(e){return e.currentPro??e.turnEngineMode===_e.CurrentPro}l(N,"currentProEnabled");function fa(e,n){let o=e.board.item(e.board.base({kind:3,color:n,cooldown:0})),r=o===void 0?void 0:H(o);return r?.kind===3&&r.color===n&&!V(r)}l(fa,"hasAwakeSpiritOnBase");function dt(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&fa(e,n)}l(dt,"shouldPreferSpiritDevelopment");function Q(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}l(Q,"hasConcreteScoreSurface");function z(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}l(z,"hasProgressSurface");function A(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!Q(e)}l(A,"rootIsUnsafe");function G(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}l(G,"isPlainSpiritDevelopmentRoot");var Hd=8,Tb=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),wb=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function ma(e,n){return e<n?-1:e>n?1:0}l(ma,"compareNumber");function Ud(e,n){let o=l(i=>{switch(i.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}},"tag"),r=ma(o(e),o(n));return r!==0?r:e.kind==="location"&&n.kind==="location"?ma(e.location.i,n.location.i)||ma(e.location.j,n.location.j):e.kind==="modifier"&&n.kind==="modifier"?ma(e.modifier,n.modifier):0}l(Ud,"compareInputs");function Bn(e,n){let o=Math.min(e.length,n.length);for(let r=0;r<o;r+=1){let i=e[r],a=n[r];if(i===void 0||a===void 0)break;let t=Ud(i,a);if(t!==0)return t}return ma(e.length,n.length)}l(Bn,"compareInputChains");function jd(e,n,o,r){let i=e.cloneForSimulation(),a=i.applyAndAddResultingEvents(o);r.push({inputs:n.map(on),game:i,events:a})}l(jd,"appendAppliedTransition");function kl(e,n,o,r,i){if(T()){o.length=0;return}if(o.length>=r||n.length>Hd)return;let a=e.processInputWithStartOptions(n,!0,!1,i);switch(a.kind){case"invalid-input":return;case"events":{jd(e,n,a.events,o);return}case"locations-to-start-from":for(let t of a.locations){if(o.length>=r)break;n.push({kind:"location",location:{i:t.i,j:t.j}}),kl(e,n,o,r,i),n.pop()}return;case"next-input-options":for(let t of a.nextInputs){if(o.length>=r)break;n.push(on(t.input)),kl(e,n,o,r,i),n.pop()}}}l(kl,"collectLegalTransitions");function Kn(e,n,o=kn){if(T()||n<=0)return[];let r=[];return kl(e.cloneForSimulation(),[],r,n,o),Y()?[]:(r.sort((i,a)=>Bn(i.inputs,a.inputs)),r)}l(Kn,"enumerateLegalTransitions");function Kd(e){let n=new Uint8Array(Me);for(let o of e)n[Z(o)]=1;return n}l(Kd,"locationMask");function Rb(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[Z(o.location)]===1}l(Rb,"startsAtMaskedLocation");function Cl(e,n,o,r){if(r.length===0)return Kn(e,n,o);let i=Kd(r),a=Math.max(Math.floor(n/2),Math.max(0,n-60)),t=Math.max(0,n-a),s=[],u=[];for(let c of Kn(e,n,o))if(Rb(c,i)?s.length<a&&s.push(c):u.length<t&&u.push(c),s.length>=a&&(t===0||u.length>=t))break;return[...s,...u]}l(Cl,"enumerateLegalTransitionsWithPriority");function qd(e,n,o,r,i,a){if(T()){o.length=0;return}if(o.length>=r||n.length>Hd)return;let t=e.processInputWithStartOptions(n,!0,!1,i);if(t.kind==="invalid-input")return;if(t.kind==="events"){if(a!==void 0&&n.length===0)return;jd(e,n,t.events,o);return}let s=t.kind==="locations-to-start-from"?t.locations.map(u=>({kind:"location",location:{i:u.i,j:u.j}})):t.nextInputs.map(u=>on(u.input));s.sort(Ud);for(let u of s){if(o.length>=r)break;n.length===0&&a!==void 0&&(u.kind!=="location"||a[Z(u.location)]!==1)||(n.push(u),qd(e,n,o,r,i,a),n.pop())}}l(qd,"collectLexicographicBounded");function Ji(e,n,o=kn,r){if(n<=0||T())return[];let i=r===void 0?void 0:Kd(r),a=[];return qd(e.cloneForSimulation(),[],a,n,o,i),T()?[]:a}l(Ji,"enumerateLegalTransitionsLexicographicBounded");function Ar(e,n){return Je(e,n)?.game}l(Ar,"applyInputsForSearch");function Je(e,n){let o=e.cloneForSimulation(),r=o.processInput(n,!1,!1);return r.kind==="events"?{game:o,events:r.events}:void 0}l(Je,"applyInputsForSearchWithEvents");function zd(e,n){return e.some(o=>n.includes(o.kind))}l(zd,"hasEventKind");function Sa(e){return zd(e,Tb)}l(Sa,"hasMaterialEvent");function $d(e){return zd(e,wb)}l($d,"isQuiescenceTacticalTransition");var Ma=4096,ns=256,ls=Number.MAX_SAFE_INTEGER,bf=Oe(342167472,1939669891),Mf=Oe(256,435),Pb=Oe(4294967295,4294967295),Ob=Oe(4294967295,4294967294),ka=(o=>(o[o.ProV1=0]="ProV1",o[o.CurrentPro=1]="CurrentPro",o))(ka||{});Object.freeze(ka);var Dr=(u=>(u[u.ImmediateScore=0]="ImmediateScore",u[u.DenyOpponentWindow=1]="DenyOpponentWindow",u[u.DrainerKill=2]="DrainerKill",u[u.SafeSupermanaProgress=3]="SafeSupermanaProgress",u[u.SafeOpponentManaProgress=4]="SafeOpponentManaProgress",u[u.DrainerSafetyRecovery=5]="DrainerSafetyRecovery",u[u.SpiritImpact=6]="SpiritImpact",u[u.ManaTempo=7]="ManaTempo",u))(Dr||{});Object.freeze(Dr);var Bl=class Bl{constructor(n={}){Ce(this,"winState");Ce(this,"avoidImmediateLoss");Ce(this,"scoreDelta");Ce(this,"denyGain");Ce(this,"drainerAttack");Ce(this,"drainerSafety");Ce(this,"evalScore");this.winState=n.winState??0,this.avoidImmediateLoss=n.avoidImmediateLoss??0,this.scoreDelta=n.scoreDelta??0,this.denyGain=n.denyGain??0,this.drainerAttack=n.drainerAttack??0,this.drainerSafety=n.drainerSafety??0,this.evalScore=n.evalScore??0}hasNonnegativeDenyGain(){return this.denyGain>=0}supportsTemporaryRiskRecovery(){return this.drainerSafety>0||this.avoidImmediateLoss>0}strictlyDominatesOverrideAxes(n){let o=this.winState>=n.winState&&this.avoidImmediateLoss>=n.avoidImmediateLoss&&this.scoreDelta>=n.scoreDelta&&this.denyGain>=n.denyGain&&this.drainerAttack>=n.drainerAttack&&this.drainerSafety>=n.drainerSafety,r=this.winState>n.winState||this.avoidImmediateLoss>n.avoidImmediateLoss||this.scoreDelta>n.scoreDelta||this.denyGain>n.denyGain||this.drainerAttack>n.drainerAttack||this.drainerSafety>n.drainerSafety;return o&&r}passesOverrideGuard(n){if(!this.strictlyDominatesOverrideAxes(n))return!1;let o=this.winState>n.winState||this.avoidImmediateLoss>n.avoidImmediateLoss||this.denyGain>n.denyGain||this.drainerAttack>n.drainerAttack||this.drainerSafety>n.drainerSafety,r=this.scoreDelta>=n.scoreDelta+220;return this.evalScore+192>=n.evalScore||o||r}supportsFamilyFallback(n){return Wn(this,n)>=0&&this.evalScore+192>=n.evalScore}improvesNonScoreOverrideAxes(n){return this.winState>n.winState||this.avoidImmediateLoss>n.avoidImmediateLoss||this.denyGain>n.denyGain||this.drainerAttack>n.drainerAttack||this.drainerSafety>n.drainerSafety}hasScoreDeltaForce(n,o){return this.scoreDelta>=n.scoreDelta+o}supportsPrimaryAxesEvalTolerance(n,o){return oe(this,n)>=0&&this.evalScore+o>=n.evalScore}};l(Bl,"TurnEngineUtility");var an=Bl,kf=(u=>(u[u.ImmediateScore=0]="ImmediateScore",u[u.TacticalDeny=1]="TacticalDeny",u[u.DrainerKill=2]="DrainerKill",u[u.SafeSupermanaProgress=3]="SafeSupermanaProgress",u[u.SafeOpponentManaProgress=4]="SafeOpponentManaProgress",u[u.DrainerSafetyRecovery=5]="DrainerSafetyRecovery",u[u.SpiritImpact=6]="SpiritImpact",u[u.ManaTempo=7]="ManaTempo",u))(kf||{});Object.freeze(kf);var cs=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0}),ya=new ke(Ma),Rl=new ke(Ma),Pl=new ke(Ma),os=new ke(Ma),Ol=new Vn(Ma),Xd=new WeakMap,Yd=1;function nn(e,n){return e<n?-1:e>n?1:0}l(nn,"compareNumber");function ps(e,n){let o=Math.min(e.length,n.length);for(let r=0;r<o;r+=1){let i=nn(e[r]??0,n[r]??0);if(i!==0)return i}return nn(e.length,n.length)}l(ps,"compareTuples");function ds(e){switch(e.kind){case"walk":case"safety-retreat":return{kind:e.kind,actor:{...e.actor},to:{...e.to}};case"attack":case"bomb":return{kind:e.kind,actor:{...e.actor},target:{...e.target}};case"spirit-shift":return{kind:e.kind,actor:{...e.actor},target:{...e.target},destination:{...e.destination}};case"move-mana":return{kind:e.kind,from:{...e.from},to:{...e.to}};case"score-carry":return{kind:e.kind,actor:{...e.actor},wanted:e.wanted.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.wanted.color},step:{...e.step}}}}l(ds,"cloneAction");function Cf(e){return{actions:e.actions.map(ds),compiledChunks:e.compiledChunks.map(n=>n.map(on)),endGame:e.endGame.cloneForSimulation(),utility:new an(e.utility),headUtility:new an(e.headUtility),headFamily:e.headFamily,goalFamily:e.goalFamily,packageMeta:{...e.packageMeta}}}l(Cf,"clonePlan");function Ca(e,n){let o=nn(e.length,n.length);if(o!==0)return o;for(let r=0;r<e.length;r+=1){let i=Bn(e[r]??[],n[r]??[]);if(i!==0)return i}return 0}l(Ca,"compareChunks");function rs(e){switch(e.kind){case"walk":return[0,e.actor,e.to,void 0];case"attack":return[1,e.actor,e.target,void 0];case"spirit-shift":return[2,e.actor,e.target,e.destination];case"bomb":return[3,e.actor,e.target,void 0];case"move-mana":return[4,e.from,e.to,void 0];case"score-carry":return[5,e.actor,e.step,void 0];case"safety-retreat":return[6,e.actor,e.to,void 0]}}l(rs,"actionKeyTuple");function Qd(e){let[n,o,r,i]=rs(e);return`${n}:${Z(o)}:${r===void 0?-1:Z(r)}:${i===void 0?-2:Z(i)}`}l(Qd,"actionKey");function Tf(e,n){let o=nn(e.i,n.i);return o!==0?o:nn(e.j,n.j)}l(Tf,"compareLocations");function Zd(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:Tf(e,n)}l(Zd,"compareOptionalLocations");function Eb(e){let n=Math.max(0,Math.trunc(e));if(!Number.isFinite(n))throw new RangeError("turn engine config values must be finite");let o=Math.floor(n/4294967296),r=n-o*4294967296;return Oe(o,r)}l(Eb,"hash64FromNonnegativeInteger");function fs(e,n){let o=rs(e),r=rs(n);return nn(o[0],r[0])||Tf(o[1],r[1])||Zd(o[2],r[2])||Zd(o[3],r[3])}l(fs,"compareActionKeys");function wf(e){let n=Xd.get(e.scoringWeights);n===void 0&&(n=Yd,Yd+=1,Xd.set(e.scoringWeights,n));let o=bf,r=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),e.mode===0?1:2,n];for(let i of r)o=Hn(dn(o,Eb(i)),Mf);return o}l(wf,"configFingerprint");function gl(e,n,o){return{stateHash:se(e),mode:n,configFingerprint:wf(o)}}l(gl,"cacheKeyForMode");function vl(e,n){return gl(e,n.mode,n)}l(vl,"cacheKey");function gb(e,n,o,r){let i=se(n);return{stateHash:se(e),configFingerprint:wf(r),startTag:i.hi*2+o,startLow:i.lo}}l(gb,"utilityCacheKey");function Rf(e,n){return e.get(n.stateHash,n.mode,n.configFingerprint)}l(Rf,"turnCacheGet");function vb(e,n){return e.has(n.stateHash,n.mode,n.configFingerprint)}l(vb,"turnCacheHas");function Al(e,n,o){e.set(n.stateHash,o,n.mode,n.configFingerprint)}l(Al,"turnCacheSet");function Ab(e,n){e.add(n.stateHash,n.mode,n.configFingerprint)}l(Ab,"turnCacheAdd");function Pf(e,n){e.delete(n.stateHash,n.mode,n.configFingerprint)}l(Pf,"turnCacheDelete");function ms(){ya.clear(),Rl.clear(),Pl.clear(),os.clear(),Ol.clear()}l(ms,"clearTurnEnginePlanCache");function Ib(e){return{stateHash:se(e)}}l(Ib,"turnSnapshotFromGame");function Wn(e,n){return ps([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety,e.evalScore],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety,n.evalScore])}l(Wn,"compareTurnEngineUtilities");function oe(e,n){return ps([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety])}l(oe,"compareUtilityPrimaryAxes");function ko(e){switch(e){case 0:return 0;case 1:return 1;case 2:return 2;case 5:return 3;case 6:return 4;case 3:return 5;case 4:return 6;case 7:return 7}}l(ko,"familyRank");function Jd(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}l(Jd,"headOpeningRiskClass");function Nb(e,n,o){return(e===3||e===4)&&Jd(n)!==Jd(o)}l(Nb,"shouldCompareHeadOpeningUtility");function Db(e,n,o,r,i,a){let t=oe(e,r);return t!==0||o===a&&Nb(o,n,i)&&(t=oe(n,i),t!==0||(t=nn(n.evalScore,i.evalScore),t!==0))?t:nn(e.evalScore,r.evalScore)}l(Db,"comparePlanRank");function xb(e,n){return ps([+(e.scoreGain>0),e.scoreGain,+(e.denyGain>0),e.denyGain,+(e.drainerSafetyDelta>0),e.drainerSafetyDelta,Number(e.endsNonnegativeDrainerSafety),+!e.spiritOnlySetup,-e.opponentImmediateWindowAfter],[+(n.scoreGain>0),n.scoreGain,+(n.denyGain>0),n.denyGain,+(n.drainerSafetyDelta>0),n.drainerSafetyDelta,Number(n.endsNonnegativeDrainerSafety),+!n.spiritOnlySetup,-n.opponentImmediateWindowAfter])}l(xb,"comparePackageMeta");function Co(e,n){let o=Db(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=xb(e.packageMeta,n.packageMeta),o!==0)||(o=nn(ko(n.goalFamily),ko(e.goalFamily)),o!==0)||(o=nn(ko(n.headFamily),ko(e.headFamily)),o!==0)?o:(o=nn(n.actions.length,e.actions.length),o!==0?o:Ca(e.compiledChunks,n.compiledChunks))}l(Co,"turnEngineComparePlans");function Of(e,n){if(T())return;let o=Rf(os,n);if(o===void 0)return;let r=o.compiledChunks[0],i=r!==void 0&&Ar(e,r)!==void 0;if(!T()){if(!i){ye()&&Pf(os,n);return}return Cf(o)}}l(Of,"cachedBestPlanIfLegal");function Bb(e,n){if(T())return;let o=vl(e,n),r=Rf(ya,o);if(r===void 0)return;let i=Ar(e,r)!==void 0;if(!T()){if(!i){ye()&&Pf(ya,o);return}return r.map(on)}}l(Bb,"cachedStepIfLegal");function Ss(e,n){if(T())return;let o=Bb(e,n);return T()?void 0:o}l(Ss,"turnEngineCachedStep");function Ef(e,n,o,r){T()||!ye()||Al(ya,gl(e,n,o),r.map(on))}l(Ef,"turnEngineStoreCachedStep");function ro(e,n,o){if(T()||e.activeColor!==n)return;let r=vl(e,o);if(vb(Ol,r))return;let i=Of(e,r);if(i!==void 0)return T()?void 0:i;let a=xf(e,n,o);if(!T())switch(a.status){case"no-plan":ye()&&Ab(Ol,r);return;case"budget-exceeded":return;case"ok":return ye()?(Al(os,r,Cf(a.plan)),a.plan):void 0}}l(ro,"turnEngineCandidatePlan");function gf(e,n,o){if(T()||e.activeColor!==n)return;let r=xf(e,n,o);return T()||r.status!=="ok"?void 0:r.plan}l(gf,"turnEngineCandidatePlanLive");function Il(e){let n=new Map;return e.forEach((o,r)=>{let i=un(o);n.has(i)||n.set(i,r)}),n}l(Il,"allowedRankMap");function Wb(e,n,o,r,i){let a=n.compiledChunks[0],t=a===void 0?void 0:Ar(e,a);return{rank:r,allowedLength:i,firstStepOpponentImmediateLoss:t!==void 0&&no(t,o),firstStepDrainerSafety:t===void 0?Math.trunc(-2147483648/4):Ge(t.board,o)}}l(Wb,"allowedHeadSelectionMeta");function ef(e,n){return R(e.evalScore,Ue(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}l(ef,"allowedHeadRankAdjustedEval");function vf(e,n,o,r){let i=oe(e.utility,o.utility);return i!==0||(i=ps([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!r.firstStepOpponentImmediateLoss,r.firstStepDrainerSafety]),i!==0)||(i=nn(ef(e.utility,n),ef(o.utility,r)),i!==0)?i:(i=Co(e,o),i!==0?i:nn(r.rank,n.rank))}l(vf,"compareAllowedHeadPlans");function Fb(e,n,o,r,i){let a=Il(i),t;for(let s of r){if(T())return;let u=s.compiledChunks[0];if(u===void 0)continue;let c=a.get(un(u));if(c===void 0)continue;if(s.utility=wa(e,s,n,o),Y())return;let p=Wb(e,s,n,c,i.length);(t===void 0||vf(s,p,t.plan,t.meta)>0)&&(t={plan:s,meta:p})}return t?.plan}l(Fb,"bestPlanFromAllowedHeads");function _b(e,n,o,r){if(T())return{status:"budget-exceeded"};let i=as(e,n,o,Math.max(o.ownSeedCap,1),Math.max(o.ownBeam,1),Math.max(o.stepCap,1),Math.max(o.expansionCap,1));if(T())return{status:"budget-exceeded"};if(i.status==="budget-exceeded")return i;if(i.status==="ok"){let t=Fb(e,n,o,i.plans,r);if(T())return{status:"budget-exceeded"};if(t!==void 0)return{status:"ok",plan:t}}let a=Xb(e,n,o,r);return T()?{status:"budget-exceeded"}:a===void 0?{status:"no-plan"}:{status:"ok",plan:a}}l(_b,"buildBestPlanFromAllowedHeads");function Nl(e,n,o,r){if(T()||e.activeColor!==n||r.length===0)return;let i=Il(r),a=Of(e,vl(e,o)),t=a?.compiledChunks[0];if(t!==void 0&&i.has(un(t)))return a;let s=_b(e,n,o,r);return T()||s.status!=="ok"?void 0:s.plan}l(Nl,"turnEngineCandidatePlanFromAllowedHeads");function Af(e,n,o,r,i){if(T()||e.activeColor!==n||i.length===0)return;let a=new Set(i.map(un)),t=Ss(e,r);if(t!==void 0&&a.has(un(t)))return t;let s=Nl(e,n,r,i);if(!(s===void 0||T())&&(Nf(e,n,o,s,r),!Y()))return s.compiledChunks[0]?.map(on)}l(Af,"turnEngineNextInputsFromAllowedHeads");function If(e,n,o,r,i){T()||Nf(e,n,o,r,i)}l(If,"turnEngineCommitPlan");function Nf(e,n,o,r,i){if(T()||r.compiledChunks.length===0)return;let a=e.cloneForSimulation(),t=e.activeColor;for(let s=0;s<r.compiledChunks.length;s+=1){if(T())return;let u=r.compiledChunks[s];if(u===void 0)continue;if(s>0&&o===1){let p=ro(a,n,i);if(p?.compiledChunks[0]===void 0||T()||Bn(p.compiledChunks[0],u)!==0)break}if(!ye())return;Al(ya,gl(a,o,i),u.map(on));let c=Ar(a,u);if(c?.activeColor!==t)break;a=c}}l(Nf,"registerPlanContinuations");function Ta(e,n,o,r){if(T())return new an;let i=tn(e,n,o,r);return T()?new an:i}l(Ta,"turnEngineEvaluateStateUtility");function ys(e,n,o,r){if(T())return new an;let i=wa(e,n,o,r);return T()?new an:i}l(ys,"turnEngineEvaluatePlanWithReplies");function ha(e,n){if(T())return es();let o=se(e),r=Rl.get(o,n);if(r!==void 0)return T()?es():r;let i=ra(e,o);if(T())return es();let a=ta(e,n,o);if(T())return es();let t={opportunity:a,strategic:i.colorSummary(n),opponentImmediateWindow:i.colorSummary(U(n)).immediateWindow.bestScore};return ye()&&Rl.set(o,t,n),t}l(ha,"turnOracleContext");function es(){return{opportunity:Pr(),strategic:Io(),opponentImmediateWindow:0}}l(es,"emptyOracleContext");function Df(e,n,o){if(T())return 0;let r=Rd(e,n,o);return T()?0:r}l(Df,"activeTurnScoreWindowWithSearchHash");function ts(e,n){return Df(e,n,se(e))}l(ts,"activeTurnScoreWindow");function ur(e,n){return n===0?e.whiteScore:e.blackScore}l(ur,"scoreForColor");function Gb(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}l(Gb,"winnerState");function no(e,n){let o=U(n);if(e.winnerColor()!==void 0||e.activeColor!==o)return!1;let r=L(Ae,ur(e,o));return r<=0||ts(e,o)>=r}l(no,"opponentCanWinImmediately");function Ge(e,n){return ll(e,rn(e),n)}l(Ge,"ownDrainerSafetyScore");function qn(e,n){for(let[o,r]of e.occupied()){let i=H(r);if(i?.color===n&&i.kind===1&&!V(i))return o}}l(qn,"findAwakeDrainerLocation");function nf(e,n,o){let r=qn(e,n);if(r===void 0)return!1;let i=e.item(r);return i?.kind==="mon-with-mana"&&je(i.mana,o)&&ea(e,n,r)}l(nf,"ownDrainerCarriesSafeMana");function tn(e,n,o,r){if(T())return new an;let i=gb(e,n,o,r),a=Pl.get(i.stateHash,i.startTag,i.configFingerprint,i.startLow);if(a!==void 0)return T()?new an:a;let t=ur(e,o),s=ur(n,o),u=L(t,s),c=ha(e,o);if(Y())return new an;let p=c.strategic.scorePathWindow.bestSteps,d=p===void 0?0:Ue(Math.max(q*3-p,0),22),f=R(Ue(c.strategic.immediateWindow.bestScore,110),Ue(c.strategic.immediateWindow.multiPressure,18)),m={kind:"supermana"},S={kind:"regular",color:U(o)},h=nf(e.board,o,m)?380:0,y=nf(e.board,o,S)?300:0,M=U(o),C=ts(n,M);if(Y())return new an;let k=e.activeColor===M?ts(e,M):c.opponentImmediateWindow;if(Y())return new an;let b=L(C,k),w=Ge(e.board,o),P=w<0?Ue(Math.min(Math.abs(w),2147483647),900):0,O=L(Ae,ur(n,M)),I=L(Ae,ur(e,M)),D=O>0&&C>=O&&(I<=0||k<I),x=sr(e,o,r.scoringWeights,!1);if(T())return new an;let W=new an({winState:Gb(e,o),avoidImmediateLoss:no(e,o)?-1:1,scoreDelta:L(R(R(R(R(Ue(u,2400),d),f),h),y),P),denyGain:R(Ue(b,220),D?1500:0),drainerAttack:qn(e.board,U(o))===void 0?1:0,drainerSafety:w,evalScore:x});return ye()&&Pl.set(i.stateHash,W,i.startTag,i.configFingerprint,i.startLow),W}l(tn,"evaluateStateUtility");function ba(e,n,o,r,i,a){let t=tn(n,e,o,a),s=(()=>{switch(r){case 0:return 1e3;case 1:return 960;case 2:return 920;case 5:return 860;case 6:return 820;case 3:return 760;case 4:return 720;case 7:return 560}})();return t.winState*1e7+t.avoidImmediateLoss*5e6+t.scoreDelta+t.denyGain+t.drainerAttack*3500+t.drainerSafety*2200+Math.trunc(t.evalScore/8)+s*2e3-i*350}l(ba,"quickOrderScore");function xf(e,n,o){if(T())return{status:"budget-exceeded"};let r=as(e,n,o,Math.max(o.ownSeedCap,1),Math.max(o.ownBeam,1),Math.max(o.stepCap,1),Math.max(o.expansionCap,1));if(T())return{status:"budget-exceeded"};if(r.status==="budget-exceeded")return r;let i;if(r.status==="ok")i=r.plans;else{let t=$b(e,n,o);return T()?{status:"budget-exceeded"}:t===void 0?{status:"no-plan"}:{status:"ok",plan:t}}if(o.mode===1&&i.length>1){i.sort((p,d)=>-Co(p,d));let t=Math.min(i.length,Math.min(Math.max(Math.max(o.ownBeam,1)*2,6),12)),s=o.ownBeam>=4?2:1,u=new Map,c=[];for(let p of i){let d=`${un(p.compiledChunks[0]??[])}:${p.headFamily}:${p.goalFamily}`,f=u.get(d)??0;if(!(f>=s)&&(u.set(d,f+1),c.push(p),c.length>=t))break}i=c}let a;for(let t of i){if(T())return{status:"budget-exceeded"};if(t.utility=wa(e,t,n,o),Y())return{status:"budget-exceeded"};(a===void 0||Co(t,a)>0)&&(a=t)}return T()?{status:"budget-exceeded"}:a===void 0?{status:"no-plan"}:{status:"ok",plan:a}}l(xf,"buildBestPlan");function as(e,n,o,r,i,a,t){if(T())return{status:"budget-exceeded"};let s=o.mode===1?qb(e,n,o,r,i,Math.min(a,Wf(o)),t):zb(e,n,o,r,i,a,t);return T()?{status:"budget-exceeded"}:s}l(as,"generatePlansForMode");function Bf(e){return Math.min(Math.max(e.stepCap,1),6)}l(Bf,"bundleChunkCapForConfig");function Wf(e){return Math.min(Math.max(e.stepCap,1),4)}l(Wf,"bundlePlanCapForConfig");function Ff(e,n){return ko(n)<ko(e)?n:e}l(Ff,"mergePlanFamily");function Vb(e,n,o){if(o===n||o===e)return!0;switch(e){case 0:return o===0||o===5||o===3||o===4;case 1:case 2:return o===0||o===1||o===2||o===5||o===3||o===4;case 5:return o===0||o===5||o===3||o===4||o===7;case 6:return o===0||o===1||o===6||o===3||o===4||o===5;case 3:case 4:return o===0||o===5||o===3||o===4||o===1||o===6;case 7:return o===0||o===5||o===3||o===4||o===6||o===7}}l(Vb,"macroFollowupFamilyAllowed");function El(e,n,o){let r=0;return o===n&&(r+=420),o===e&&(r+=220),o===0&&(r+=640),e===6&&(o===6||o===0||o===3||o===4)&&(r+=180),(e===3||e===4)&&(o===3||o===4||o===0)&&(r+=180),e===5&&(o===5||o===3||o===4||o===0)&&(r+=160),r}l(El,"macroFollowupFamilyBonus");function _f(e,n){return[0,1,2,5,6,3,4,7].filter(o=>Vb(e,n,o))}l(_f,"macroFollowupFamilies");function Lb(e,n,o,r,i,a){let t=ha(e,n),s=t.opportunity.opponentCanWinImmediately||t.opportunity.delta.drainerSafety<0,u=new Set(a.map(St)),c=Dl(e,n,o,Math.max(Math.max(o.ownSeedCap,o.perNodeFamilyCap*3),8),_f(r,i)).filter(p=>!u.has(St(p.action)));return c.sort((p,d)=>{let f=nn(ss(d,s)+El(r,i,d.family),ss(p,s)+El(r,i,p.family));return f!==0?f:fs(p.action,d.action)}),c.slice(0,Math.max(Math.max(o.perNodeFamilyCap,1)*2,4))}l(Lb,"macroFollowupSeedCandidates");function of(e,n){let o=q*3;return Math.max((e??o)-(n??o),0)}l(of,"progressStepGain");function rf(e,n,o,r){if(T())return tf();let i=ha(n,o);return Y()?tf():{sameTurnScoreWindowGain:Math.max(i.strategic.immediateWindow.bestScore-r.strategic.immediateWindow.bestScore,0),spiritGain:Math.max(i.strategic.spirit.nextTurnSetupGain-r.strategic.spirit.nextTurnSetupGain,i.strategic.spirit.utility-r.strategic.spirit.utility,0),opponentWindowDenyGain:Math.max(r.opponentImmediateWindow-i.opponentImmediateWindow,0),drainerAttack:i.opportunity.delta.drainerAttackAvailable,drainerSafetyDelta:Ge(n.board,o)-Ge(e.board,o),supermanaProgressGain:of(r.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:of(r.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}l(rf,"macroOpportunityDelta");function tf(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}l(tf,"emptyOpportunityDelta");function af(e,n,o,r,i,a,t){return R(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(ba(e,n,o,r,i,t)/1024))))}l(af,"macroPriorityFromState");function ft(e,n){return Oi(Hn(dn(e,n),Mf),11)}l(ft,"macroSignatureMix");function Hb(e){let n=bf;for(let o of e){let[r,i,a,t]=rs(o);n=ft(n,Ln(r)),n=ft(n,Ln(Z(i))),n=ft(n,a===void 0?Pb:Ln(Z(a))),n=ft(n,t===void 0?Ob:Ln(Z(t)))}return n}l(Hb,"macroSignatureForActions");function Ub(e,n){return ft(ft(e,n.endSnapshot.stateHash),n.signature)}l(Ub,"macroPlanSignature");function jb(e,n,o,r){if(T())return;let i=ha(e,n);if(Y())return;let a=pf(e,n,r.action,o);if(a===void 0||T())return;let t=a[0],s=tn(t,e,n,o);if(Y())return;let u=[r.action],c=[a[1]],p=r.family,d=new Vn(ls);for(d.add(se(e)),d.add(se(t));t.activeColor===n&&t.winnerColor()===void 0&&c.length<Bf(o);){if(T())return;let S=ha(t,n);if(Y())return;let h=tn(t,e,n,o);if(Y())return;let y=S.opportunity.delta.drainerSafety<0||h.drainerSafety<0||Ge(t.board,n)<0,M;for(let C of Lb(t,n,o,r.family,p,u)){if(T())return;let k=pf(t,n,C.action,o);if(k===void 0||T())continue;let[b,w]=k,P=se(b);if(d.has(P))continue;let O=rf(t,b,n,S),I=Ff(p,C.family),D=tn(b,e,n,o);if(Y())return;let x=O.sameTurnScoreWindowGain+O.spiritGain+O.opponentWindowDenyGain+Math.max(O.drainerSafetyDelta,0)+O.supermanaProgressGain+O.opponentManaProgressGain+(O.drainerAttack?2:0),W=y&&(C.family===5||C.family===0||C.family===3||C.family===4);if(x<=0&&Wn(D,h)<=0&&b.activeColor===n&&!W)continue;let _=y?(()=>{switch(C.family){case 5:return 960;case 0:return 820;case 3:case 4:return 360;case 1:case 2:return 220;case 6:case 7:return 0}})():0,v=af(e,b,n,I,c.length+1,C.priority+El(r.family,p,C.family),o)+_+O.sameTurnScoreWindowGain*280+O.spiritGain*220+O.opponentWindowDenyGain*240+Math.max(O.drainerSafetyDelta,0)*200+O.supermanaProgressGain*120+O.opponentManaProgressGain*112+(O.drainerAttack?820:0);(M===void 0||v>M.score||v===M.score&&ko(I)<ko(M.goalFamily))&&(M={score:v,opportunity:C,after:b,chunk:w,goalFamily:I})}if(M===void 0)break;u.push(M.opportunity.action),c.push(M.chunk),p=M.goalFamily,t=M.after,d.add(se(t))}if(T())return;let f=Ib(t),m=rf(e,t,n,i);if(!Y())return{headFamily:r.family,goalFamily:p,priority:af(e,t,n,p,c.length,r.priority,o),delta:m,actions:u,compiledChunks:c,endGame:t.cloneForSimulation(),endSnapshot:f,headUtility:s,signature:Hb(u)}}l(jb,"buildMacroFromHeadOpportunity");function sf(e,n,o,r,i){if(T())return[];let a=[],t=new Vn(ls),s=Dl(e,n,o,Math.max(Math.max(r,o.perNodeFamilyCap*3),8),i);if(T())return[];for(let u of s){if(T())return[];let c=jb(e,n,o,u);if(c===void 0){if(Y())return[];continue}if(!t.has(c.endSnapshot.stateHash,0,c.signature)&&(t.add(c.endSnapshot.stateHash,0,c.signature),a.push(c),a.length>=Math.max(r,1)))break}return a.sort((u,c)=>{let p=l(m=>m.priority+m.delta.sameTurnScoreWindowGain*280+m.delta.spiritGain*220+m.delta.opponentWindowDenyGain*240+m.delta.drainerSafetyDelta*220+m.delta.supermanaProgressGain*120+m.delta.opponentManaProgressGain*112+(m.delta.drainerAttack?820:0)+(Bf(o)-m.compiledChunks.length)*8,"score"),d=nn(p(c),p(u));if(d!==0)return d;let f=nn(ko(u.goalFamily),ko(c.goalFamily));return f!==0?f:Ca(u.compiledChunks,c.compiledChunks)}),T()?[]:a.slice(0,Math.max(r,1))}l(sf,"discoverMacroOpportunities");function Kb(e,n,o,r){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.cloneForSimulation(),utility:tn(n.game,e,o,r),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:cs}}l(Kb,"macroNodeToPlan");function qb(e,n,o,r,i,a,t){if(T())return{status:"budget-exceeded"};let s=0,u=!1,c=Math.min(Math.max(a,1),Wf(o)),p=sf(e,n,o,r);if(T())return{status:"budget-exceeded"};if(p.length===0)return{status:"no-plan"};let d=new ke(ls),f=[];for(let h of p){if(T())return{status:"budget-exceeded"};if(s+=1,s>t){u=!0;break}let y=ba(e,h.endGame,n,h.goalFamily,h.compiledChunks.length,o);if(Y())return{status:"budget-exceeded"};let M=d.get(h.endSnapshot.stateHash,0,h.signature);M!==void 0&&y<=M||(d.set(h.endSnapshot.stateHash,y,0,h.signature),f.push({order:y,node:{game:h.endGame,actions:h.actions,compiledChunks:h.compiledChunks,headUtility:h.headUtility,headFamily:h.headFamily,goalFamily:h.goalFamily,signature:h.signature}}))}if(f.length===0)return{status:u?"budget-exceeded":"no-plan"};f.sort(Tl),f=f.slice(0,Math.max(i,1));let m=[];for(let h=1;h<c;h+=1){if(T())return{status:"budget-exceeded"};let y=[],M=!1,C=!1;for(let k of f){let b=k.node;if(T())return{status:"budget-exceeded"};if(b.game.winnerColor()!==void 0||b.game.activeColor!==n){m.push(b);continue}let w=sf(b.game,n,o,r,_f(b.headFamily,b.goalFamily));if(T())return{status:"budget-exceeded"};if(w.length===0){m.push(b);continue}let P=!1;for(let O of w){if(T())return{status:"budget-exceeded"};if(s+=1,s>t){m.push(b),u=!0,C=!0;break}let I=[...b.actions,...O.actions],D=[...b.compiledChunks,...O.compiledChunks],x=Ff(b.goalFamily,O.goalFamily),W=Ub(b.signature,O),_=ba(e,O.endGame,n,x,D.length,o);if(Y())return{status:"budget-exceeded"};let v=d.get(O.endSnapshot.stateHash,0,W);v!==void 0&&_<=v||(d.set(O.endSnapshot.stateHash,_,0,W),y.push({order:_,node:{game:O.endGame,actions:I,compiledChunks:D,headUtility:b.headUtility,headFamily:b.headFamily,goalFamily:x,signature:W}}),M=!0,P=!0)}if(C)break;P||m.push(b)}if(C){y.sort(Tl),f=y.slice(0,Math.max(i,1));break}if(!M||y.length===0){f=[];break}y.sort(Tl),f=y.slice(0,Math.max(i,1))}if(m.push(...f.map(({node:h})=>h)),T())return{status:"budget-exceeded"};if(m.length===0)return{status:u?"budget-exceeded":"no-plan"};let S=m.map(h=>Kb(e,h,n,o));return T()?{status:"budget-exceeded"}:(S.sort((h,y)=>-Co(h,y)),{status:"ok",plans:S})}l(qb,"generateMacroPlans");function Tl(e,n){let o=nn(n.order,e.order);return o!==0?o:Ca(e.node.compiledChunks,n.node.compiledChunks)}l(Tl,"compareOrderedMacroNodes");function zb(e,n,o,r,i,a,t){if(T())return{status:"budget-exceeded"};let s=0,u=us(e,n,o,r);if(T())return{status:"budget-exceeded"};if(u.length===0)return{status:"no-plan"};let c=new Nr(e,u,o);if(T())return{status:"budget-exceeded"};let p=new ke(ls),d=[];for(let S of u){if(T())return{status:"budget-exceeded"};let h=is(e,n,S.action,c);if(h===void 0)continue;if(T())return{status:"budget-exceeded"};if(s+=1,s>t)return{status:"budget-exceeded"};let[y,M]=h,C=ba(e,y,n,S.family,1,o),k=se(y),b=p.get(k);if(b!==void 0&&C<=b)continue;p.set(k,C);let w=tn(y,e,n,o);if(Y())return{status:"budget-exceeded"};d.push({order:C,node:{game:y,actions:[S.action],compiledChunks:[M],headUtility:w,headFamily:S.family,goalFamily:S.family}})}if(d.length===0)return{status:"no-plan"};d.sort(uf),d=d.slice(0,Math.max(i,1));let f=[];for(let S=1;S<Math.max(a,1);S+=1){if(T())return{status:"budget-exceeded"};let h=[],y=!1;for(let M of d){let C=M.node;if(T())return{status:"budget-exceeded"};if(C.game.winnerColor()!==void 0||C.game.activeColor!==n){f.push(C);continue}let k=us(C.game,n,o,r);if(T())return{status:"budget-exceeded"};if(k.length===0){f.push(C);continue}let b=new Nr(C.game,k,o);if(T())return{status:"budget-exceeded"};let w=!1;for(let P of k){if(T())return{status:"budget-exceeded"};let O=is(C.game,n,P.action,b);if(O===void 0)continue;if(T())return{status:"budget-exceeded"};if(s+=1,s>t)return{status:"budget-exceeded"};let[I,D]=O,x=[...C.actions,P.action],W=[...C.compiledChunks,D],_=ba(e,I,n,C.goalFamily,x.length,o);if(Y())return{status:"budget-exceeded"};let v=se(I),j=p.get(v);j!==void 0&&_<=j||(p.set(v,_),h.push({order:_,node:{game:I,actions:x,compiledChunks:W,headUtility:C.headUtility,headFamily:C.headFamily,goalFamily:C.goalFamily}}),y=!0,w=!0)}w||f.push(C)}if(!y||h.length===0){d=[];break}h.sort(uf),d=h.slice(0,Math.max(i,1))}if(f.push(...d.map(({node:S})=>S)),T())return{status:"budget-exceeded"};if(f.length===0)return{status:"no-plan"};let m=f.map(S=>({actions:S.actions.map(ds),compiledChunks:S.compiledChunks.map(h=>h.map(on)),endGame:S.game.cloneForSimulation(),utility:tn(S.game,e,n,o),headUtility:S.headUtility,headFamily:S.headFamily,goalFamily:S.goalFamily,packageMeta:cs}));return T()?{status:"budget-exceeded"}:(m.sort((S,h)=>-Co(S,h)),{status:"ok",plans:m})}l(zb,"generateTurnPlans");function uf(e,n){let o=nn(n.order,e.order);return o!==0?o:Ca(e.node.compiledChunks,n.node.compiledChunks)}l(uf,"compareOrderedNodes");function $b(e,n,o){if(T())return;let r=us(e,n,o,Math.min(Math.max(o.ownSeedCap,1)*2,ns));if(T()||(r.length===0&&(r=xl(e,n)),r.length===0||T()))return;let i=new Nr(e,r,o),a;for(let t of r){if(T())return;let s=is(e,n,t.action,i);if(s===void 0)continue;if(T())return;let[u,c]=s,p=tn(u,e,n,o),d={actions:[ds(t.action)],compiledChunks:[c.map(on)],endGame:u.cloneForSimulation(),utility:p,headUtility:p,headFamily:t.family,goalFamily:t.family,packageMeta:cs};if(Y()||(d.utility=wa(e,d,n,o),Y()))return;(a===void 0||Co(d,a)>0)&&(a=d)}return T()?void 0:a}l($b,"fallbackSingleActionPlan");function Xb(e,n,o,r){if(T())return;let i=us(e,n,o,Math.min(Math.max(o.ownSeedCap,1)*2,ns));if(T()||(i.length===0&&(i=xl(e,n)),T()||i.length===0))return;let a=Il(r),t=new Nr(e,i,o);if(T())return;let s;for(let u of i){if(T())return;let c=is(e,n,u.action,t);if(c===void 0)continue;if(T())return;let[p,d]=c,f=a.get(un(d));if(f===void 0)continue;let m=tn(p,e,n,o),S={actions:[ds(u.action)],compiledChunks:[d.map(on)],endGame:p.cloneForSimulation(),utility:m,headUtility:m,headFamily:u.family,goalFamily:u.family,packageMeta:cs};if(Y()||(S.utility=wa(e,S,n,o),Y()))return;let h={rank:f,allowedLength:r.length,firstStepOpponentImmediateLoss:no(p,n),firstStepDrainerSafety:Ge(p.board,n)};(s===void 0||vf(S,h,s.plan,s.meta)>0)&&(s={plan:S,meta:h})}return T()?void 0:s?.plan}l(Xb,"fallbackSingleActionPlanFromAllowedHeads");function lf(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}l(lf,"replyShortlistLength");function wa(e,n,o,r){if(T())return new an;let i=n.endGame,a=U(o);if(i.winnerColor()!==void 0||i.activeColor!==a)return tn(i,e,o,r);let t={...r,ownSeedCap:Math.max(r.opponentSeedCap,1),ownBeam:Math.max(r.opponentBeam,1),perNodeFamilyCap:Math.max(r.perNodeFamilyCap,1),stepCap:Math.min(Math.max(r.stepCap,1),4),opponentSeedCap:Math.max(r.replySeedCap,1),opponentBeam:Math.max(r.replyBeam,1),replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(r.expansionCap/2),24)},s=as(i,a,t,t.ownSeedCap,t.ownBeam,t.stepCap,t.expansionCap);if(T())return new an;if(s.status!=="ok")return tn(i,e,o,r);let u=s.plans,c=lf(u.length,t.ownBeam),p=u[0];if(p===void 0)return tn(i,e,o,r);let d=tn(p.endGame,i,a,t);for(let M of u.slice(1,c)){if(T())return new an;let C=tn(M.endGame,i,a,t),k=Wn(C,d);(k>0||k===0&&Ca(M.compiledChunks,p.compiledChunks)<0)&&(p=M,d=C)}let f=p.endGame;if(f.winnerColor()!==void 0||f.activeColor!==o||r.replySeedCap===0)return tn(f,e,o,r);let m={...r,ownSeedCap:Math.max(r.replySeedCap,1),ownBeam:Math.max(r.replyBeam,1),perNodeFamilyCap:Math.max(r.perNodeFamilyCap,1),stepCap:Math.min(Math.max(r.stepCap,1),3),opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(r.expansionCap/3),16)},S=as(f,o,m,m.ownSeedCap,m.ownBeam,m.stepCap,m.expansionCap);if(T())return new an;if(S.status!=="ok")return tn(f,e,o,r);let h=S.plans,y;for(let M of h.slice(0,lf(h.length,m.ownBeam))){let C=tn(M.endGame,e,o,r);(y===void 0||Wn(C,y)>0)&&(y=C)}return y??tn(f,e,o,r)}l(wa,"evaluatePlanWithReplies");var Wl=class Wl{constructor(n,o,r){Ce(this,"transitions");Ce(this,"limit");Ce(this,"priorityLocations");if(this.limit=Yb(r),T()){this.transitions=[],this.priorityLocations=[];return}let i=new Set,a=[];for(let t of o)for(let s of Zb(t.action)){let u=Z(s);i.has(u)||(i.add(u),a.push(s))}this.priorityLocations=a,this.transitions=Cl(n,this.limit,kn,a),T()&&(this.transitions=[])}expand(n){if(T()||this.transitions.length<this.limit||this.limit>=ns)return!1;let o=Math.min(this.limit*2,ns);if(o<=this.limit)return!1;let r=Cl(n,o,kn,this.priorityLocations);return T()?!1:(this.transitions=r,this.limit=o,!0)}};l(Wl,"TransitionCompilePool");var Nr=Wl;function Yb(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}l(Yb,"compileLimitForConfig");function Qb(e){switch(e.kind){case"walk":case"safety-retreat":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.to}}];case"attack":case"bomb":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}}];case"spirit-shift":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}},{kind:"location",location:{...e.destination}}];case"move-mana":return[{kind:"location",location:{...e.from}},{kind:"location",location:{...e.to}}];case"score-carry":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.step}}]}}l(Qb,"directInputsForAction");function Gf(e,n,o){if(T())return;let r=Qb(o),i=Je(e,r);if(!(i===void 0||T())&&Lf(e,i.game,i.events,n,o))return[i.game,r]}l(Gf,"compileActionDirect");function cf(e,n,o,r){if(T())return;let i;for(let a=0;a<r.length;a+=1){if(T())return;let t=r[a];if(t===void 0||!Lf(e,t.game,t.events,n,o))continue;let s=nM(e,t.game,t.events,n,o),u=i===void 0?void 0:r[i[1]];(i===void 0||s>i[0]||s===i[0]&&u!==void 0&&Bn(t.inputs,u.inputs)<0)&&(i=[s,a])}return i}l(cf,"bestTransitionForAction");function Vf(e,n,o,r){let i=cf(e,n,o,r.transitions);if(i===void 0&&r.expand(e)&&(i=cf(e,n,o,r.transitions)),i===void 0||T())return;let a=r.transitions[i[1]];return a===void 0?void 0:[a.game.cloneForSimulation(),a.inputs.map(on)]}l(Vf,"compileActionFromPoolFallback");function is(e,n,o,r){let i=Gf(e,n,o);return i!==void 0?i:Y()?void 0:Vf(e,n,o,r)}l(is,"compileActionFromPool");function pf(e,n,o,r){let i=Gf(e,n,o);if(i!==void 0)return i;if(Y())return;let a=new Nr(e,[{family:7,action:o,priority:0}],r);return Vf(e,n,o,a)}l(pf,"compileAction");function Zb(e){switch(e.kind){case"walk":case"safety-retreat":return[e.actor,e.to];case"attack":case"bomb":return[e.actor,e.target];case"spirit-shift":return[e.actor,e.target,e.destination];case"move-mana":return[e.from,e.to];case"score-carry":return[e.actor,e.step]}}l(Zb,"actionPriorityLocations");function wl(e,n,o){return e.some(r=>(r.kind==="mon-move"||r.kind==="demon-additional-step")&&we(r.from,n)&&we(r.to,o))}l(wl,"movedActorTo");function Jb(e,n,o,r){return e.some(i=>i.kind==="mystic-action"||i.kind==="demon-action"?we(i.from,n)&&we(i.to,o):i.kind==="mon-fainted"&&i.mon.color===U(r)&&we(i.to,o))}l(Jb,"attackEventsMatch");function eM(e,n,o){for(let[,r]of e.board.occupied())if(r.kind==="mon-with-mana"&&r.mon.color===n&&!V(r.mon)&&je(r.mana,o))return!0;return!1}l(eM,"actorOrSuccessorCarries");function Lf(e,n,o,r,i){switch(i.kind){case"walk":return wl(o,i.actor,i.to)&&!oM(o);case"attack":return Jb(o,i.actor,i.target,r);case"spirit-shift":return o.some(a=>a.kind==="spirit-target-move"&&we(a.by,i.actor)&&we(a.from,i.target)&&we(a.to,i.destination));case"bomb":return o.some(a=>a.kind==="bomb-attack"&&we(a.from,i.actor)&&we(a.to,i.target));case"move-mana":return o.some(a=>a.kind==="mana-move"&&we(a.from,i.from)&&we(a.to,i.to));case"score-carry":return wl(o,i.actor,i.step)&&(o.some(a=>a.kind==="mana-scored"&&je(a.mana,i.wanted))||eM(n,r,i.wanted));case"safety-retreat":return wl(o,i.actor,i.to)&&Ge(n.board,r)>Ge(e.board,r)}}l(Lf,"transitionMatchesAction");function nM(e,n,o,r,i){let a=Ue(L(ur(n,r),ur(e,r)),500);switch(a=R(a,Ue(Ge(n.board,r),180)),!no(e,r)&&no(n,r)&&(a=L(a,2200)),i.kind){case"walk":a=R(a,Ue(J(i.actor,i.to),-20));break;case"attack":rM(o,r)&&(a=R(a,1600)),df(o,r)&&(a=R(a,800));break;case"spirit-shift":o.some(t=>t.kind==="mana-scored")&&(a=R(a,1e3)),o.some(t=>t.kind==="spirit-target-move")&&(a=R(a,600));break;case"bomb":df(o,r)&&(a=R(a,1e3));break;case"move-mana":a=R(a,Ue(L(fn(i.from,r),fn(i.to,r)),160));break;case"score-carry":a=R(a,Ue(Pe(i.wanted,r),200));break;case"safety-retreat":a=R(a,Ue(Ge(n.board,r),260));break}return a}l(nM,"transitionScore");function oM(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}l(oM,"eventsIncludeNonWalkAction");function df(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===U(n))}l(df,"eventsIncludeAnyFaint");function rM(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===U(n)&&o.mon.kind===1)}l(rM,"eventsIncludeOpponentDrainerFaint");function tM(e){let n=H(e);return n!==void 0&&(n.kind===4||n.kind===0)}l(tM,"actorCanAttackFromItem");function Hf(e){let n=H(e);return n!==void 0&&!V(n)&&e.kind==="mon-with-consumable"&&e.consumable===1}l(Hf,"actorCanBombFromItem");function aM(e,n){return e!==void 0&&J(e,n)===1}l(aM,"locationGuardedByAngel");function iM(e,n,o){let r=kr(n,o),i=e.square(r);return e.item(r)===void 0&&i.kind!=="supermana-base"&&i.kind!=="mon-base"}l(iM,"demonAttackPathClear");function ff(e,n,o,r,i){if(e.square(n).kind==="mon-base")return!1;let a=e.item(o),t=a===void 0?void 0:H(a);if(t?.color!==U(i)||V(t)||aM(e.findAwakeAngel(U(i)),o))return!1;let s=H(r);return s?.kind===4?Oo(n).some(u=>we(u,o)):s?.kind===0&&Eo(n).some(u=>we(u,o))&&iM(e,n,o)}l(ff,"actorCanAttackTargetNow");function mf(e,n,o,r,i){if(!qr(n).some(s=>we(s,o))||!Hf(r)||H(r)?.color!==i)return!1;let a=e.item(o),t=a===void 0?void 0:H(a);return t?.color===U(i)&&!V(t)}l(mf,"actorCanBombTargetNow");function sM(e,n,o){let r=e.item(o),i=e.square(o),a=H(n),t=Gn(n),s;if(r===void 0?s=!0:r.kind==="mon"?H(n)!==void 0?s=!1:n.kind==="mana"?s=r.mon.kind===1&&!V(r.mon):s=n.kind==="consumable"&&n.consumable===2:r.kind==="mana"?s=a?.kind===1&&!V(a):r.kind==="mon-with-mana"||r.kind==="mon-with-consumable"?s=n.kind==="consumable"&&n.consumable===2:r.consumable===2?s=H(n)!==void 0:s=!1,!s)return!1;switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return t?.kind==="supermana"||t===void 0&&a?.kind===1;case"mon-base":return a?.kind===i.monKind&&a.color===i.color&&t===void 0&&Mr(n)===void 0}}l(sM,"spiritDestinationAllowed");function uM(e,n){let o=e.item(n),r=e.square(n),i=r.kind==="regular"||r.kind==="consumable-base"||r.kind==="mana-base"||r.kind==="mana-pool";return o===void 0?i:o.kind==="mon"&&i&&o.mon.kind===1&&!V(o.mon)}l(uM,"manaMoveDestinationAllowed");function lM(e,n){for(let[o,r]of e.occupied())if(r.kind==="mana"&&je(r.mana,n))return o}l(lM,"nearestWantedManaLocation");function mt(e,n,o){let r=e.item(n),i=r===void 0?void 0:H(r);if(i===void 0)return!1;let a=e.item(o);if(a!==void 0&&H(a)!==void 0)return!1;let t=e.square(o);switch(t.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i.kind===1;case"mon-base":return i.kind===t.monKind&&i.color===t.color}}l(mt,"walkDestinationPlausible");function Ra(e,n){return e.activeColor===n?Math.max(Se-e.monsMovesCount,0):Se}l(Ra,"remainingMovesForColor");function fn(e,n){let o=n===1?0:q-1;return Math.min(J(e,{i:o,j:0}),J(e,{i:o,j:q-1}))}l(fn,"distanceToNearestPool");function cM(e,n,o){let r=U(n);return Ge(e.board,n)<0||ts(e,r)>0||ur(e,r)>=Ae-2||e.board.item(o)?.kind==="mon-with-mana"||fn(o,r)<=3}l(cM,"opponentDrainerKillIsHighValue");function St(e){return e.kind!=="score-carry"?Qd(e):`${Qd(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}l(St,"actionIdentity");function pM(e){switch(e){case 0:return 0;case 1:return 1;case 2:return 2;case 3:return 3;case 4:return 4;case 5:return 5;case 6:return 6;case 7:return 7}}l(pM,"opportunityKindForFamily");function dM(e){switch(e.kind){case"walk":case"safety-retreat":case"score-carry":return{monMovesNeeded:1,needsAction:!1,needsManaMove:!1};case"attack":case"bomb":case"spirit-shift":return{monMovesNeeded:0,needsAction:!0,needsManaMove:!1};case"move-mana":return{monMovesNeeded:0,needsAction:!1,needsManaMove:!0}}}l(dM,"opportunityBudgetForAction");function fM(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}l(fM,"budgetAllowsOpportunity");function mM(e,n){let o=q*3,r=e.family===3?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,i=e.family===4?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===6?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===1||e.family===2?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===2||e.family===1)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===5?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:r,opponentManaProgressGain:i}}l(mM,"opportunityDeltaForSeed");function SM(e,n){return{kind:pM(e.family),family:e.family,action:e.action,priority:e.priority,budget:dM(e.action),delta:mM(e,n)}}l(SM,"turnOpportunityFromSeed");function ss(e,n){let o=(()=>{switch(e.kind){case 0:return 12e3;case 1:return 11400;case 2:return 11200;case 5:return 10400;case 6:return 9800;case 3:return 9400;case 4:return 9200;case 7:return 8e3}})(),r=e.kind===0||e.kind===1||e.kind===2||e.kind===5;return e.priority+o+(n&&r?4e3:0)+e.delta.sameTurnScoreWindowGain*280+e.delta.spiritGain*220+e.delta.opponentWindowDenyGain*260+e.delta.drainerSafetyDelta*240+e.delta.supermanaProgressGain*40+e.delta.opponentManaProgressGain*36+(e.delta.drainerAttack?800:0)-Math.max(e.budget.monMovesNeeded,0)*120-(e.budget.needsAction?80:0)-(e.budget.needsManaMove?40:0)}l(ss,"opportunityScore");function en(e,n){return e===void 0||e.includes(n)}l(en,"familyAllowed");function Dl(e,n,o,r,i){if(T()||e.activeColor!==n)return[];let a=ta(e,n,se(e));if(T())return[];let t=a.opponentCanWinImmediately||a.delta.drainerSafety<0,s=[];if(en(i,0)&&s.push(...Uf(e,n)),T())return[];if(en(i,1)&&s.push(...jf(e,n)),T())return[];if(en(i,2)&&s.push(...Kf(e,n)),T())return[];if(en(i,3)&&s.push(...zf(e,n)),T())return[];if(en(i,4)&&s.push(...$f(e,n)),T())return[];if(en(i,5)&&s.push(...Yf(e,n)),T())return[];if(en(i,7)&&s.push(...hM(e,n,o)),T())return[];if((en(i,3)||en(i,4)||en(i,5)||en(i,6))&&s.push(...Qf(e,n,a,i,o)),T())return[];if(en(i,6)&&s.push(...Zf(e,n,o)),T())return[];if(en(i,7)&&s.push(...Jf(e,n)),T())return[];if((en(i,7)||en(i,5))&&s.push(...xl(e,n).filter(m=>en(i,m.family))),T())return[];let u=new Map;for(let m of s){if(T())return[];let S=SM(m,a);if(!fM(a.budget,S.budget)||t&&S.kind===7&&!S.delta.drainerAttack&&S.delta.drainerSafetyDelta<=0)continue;let h=u.get(S.family)??[];h.push(S),u.set(S.family,h)}for(let m of u.values())m.sort((S,h)=>{let y=nn(ss(h,t),ss(S,t));return y!==0?y:fs(S.action,h.action)});let c=[0,1,2,5,6,3,4,7],p=new Map,d=new Set,f=[];for(let m=0;m<Math.max(o.perNodeFamilyCap,1);m+=1){if(T())return[];let S=!1;for(let h of c){let y=u.get(h);if(y===void 0)continue;let M=p.get(h)??0;for(;M<y.length;){let C=y[M];if(M+=1,C!==void 0&&!d.has(St(C.action))){d.add(St(C.action)),f.push(C),S=!0;break}}if(p.set(h,M),f.length>=Math.max(r,1))return f}if(!S)break}return f}l(Dl,"discoverTurnOpportunities");function us(e,n,o,r){if(T()||e.activeColor!==n)return[];if(o.mode===1){let p=Dl(e,n,o,r).map(({family:d,action:f,priority:m})=>({family:d,action:f,priority:m}));return T()?[]:p}let i=[];if(i.push(...Uf(e,n)),T())return[];if(i.push(...jf(e,n)),T())return[];if(i.push(...Kf(e,n)),T())return[];if(i.push(...zf(e,n)),T())return[];if(i.push(...$f(e,n)),T())return[];if(i.push(...Yf(e,n)),T())return[];if(i.push(...Qf(e,n,ta(e,n,se(e)),void 0,o)),T())return[];if(i.push(...Zf(e,n,o)),T())return[];if(i.push(...Jf(e,n)),T())return[];let a=new Map;for(let p of i){if(T())return[];let d=a.get(p.family)??[];d.push(p),a.set(p.family,d)}for(let p of a.values())p.sort((d,f)=>{let m=nn(f.priority,d.priority);return m!==0?m:fs(d.action,f.action)});let t=[0,1,2,5,6,3,4,7],s=new Set,u=new Map,c=[];for(let p=0;p<Math.max(o.perNodeFamilyCap,1);p+=1){if(T())return[];let d=!1;for(let f of t){let m=a.get(f);if(m===void 0)continue;let S=u.get(f)??0;for(;S<m.length;){let h=m[S];if(S+=1,h!==void 0&&!s.has(St(h.action))){s.add(St(h.action)),c.push(h),d=!0;break}}if(u.set(f,S),c.length>=Math.max(r,1))return c}if(!d)break}return c}l(us,"generateActionSeeds");function Uf(e,n){let o=[];for(let[r,i]of e.board.occupied()){if(i.kind!=="mon-with-mana"||i.mon.color!==n||V(i.mon))continue;let a=fn(r,n);for(let t of Re(r)){let s=fn(t,n);s>a||o.push({family:0,action:{kind:"score-carry",actor:r,wanted:i.mana,step:t},priority:9800+Math.max(a-s,0)*180+Pe(i.mana,n)*120})}}return o}l(Uf,"immediateScoreSeeds");function jf(e,n){let o=U(n),r=Df(e,o,se(e));if(r<=0&&!no(e,n))return[];let i=qf(e,n,1,9400+r*240),a=qn(e.board,n);if(a===void 0)return i;let t=Ge(e.board,n),s=fn(a,n);for(let u of Re(a))fn(u,n)>s+1&&t>=0||i.push({family:1,action:{kind:"safety-retreat",actor:a,to:u},priority:9100+Math.abs(t)*220});return i}l(jf,"denyWindowSeeds");function Kf(e,n){let o=qn(e.board,U(n));return o===void 0||!cM(e,n,o)?[]:qf(e,n,2,9e3)}l(Kf,"drainerKillSeeds");function qf(e,n,o,r){let i=qn(e.board,U(n));if(i===void 0)return[];let a=[],t=e.playerCanUseAction(),s=Ra(e,n);for(let[u,c]of e.board.occupied()){let p=H(c);if(p?.color!==n||V(p))continue;let d=t&&tM(c),f=t&&Hf(c);if(d&&ff(e.board,u,i,c,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:i},priority:r}),f&&mf(e.board,u,i,c,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:i},priority:r-80}),!(s<=0||!d&&!f)){for(let m of Re(u))if(!(J(m,i)>=J(u,i))){if(o===2){let S=e.board.clone();if(S.removeItem(u),S.put(c,m),!(d&&ff(S,m,i,c,n)||f&&mf(S,m,i,c,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:m},priority:r-200+(J(u,i)-J(m,i))*80})}}}return a}l(qf,"attackFamilySeeds");function zf(e,n){return Xf(e,n,{kind:"supermana"},3,8900)}l(zf,"safeSupermanaProgressSeeds");function $f(e,n){return Xf(e,n,{kind:"regular",color:U(n)},4,8600)}l($f,"safeOpponentManaProgressSeeds");function Sf(e,n,o,r){if(T())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let i=U(n),a=o.kind==="supermana"?tr|yo:o.color===i?ar:0,t=Jn(e,n,r,a);return T()?{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0}:{progressSteps:o.kind==="supermana"?t.safeSupermanaProgressSteps:o.color===i?t.safeOpponentManaProgressSteps:void 0,scorePathBestSteps:cl(e.board,n),sameTurnScoreWindowValue:t.sameTurnScoreWindowValue}}l(Sf,"safeProgressExactSnapshot");function Xf(e,n,o,r,i){if(T())return[];let a=qn(e.board,n);if(a===void 0)return[];let t=[],s=Sf(e,n,o,se(e));if(Y())return[];let u=Ge(e.board,n),c=Ui(e,n,a,o),p=c?.[0];if(p!==void 0&&t.push({family:r,action:{kind:"score-carry",actor:a,wanted:o,step:p},priority:i+Math.max(q*2-(c?.length??0),0)*120}),T())return[];if(Ra(e,n)>0){let f=lM(e.board,o);if(f!==void 0){let m=J(a,f),S=s.progressSteps??q*3,h=s.scorePathBestSteps??q*3;for(let y of Re(a)){if(T())return[];if(!mt(e.board,a,y))continue;let M=Je(e,[{kind:"location",location:a},{kind:"location",location:y}]);if(M===void 0||no(M.game,n))continue;let C=Sf(M.game,n,o,se(M.game));if(Y())return[];let k=Ge(M.game.board,n),b=C.progressSteps??q*3,w=C.scorePathBestSteps??q*3,P=b<S||b<=S&&w<h;if(!P&&k<u)continue;let O=i-180+Math.max(m-J(y,f),0)*110+(k-u)*120;P&&(O+=(S-b)*220+(h-w)*180),o.kind==="supermana"&&C.sameTurnScoreWindowValue>0&&(O+=C.sameTurnScoreWindowValue*260),t.push({family:r,action:{kind:"walk",actor:a,to:y},priority:O})}}}let d=e.board.item(a);if(d?.kind==="mon-with-mana"&&je(d.mana,o)){let f=fn(a,n);for(let m of Re(a)){let S=fn(m,n);S>f||t.push({family:r,action:{kind:"score-carry",actor:a,wanted:o,step:m},priority:i+Math.max(f-S,0)*150})}}return t}l(Xf,"safeProgressSeeds");function Yf(e,n){let o=qn(e.board,n);if(o===void 0)return[];let r=Ge(e.board,n),i=[];for(let a of Re(o)){let t=Je(e,[{kind:"location",location:o},{kind:"location",location:a}]);if(t===void 0)continue;let s=Ge(t.game.board,n);s<=r||i.push({family:5,action:{kind:"safety-retreat",actor:o,to:a},priority:8300+Math.abs(r)*220+(s-r)*260})}return i}l(Yf,"safetyRecoverySeeds");function xl(e,n){if(Ra(e,n)<=0)return[];let o=[],r=Ge(e.board,n),i=qn(e.board,n);if(i!==void 0){let a=fn(i,n);for(let t of Re(i)){if(!mt(e.board,i,t))continue;let s=Je(e,[{kind:"location",location:i},{kind:"location",location:t}]);if(s===void 0||no(s.game,n))continue;let u=Ge(s.game.board,n);if(u<r)continue;let c=fn(t,n);o.push({family:u>r?5:7,action:{kind:"walk",actor:i,to:t},priority:7200+Math.max(a-c,0)*140+(u-r)*240})}}if(o.length!==0)return o;for(let[a,t]of e.board.occupied()){let s=H(t);if(!(s?.color!==n||V(s)))for(let u of Re(a)){if(!mt(e.board,a,u))continue;let c=Je(e,[{kind:"location",location:a},{kind:"location",location:u}]);c===void 0||no(c.game,n)||o.push({family:7,action:{kind:"walk",actor:a,to:u},priority:6800})}}return o}l(xl,"fallbackWalkSeeds");function yM(e,n){let o=qn(e.board,n);if(o===void 0)return;let r=Ge(e.board,n),i;for(let a of Re(o)){if(!mt(e.board,o,a))continue;let t=Je(e,[{kind:"location",location:o},{kind:"location",location:a}]);if(t===void 0)continue;let s=Ge(t.game.board,n);if(s<=r)continue;let u=8300+Math.abs(r)*220+(s-r)*260;i=i===void 0?u:Math.max(i,u)}return i}l(yM,"bestFollowUpSafetyRecoveryPriority");function hM(e,n,o){if(o.mode!==1||Ra(e,n)<=0)return[];let r=qn(e.board,n);if(r===void 0)return[];let i=Ge(e.board,n),a=fn(r,n),t=[];for(let s of Re(r)){if(!mt(e.board,r,s))continue;let u=Je(e,[{kind:"location",location:r},{kind:"location",location:s}]);if(u===void 0||no(u.game,n))continue;let c=Ge(u.game.board,n),p=fn(s,n);if(c>=i||p>=a)continue;let d=yM(u.game,n);d!==void 0&&t.push({family:7,action:{kind:"walk",actor:r,to:s},priority:8e3+Math.max(a-p,0)*260+Math.trunc(d/20)-Math.max(i-c,0)*120})}return t}l(hM,"riskyRecoverySetupSeeds");function Ir(e,n,o,r,i){let a=0;return e&&(a|=tr),n&&(a|=ar),o&&(a|=Er),r&&(a|=gr),i&&(a|=yo),a}l(Ir,"tacticalProjectionFlags");function bM(e){switch(e){case"safe-progress-only":return Ir(!0,!1,!1,!1,!1);case"opponent-progress-only":return Ir(!1,!0,!1,!1,!1);case"drainer-opportunity":return Ir(!1,!0,!1,!0,!1);case"spirit-score-only":return Ir(!1,!1,!0,!1,!1);case"spirit-opportunity":return Ir(!0,!1,!0,!1,!1)}}l(bM,"tacticalProjectionProfileFlags");function MM(e,n,o,r,i){let a=n,t=o&&e!==3,s=r,u=i&&e===3,c=a&&u?"spirit-opportunity":a?"safe-progress-only":t&&i?"drainer-opportunity":t?"opponent-progress-only":u?"spirit-score-only":void 0;return{canEmitSupermana:a,canEmitOpponentMana:t,canEmitSafety:s,canEmitSpirit:u,tacticalFlags:Ir(a,t,u,i&&t,a||u),projectionProfile:c,needsScoreWindow:a||u}}l(MM,"oracleWalkActorCapabilities");function yf(e,n,o){let r=ra(e,o).colorSummary(n).spirit;return[r.nextTurnSetupGain,r.utility]}l(yf,"strategicSpiritSignalWithSearchHash");function Qf(e,n,o,r,i){if(T()||Ra(e,n)<=0)return[];let a=en(r,3),t=en(r,4),s=en(r,5),u=en(r,6);if(!a&&!t&&!s&&!u)return[];let c=o.turn,p=[0,0];if(u&&(p=yf(e,n,se(e))),T())return[];let d=a||s?Ge(e.board,n):0,f=c.safeSupermanaProgressSteps??q*3,m=c.safeOpponentManaProgressSteps??q*3,S=qn(e.board,n),h=[],y=i.enableLazyOracleScoreWindowProjection;for(let[M,C]of e.board.occupied()){if(T())return[];let k=H(C);if(k?.color!==n||V(k)||S!==void 0&&we(M,S))continue;let b=MM(k.kind,a,t,s,u);if(!(!b.canEmitSupermana&&!b.canEmitOpponentMana&&!b.canEmitSafety&&!b.canEmitSpirit))for(let w of Re(M)){if(T())return[];if(!mt(e.board,M,w))continue;let P=Je(e,[{kind:"location",location:M},{kind:"location",location:w}]);if(P===void 0||no(P.game,n))continue;let O=b.canEmitSpirit,I=y?b.projectionProfile!==void 0:b.tacticalFlags!==0,D=y&&b.needsScoreWindow,x=I||D||O?se(P.game):void 0,W;if(I){if(x===void 0)throw new Error("oracle walk projection requires a state hash");let ve=b.tacticalFlags;if(y){if(b.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");ve=bM(b.projectionProfile)}W=Jn(P.game,n,x,ve)}if(Y())return[];let _=[0,0];if(O){if(x===void 0)throw new Error("oracle Spirit analysis requires a state hash");_=yf(P.game,n,x)}let v=b.canEmitSupermana||b.canEmitSafety?Ge(P.game.board,n):d,j=W===void 0?f:W.safeSupermanaProgressSteps??q*3,de=W===void 0?m:W.safeOpponentManaProgressSteps??q*3,he,$e=l(()=>{if(he!==void 0)return he;if(y){if(x===void 0)throw new Error("oracle score-window projection requires a state hash");he=Jn(P.game,n,x,yo).sameTurnScoreWindowValue}else he=W?.sameTurnScoreWindowValue??0;return he},"loadAfterScoreWindow");b.canEmitSupermana&&j<f&&h.push({family:3,action:{kind:"walk",actor:M,to:w},priority:8250+(f-j)*240+(v-d)*100+$e()*160});let ie=b.canEmitOpponentMana&&de<m,Qe=u&&(b.canEmitSpirit||b.canEmitOpponentMana)&&(W?.spiritAssistedDenialValue??0)>c.spiritAssistedDenialValue;if(ie||Qe){let ve=k.kind===3?6:4;en(r,ve)&&h.push({family:ve,action:{kind:"walk",actor:M,to:w},priority:8e3+(ie?Math.max(m-de,0)*240:0)+(Qe?Math.max((W?.spiritAssistedDenialValue??0)-c.spiritAssistedDenialValue,0)*180:0)})}if(b.canEmitSpirit){let ve=_[0]-p[0],ze=_[1]-p[1],vn=ve>0||ze>0,bn=(W?.spiritAssistedScoreValue??0)>c.spiritAssistedScoreValue,te=y?!bn&&!vn&&$e()>c.sameTurnScoreWindowValue:(W?.sameTurnScoreWindowValue??0)>c.sameTurnScoreWindowValue;if(bn||te||vn){let Ko=(W?.spiritAssistedScoreValue??0)-c.spiritAssistedScoreValue,To=$e()-c.sameTurnScoreWindowValue;h.push({family:6,action:{kind:"walk",actor:M,to:w},priority:8100+Ko*200+To*220+ve*320+ze*180})}}b.canEmitSafety&&v>d&&h.push({family:5,action:{kind:"walk",actor:M,to:w},priority:8050+(v-d)*260})}}return h}l(Qf,"oracleWalkSeeds");function hf(e,n){let o=e??q*3,r=n??q*3;return r>=o?0:(o-r)*220}l(hf,"progressPriorityBonus");function Zf(e,n,o){if(T()||!o.enableSpiritFamily||!e.playerCanUseAction())return[];let r=Ir(!0,!0,!0,!0,!0),i=Jn(e,n,se(e),r);if(T())return[];let a=Ge(e.board,n),t=[];for(let[s,u]of e.board.occupied()){if(T())return[];let c=H(u);if(!(c?.color!==n||c.kind!==3||V(c)||e.board.square(s).kind==="mon-base"))for(let p of go(s)){if(T())return[];let d=e.board.item(p);if(!(d===void 0||!Ro(d)))for(let f of Re(p)){if(T())return[];if(!sM(e.board,d,f))continue;let m=Je(e,[{kind:"location",location:s},{kind:"location",location:p},{kind:"location",location:f}]);if(m===void 0)continue;let S=7600;H(d)?.color===U(n)&&(S+=400);let y=Gn(d);y?.kind==="supermana"&&(S+=600),y?.kind==="regular"&&y.color===U(n)&&(S+=460);let M=Jn(m.game,n,se(m.game),r);if(T())return[];M.sameTurnScoreWindowValue>i.sameTurnScoreWindowValue&&(S+=(M.sameTurnScoreWindowValue-i.sameTurnScoreWindowValue)*280),M.spiritAssistedScore&&(S+=900+M.spiritAssistedScoreValue*120),M.safeSupermanaProgress&&(S+=700+hf(i.safeSupermanaProgressSteps,M.safeSupermanaProgressSteps)),M.safeOpponentManaProgress&&(S+=760+hf(i.safeOpponentManaProgressSteps,M.safeOpponentManaProgressSteps)),M.spiritAssistedDenial&&(S+=820+M.spiritAssistedDenialValue*140);let C=Ge(m.game.board,n);C>a&&(S+=(C-a)*160),S+=Math.max(q-J(f,p),0)*20,t.push({family:6,action:{kind:"spirit-shift",actor:s,target:p,destination:f},priority:S})}}}return t.sort((s,u)=>{let c=nn(u.priority,s.priority);return c!==0?c:fs(s.action,u.action)}),t.slice(0,12)}l(Zf,"spiritImpactSeeds");function Jf(e,n){if(!e.playerCanMoveMana()||qn(e.board,n)!==void 0)return[];let o=[];for(let[r,i]of e.board.occupied())if(!(i.kind!=="mana"||i.mana.kind!=="regular"||i.mana.color!==n))for(let a of Re(r)){if(!uM(e.board,a))continue;let t=fn(r,n)-fn(a,n),s=U(n),u=fn(r,s)-fn(a,s);t<=0||u>0||o.push({family:7,action:{kind:"move-mana",from:r,to:a},priority:6900+t*200-Math.max(u,0)*200})}return o}l(Jf,"manaTempoSeeds");function E(e){return Q(e)?0:e.attacksOpponentDrainer?2:e.classes.drainerSafetyRecover?5:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?6:e.supermanaProgress?3:e.opponentManaProgress?4:7}l(E,"rootFamily");var kM=1,CM=5,TM=32,Fl=18e4,wM=2,RM=480,PM=3,em=3800,OM=4,Gl=Math.trunc(em*369/100),EM=140,gM=3,vM=8,AM=600,IM=180,Vl=6,Ll=2200,NM=220,DM=140,xM=2500,_l=340,Hl=260,BM=240,WM=420,FM=210,_M=360,GM=220,VM=140,LM=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodeBudget:120,quiescenceEnumLimit:12,futilityMargin:2300,transpositionCapacity:12e3,preferabilityCacheCapacity:32768}),HM=Object.freeze({fast:Object.freeze({depth:wM,maxVisitedNodes:RM}),normal:Object.freeze({depth:PM,maxVisitedNodes:em}),pro:Object.freeze({depth:OM,maxVisitedNodes:Gl})});function lr(e){return Object.freeze(e)}l(lr,"freezeWeights");var UM=lr({...jn,useHeuristicFormula:!1,confirmedScore:900,spiritOnOwnBasePenalty:260,scoreRacePathProgress:86,opponentScoreRacePathProgress:184,immediateScoreWindow:96,opponentImmediateScoreWindow:245,angelGuardingDrainer:120,supermanaRaceControl:30,opponentManaDenial:24,drainerHoldingMana:470,drainerImmediateThreat:-55,drainerBestManaPath:58,drainerPickupScoreThisTurn:90,manaCarrierScoreThisTurn:150,drainerCloseToMana:360,spiritActionUtility:86}),jM=lr({...bl,useHeuristicFormula:!1,confirmedScore:900,spiritOnOwnBasePenalty:260,scoreRacePathProgress:94,opponentScoreRacePathProgress:220,immediateScoreWindow:102,opponentImmediateScoreWindow:310,angelGuardingDrainer:180,supermanaRaceControl:34,opponentManaDenial:30,drainerHoldingMana:500,drainerImmediateThreat:-90,drainerBestManaPath:84,drainerPickupScoreThisTurn:110,manaCarrierScoreThisTurn:180,drainerCloseToMana:390,spiritActionUtility:90}),KM=lr({...Vd,useHeuristicFormula:!1,confirmedScore:890,spiritOnOwnBasePenalty:260,scoreRacePathProgress:104,opponentScoreRacePathProgress:255,immediateScoreWindow:114,opponentImmediateScoreWindow:360,angelGuardingDrainer:190,supermanaRaceControl:40,opponentManaDenial:34,drainerHoldingMana:520,drainerImmediateThreat:-120,drainerBestManaPath:96,drainerPickupScoreThisTurn:130,manaCarrierScoreThisTurn:220,drainerCloseToMana:410,spiritActionUtility:94}),qM=lr({..._d,useHeuristicFormula:!1,confirmedScore:930,spiritOnOwnBasePenalty:260,scoreRacePathProgress:170,opponentScoreRacePathProgress:170,immediateScoreWindow:275,opponentImmediateScoreWindow:235,supermanaRaceControl:32,opponentManaDenial:28,drainerHoldingMana:500,drainerBestManaPath:72,drainerPickupScoreThisTurn:120,manaCarrierScoreThisTurn:240,drainerCloseToMana:375,angelGuardingDrainer:170,spiritActionUtility:88}),zM=lr({...Gd,useHeuristicFormula:!1,confirmedScore:940,spiritOnOwnBasePenalty:260,scoreRacePathProgress:195,opponentScoreRacePathProgress:185,immediateScoreWindow:330,opponentImmediateScoreWindow:265,supermanaRaceControl:36,opponentManaDenial:30,drainerHoldingMana:520,drainerBestManaPath:84,drainerPickupScoreThisTurn:140,manaCarrierScoreThisTurn:280,drainerCloseToMana:395,angelGuardingDrainer:180,spiritActionUtility:90});function Oa(e){return lr({...e,drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800})}l(Oa,"withBooleanDrainer");var nm=Oa(UM),om=Oa(jM),rm=Oa(KM),tm=Oa(qM),am=Oa(zM);function Ea(e){return lr({...e,drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150})}l(Ea,"withMediumWalkThreat");var $M=Ea(nm),XM=Ea(om),YM=Ea(rm),QM=Ea(tm),ZM=Ea(am);function ga(e){return lr({...e,attackerCloseToOpponentDrainer:200})}l(ga,"withAttackerProximity");var JM=ga(nm),ek=ga(om),nk=ga(rm),ok=ga(tm),rk=ga(am);function im(e,n,o,r,i,a){let[t,s]=e.activeColor===0?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=Ae-t,c=Ae-s,p=t-s;return u<=1?a:c<=1?r:u<=2?i:c<=2||p<=-1?o:n}l(im,"phaseProfile");var yt=Object.freeze({balanced:Object.freeze({weights:$M,key:"runtime-normal-walk-balanced"}),tactical:Object.freeze({weights:XM,key:"runtime-normal-walk-tactical"}),tacticalAggressive:Object.freeze({weights:YM,key:"runtime-normal-walk-tactical-aggressive"}),finisher:Object.freeze({weights:QM,key:"runtime-normal-walk-finisher"}),finisherAggressive:Object.freeze({weights:ZM,key:"runtime-normal-walk-finisher-aggressive"})}),ht=Object.freeze({balanced:Object.freeze({weights:JM,key:"runtime-normal-attacker-balanced"}),tactical:Object.freeze({weights:ek,key:"runtime-normal-attacker-tactical"}),tacticalAggressive:Object.freeze({weights:nk,key:"runtime-normal-attacker-tactical-aggressive"}),finisher:Object.freeze({weights:ok,key:"runtime-normal-attacker-finisher"}),finisherAggressive:Object.freeze({weights:rk,key:"runtime-normal-attacker-finisher-aggressive"})}),tk=new Map([[Xi,"default"],[jn,"balanced-distance"],[Yi,"mana-race-lite-d2"],[Qi,"runtime-fast-context"],[Zi,"runtime-fast-context-potion"],[da,"runtime-fast-boolean"],[Ml,"runtime-fast-boolean-potion"],...Object.values(yt).map(({weights:e,key:n})=>[e,n]),...Object.values(ht).map(({weights:e,key:n})=>[e,n])]);function ak(e){let n=tk.get(e);return n!==void 0?n:`custom:${Object.entries(e).map(([o,r])=>`${o}=${String(r)}`).join(";")}`}l(ak,"scoringWeightsKey");function ik(e,n){return n<3?Object.freeze({weights:da,key:"runtime-fast-boolean"}):im(e,yt.balanced,yt.tactical,yt.tacticalAggressive,yt.finisher,yt.finisherAggressive)}l(ik,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function sk(e,n){return n<3?Object.freeze({weights:da,key:"runtime-fast-boolean"}):im(e,ht.balanced,ht.tactical,ht.tacticalAggressive,ht.finisher,ht.finisherAggressive)}l(sk,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function ue(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}l(ue,"clamp");function hs(e,n){return Math.max(0,e-n)}l(hs,"subtractSaturating");function Pa(e,n,o){return Math.trunc(e*n/o)}l(Pa,"scaleFloor");function gn(e){return Object.freeze(e)}l(gn,"freezeConfig");function uk(e,n){let o=ue(ce(e),kM,CM),r=ue(ce(n),TM,Fl),i=ue(Math.trunc(r/24),4,28),a=ue(Math.trunc(r/40),4,18),t=ue(i*5,i,180),s=ue(a*3,a,96);return gn({depth:o,maxVisitedNodes:r,rootEnumLimit:t,rootBranchLimit:i,nodeEnumLimit:s,nodeBranchLimit:a,scoringWeights:Xi,enableTwoPassRootAllocation:!1,enableSelectiveExtensions:!1,enableQuietReductions:!1,enableTargetedDrainerAttackFallback:!1,enableForcedTacticalPrepass:!0,enableTurnHeadRerank:!1,enableTurnEngineSelector:!1,enableTurnEngineLowBudgetGuard:!1,enableTurnEngineMidTurnTacticalGuard:!1,enableTurnEngineSecondaryAnalysis:!0,enableTurnEngineSelectedFollowupProjection:!0,enableTurnEngineLateSafeManaRootPreference:!1,turnEngineMode:_e.ProV1,turnEngineSeedCap:0,turnEngineBeamWidth:0,turnEnginePerNodeFamilyCap:0,turnEngineStepCap:0,turnEngineOpponentSeedCap:0,turnEngineOpponentBeamWidth:0,turnEngineReplySeedCap:0,turnEngineReplyBeamWidth:0,turnEngineExpansionCap:0,turnEngineEnableSpiritFamily:!1,enableExactLiteChecks:!1,exactLiteRootCallBudget:0,exactLiteStaticCallBudget:0,enableRootSpiritDevelopmentPref:!0,enableRootReplyRiskGuard:!1,rootReplyRiskScoreMargin:EM,rootReplyRiskShortlistMax:gM,rootReplyRiskReplyLimit:vM,rootReplyRiskNodeShareBp:AM,rootAntiHelpScoreMargin:IM,rootAntiHelpReplyLimit:Vl,enableTwoPassVolatilityFocus:!1,enableNormalRootSafetyRerank:!1,enableNormalRootSafetyDeepFloor:!1,enableInterviewHardSpiritDeploy:!1,enableInterviewDeterministicTiebreak:!1,preferCleanReplyRiskRoots:!1,rootDrainerSafetyScoreMargin:Ll,rootManaHandoffPenalty:NM,rootBacktrackPenalty:DM,rootEfficiencyScoreMargin:xM,potionSpendPenaltyFast:_l,potionSpendPenaltyNormal:Hl,interviewSoftSupermanaProgressBonus:BM,interviewSoftSupermanaScoreBonus:WM,interviewSoftOpponentManaProgressBonus:FM,interviewSoftOpponentManaScoreBonus:_M,interviewSoftManaHandoffPenalty:GM,interviewSoftRoundtripPenalty:VM,enableSupermanaPrepassException:!1,enableQuiescenceSearch:!1,quietReductionDepthThreshold:3,enableFutilityPruning:!1})}l(uk,"searchConfigFromBudget");function lk(e){if(e.depth>=3){let n=ue(e.rootBranchLimit+10,6,36),o=ue(hs(e.nodeBranchLimit,11),6,18);return gn({...e,rootBranchLimit:n,nodeBranchLimit:o,rootEnumLimit:ue(n*6,n,220),nodeEnumLimit:ue(o*4,o,108),scoringWeights:jn})}return gn({...e,scoringWeights:Yi})}l(lk,"searchConfigForRuntime");function ck(e){let n=ue(e.rootBranchLimit+8,8,40),o=ue(hs(e.nodeBranchLimit,2),6,18);return gn({...e,rootBranchLimit:n,nodeBranchLimit:o,rootEnumLimit:ue(n*6,n,240),nodeEnumLimit:ue(o*4,o,108)})}l(ck,"withFastWideRootShape");function pk(e){let n=ue(e.rootBranchLimit,8,36),o=ue(e.nodeBranchLimit+3,9,18);return gn({...e,rootBranchLimit:n,nodeBranchLimit:o,rootEnumLimit:ue(n*6,n,220),nodeEnumLimit:ue(o*6,o,132)})}l(pk,"withNormalDeeperShape");function dk(e){let n=HM[e],o=lk(uk(n.depth,n.maxVisitedNodes));if(e==="fast")return gn({...ck(o),enableTwoPassRootAllocation:!1,enableSelectiveExtensions:!1,enableQuietReductions:!0,enableForcedTacticalPrepass:!0,enableRootSpiritDevelopmentPref:!0,enableRootReplyRiskGuard:!0,rootReplyRiskScoreMargin:125,rootReplyRiskShortlistMax:4,rootReplyRiskReplyLimit:10,rootReplyRiskNodeShareBp:650,rootAntiHelpScoreMargin:220,rootAntiHelpReplyLimit:Vl,enableTwoPassVolatilityFocus:!1,enableNormalRootSafetyRerank:!1,enableNormalRootSafetyDeepFloor:!1,enableInterviewHardSpiritDeploy:!1,enableInterviewDeterministicTiebreak:!1,preferCleanReplyRiskRoots:!1,rootDrainerSafetyScoreMargin:Ll,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,rootEfficiencyScoreMargin:1700,potionSpendPenaltyFast:220,potionSpendPenaltyNormal:Hl,interviewSoftSupermanaProgressBonus:320,interviewSoftSupermanaScoreBonus:600,interviewSoftOpponentManaProgressBonus:200,interviewSoftOpponentManaScoreBonus:310,interviewSoftManaHandoffPenalty:280,interviewSoftRoundtripPenalty:220,enableSupermanaPrepassException:!0,scoringWeights:Zi});let r=pk(o);if(e==="normal"){let t=ue(Pa(r.maxVisitedNodes,3,2),r.maxVisitedNodes,Fl),s=ue(Pa(t,112,100),t,Fl),u=ue(hs(r.rootBranchLimit,1),12,38),c=ue(r.nodeBranchLimit+2,8,18);return gn({...r,maxVisitedNodes:s,rootBranchLimit:u,nodeBranchLimit:c,rootEnumLimit:ue(u*6,u,240),nodeEnumLimit:ue((c+2)*6,c,156),enableTwoPassRootAllocation:!0,enableSelectiveExtensions:!1,enableQuietReductions:!1,enableForcedTacticalPrepass:!0,enableRootSpiritDevelopmentPref:!0,enableRootReplyRiskGuard:!0,rootReplyRiskScoreMargin:145,rootReplyRiskShortlistMax:7,rootReplyRiskReplyLimit:16,rootReplyRiskNodeShareBp:1350,rootAntiHelpScoreMargin:300,rootAntiHelpReplyLimit:10,enableTwoPassVolatilityFocus:!0,enableNormalRootSafetyRerank:!0,enableNormalRootSafetyDeepFloor:!0,enableInterviewHardSpiritDeploy:!0,enableInterviewDeterministicTiebreak:!1,preferCleanReplyRiskRoots:!0,rootDrainerSafetyScoreMargin:4200,rootManaHandoffPenalty:340,rootBacktrackPenalty:240,rootEfficiencyScoreMargin:1400,potionSpendPenaltyFast:_l,potionSpendPenaltyNormal:130,interviewSoftSupermanaProgressBonus:240,interviewSoftSupermanaScoreBonus:300,interviewSoftOpponentManaProgressBonus:220,interviewSoftOpponentManaScoreBonus:280,interviewSoftManaHandoffPenalty:340,interviewSoftRoundtripPenalty:260})}let i=ue(r.rootBranchLimit,14,34),a=ue(r.nodeBranchLimit,9,15);return gn({...r,maxVisitedNodes:Gl,rootBranchLimit:i,nodeBranchLimit:a,rootEnumLimit:ue(i*6,i,204),nodeEnumLimit:ue((a+2)*6,a,132),enableTwoPassRootAllocation:!0,enableSelectiveExtensions:!0,enableQuietReductions:!0,enableForcedTacticalPrepass:!1,enableRootSpiritDevelopmentPref:!0,enableRootReplyRiskGuard:!0,rootReplyRiskScoreMargin:165,rootReplyRiskShortlistMax:9,rootReplyRiskReplyLimit:24,rootReplyRiskNodeShareBp:2e3,rootAntiHelpScoreMargin:300,rootAntiHelpReplyLimit:10,enableTwoPassVolatilityFocus:!0,enableNormalRootSafetyRerank:!0,enableNormalRootSafetyDeepFloor:!0,enableInterviewHardSpiritDeploy:!0,enableInterviewDeterministicTiebreak:!1,preferCleanReplyRiskRoots:!0,rootDrainerSafetyScoreMargin:4800,rootManaHandoffPenalty:340,rootBacktrackPenalty:240,rootEfficiencyScoreMargin:1400,enableFutilityPruning:!0,quietReductionDepthThreshold:2,potionSpendPenaltyFast:_l,potionSpendPenaltyNormal:130,interviewSoftSupermanaProgressBonus:240,interviewSoftSupermanaScoreBonus:300,interviewSoftOpponentManaProgressBonus:280,interviewSoftOpponentManaScoreBonus:340,interviewSoftManaHandoffPenalty:340,interviewSoftRoundtripPenalty:260})}l(dk,"searchConfigFromPreference");function fk(e,n){let o=n.depth<3?Ml:ik(e,n.depth).weights;return gn({...n,scoringWeights:o,maxVisitedNodes:n.depth>=3?Pa(n.maxVisitedNodes,120,100):n.maxVisitedNodes})}l(fk,"withRuntimeScoringWeights");function mk(e){let n=ue(e.rootBranchLimit+5,12,40),o=ue(hs(e.nodeBranchLimit,2),8,18);return gn({...e,rootBranchLimit:n,nodeBranchLimit:o,rootEnumLimit:ue(n*6,n,240),nodeEnumLimit:ue(o*4,o,108),enableTwoPassRootAllocation:!1,enableSelectiveExtensions:!1,enableQuietReductions:!0,rootReplyRiskScoreMargin:125,rootReplyRiskShortlistMax:4,rootReplyRiskReplyLimit:10,rootReplyRiskNodeShareBp:650,rootAntiHelpScoreMargin:220,rootAntiHelpReplyLimit:Vl,enableTwoPassVolatilityFocus:!1,enableNormalRootSafetyRerank:!1,enableNormalRootSafetyDeepFloor:!1,enableInterviewHardSpiritDeploy:!1,enableInterviewDeterministicTiebreak:!1,preferCleanReplyRiskRoots:!1,rootDrainerSafetyScoreMargin:Ll,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,rootEfficiencyScoreMargin:1700,potionSpendPenaltyFast:220,potionSpendPenaltyNormal:Hl,interviewSoftSupermanaProgressBonus:320,interviewSoftSupermanaScoreBonus:600,interviewSoftOpponentManaProgressBonus:200,interviewSoftOpponentManaScoreBonus:310,interviewSoftManaHandoffPenalty:280,interviewSoftRoundtripPenalty:220,enableSupermanaPrepassException:!0,scoringWeights:Zi})}l(mk,"applyRuntimeNormalFastPolicyBlock");function Sk(e){let n=mk(e),o=ue(n.rootBranchLimit+2,12,40);return gn({...n,enableExactLiteChecks:!0,exactLiteRootCallBudget:1,exactLiteStaticCallBudget:1,maxVisitedNodes:Pa(n.maxVisitedNodes,130,100),rootBranchLimit:o,rootEnumLimit:ue(o*6,o,240),rootReplyRiskShortlistMax:Math.max(n.rootReplyRiskShortlistMax,5),rootReplyRiskReplyLimit:Math.max(n.rootReplyRiskReplyLimit,12),rootReplyRiskNodeShareBp:Math.max(n.rootReplyRiskNodeShareBp,900)})}l(Sk,"applyRuntimeNormalFastCoreBudgetSpendProfile");function yk(e,n){let o=ue(n.rootBranchLimit,14,34),r=ue(n.nodeBranchLimit,9,15);return gn({...n,maxVisitedNodes:Pa(Gl,9,8),enableForcedTacticalPrepass:!1,rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(r+1,12),rootEnumLimit:ue(o*6,o,204),nodeEnumLimit:ue((r+2)*6,r,132),enableFutilityPruning:!0,enableQuietReductions:!0,quietReductionDepthThreshold:2,enableRootReplyRiskGuard:!0,rootReplyRiskScoreMargin:165,rootReplyRiskShortlistMax:9,rootReplyRiskReplyLimit:24,rootReplyRiskNodeShareBp:2e3,enableNormalRootSafetyRerank:!0,enableNormalRootSafetyDeepFloor:!0,rootDrainerSafetyScoreMargin:4800,enableSelectiveExtensions:!0,enableInterviewDeterministicTiebreak:!0,enableTurnHeadRerank:!0,scoringWeights:sk(e,n.depth).weights,interviewSoftOpponentManaProgressBonus:320,interviewSoftOpponentManaScoreBonus:400,enableQuiescenceSearch:!0})}l(yk,"applyProPrimaryProfile");function hk(e){return gn({...e,enableExactLiteChecks:!1,exactLiteRootCallBudget:0,exactLiteStaticCallBudget:0})}l(hk,"withPreExactRuntimePolicy");function sm(e,n){let o=fk(e,dk(n));return n==="pro"&&(o=yk(e,o)),o=hk(o),n==="normal"&&(o=Sk(o)),o}l(sm,"shippingSearchConfigForGame");function xr(e){return gn({...e,enableTurnHeadRerank:!1,enableTurnEngineSelector:!0,turnEngineMode:_e.CurrentPro,turnEngineSeedCap:14,turnEngineBeamWidth:5,turnEnginePerNodeFamilyCap:4,turnEngineStepCap:6,turnEngineOpponentSeedCap:6,turnEngineOpponentBeamWidth:2,turnEngineReplySeedCap:3,turnEngineReplyBeamWidth:1,turnEngineExpansionCap:176,turnEngineEnableSpiritFamily:!0,enableTurnEngineLowBudgetGuard:!0,enableTurnEngineMidTurnTacticalGuard:!0,enableTurnEngineLateSafeManaRootPreference:!0,enableTargetedDrainerAttackFallback:!0,enableRootReplyRiskGuard:!1})}l(xr,"applyShippingProConfig");function Ul(e,n,o){return Object.freeze({...o,...e,preference:n,scoringKey:ak(e.scoringWeights),useTranspositionTable:o?.useTranspositionTable??!0,enableExactRootAnalysis:e.enableExactLiteChecks,...LM,potionSpendPenalty:e.depth>=3?e.potionSpendPenaltyNormal:e.potionSpendPenaltyFast,softSupermanaProgressBonus:e.interviewSoftSupermanaProgressBonus,softSupermanaScoreBonus:e.interviewSoftSupermanaScoreBonus,softOpponentManaProgressBonus:e.interviewSoftOpponentManaProgressBonus,softOpponentManaScoreBonus:e.interviewSoftOpponentManaScoreBonus,softManaHandoffPenalty:e.interviewSoftManaHandoffPenalty,softRoundtripPenalty:e.interviewSoftRoundtripPenalty})}l(Ul,"executionConfigFromSearchConfig");var bk=16384,xo=q+4,Mk=120,kk=40,um=90,lm=22,Ck=tr|ar|Er|gr|yo,jl=new ke(bk);function Tk(e,n,o){return e|Number(n)<<1|Number(o)<<2}l(Tk,"snapshotCacheTag");function cm(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}l(cm,"defaultTacticalProjection");function va(e){let n=q-1;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}l(va,"distanceToAnyPoolStepsForEfficiency");function Fn(e,n){let o=q-1,r=n===0?o:0;return Math.max(Math.abs(r-e.i),Math.min(e.j,o-e.j))+1}l(Fn,"distanceToColorPoolStepsForEfficiency");function pm(e,n){let o;for(let[r,i]of e.board.occupied()){let a=H(i);if(!(a?.color!==n||a.kind!==1||V(a)))for(let[t,s]of e.board.occupied()){if(s.kind!=="mana")continue;let u=K(J(r,t),1);o=o===void 0?u:Math.min(o,u)}}return o}l(pm,"approximateBestDrainerToManaSteps");function dm(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,K(Se,e.monsMovesCount)),r=0;for(let[i,a]of e.board.occupied()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||V(a.mon))continue;K(va(i),1)<=o&&(r=Math.max(r,Pe(a.mana,n)))}return r}l(dm,"approximateSameTurnScoreWindowValue");function wk(e,n,o,r,i,a){let t=i?ut(e):void 0,s=t?.colorSummary(n),u=t?.colorSummary(o),c=Ck,p=r&&e.activeColor===n?Jn(e,n,a,c):cm(s?.immediateWindow.bestScore??dm(e,n)),d=r&&e.activeColor===o?Jn(e,o,a,c):cm(u?.immediateWindow.bestScore??dm(e,o)),f=s?.bestDrainerToManaSteps??pm(e,n)??xo,m=u?.bestDrainerToManaSteps??pm(e,o)??xo;return{myBestCarrierSteps:s?.bestCarrierSteps??xo,opponentBestCarrierSteps:u?.bestCarrierSteps??xo,myBestDrainerToManaSteps:f,opponentBestDrainerToManaSteps:m,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:s?.spirit.utility??0,opponentSpiritActionTargets:u?.spirit.utility??0,mySameTurnScoreValue:e.activeColor===n?r?p.spiritAssistedScoreValue:p.sameTurnScoreWindowValue:0,opponentSameTurnScoreValue:e.activeColor===o?r?d.spiritAssistedScoreValue:d.sameTurnScoreWindowValue:0,mySameTurnOpponentManaScoreValue:e.activeColor===n&&r?p.spiritAssistedDenialValue:0,opponentSameTurnOpponentManaScoreValue:e.activeColor===o&&r?d.spiritAssistedDenialValue:0,mySafeSupermanaProgress:r&&p.safeSupermanaProgress,opponentSafeSupermanaProgress:r&&d.safeSupermanaProgress,mySafeOpponentManaProgress:r&&p.safeOpponentManaProgress,opponentSafeOpponentManaProgress:r&&d.safeOpponentManaProgress,mySafeSupermanaProgressSteps:p.safeSupermanaProgressSteps??xo,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??xo,mySafeOpponentManaProgressSteps:p.safeOpponentManaProgressSteps??xo,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??xo}}l(wk,"initializeMoveEfficiencySnapshot");function Rk(e,n,o,r){let i=e.board.base({kind:3,color:n,cooldown:0}),a=e.board.base({kind:3,color:o,cooldown:0});for(let[t,s]of e.board.occupied()){if(s.kind==="mon-with-mana"){if(V(s.mon))continue;let u=K(va(t),1);s.mon.color===n?(r.myCarrierCount=B(r.myCarrierCount,1),r.myBestCarrierSteps=Math.min(r.myBestCarrierSteps,u)):(r.opponentCarrierCount=B(r.opponentCarrierCount,1),r.opponentBestCarrierSteps=Math.min(r.opponentBestCarrierSteps,u));continue}s.kind!=="mon"&&s.kind!=="mon-with-consumable"||V(s.mon)||s.mon.kind!==3||(s.mon.color===n?r.mySpiritOnBase=we(t,i):r.opponentSpiritOnBase=we(t,a))}}l(Rk,"observeMoveEfficiencyBoard");function fm(e,n,o,r,i){let a=U(n),t=wk(e,n,a,o,r,i);return Rk(e,n,a,t),t}l(fm,"buildMoveEfficiencySnapshot");function bs(e,n,o,r,i){let a=Tk(n,o,r),t=jl.get(i,a);if(t!==void 0)return t;let s=fm(e,n,o,r,i);return ye()&&jl.set(i,s,a),s}l(bs,"moveEfficiencySnapshotWithHash");function Pk(e,n,o,r,i){return fm(e,n,o,r,i)}l(Pk,"moveEfficiencySnapshotUncachedWithHash");function mm(){jl.clear()}l(mm,"clearMoveEfficiencyCache");function cr(e,n,o,r,i=xo){let a=e<i,t=n<i;if(a&&t){let s=K(e,n);return s>0?X(s,o):s<0?X(s,r):0}return!a&&t?o:a&&!t?K(0,r):0}l(cr,"stepProgressDelta");function Br(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let r=H(o.item);if(r!==void 0){if(n.some(i=>we(i.from,o.to)&&we(i.to,o.from)&&i.color===r.color&&i.kind===r.kind))return!0;n.push({from:o.from,to:o.to,color:r.color,kind:r.kind})}}return!1}l(Br,"hasRoundtripMonMove");function Ok(e,n,o){return ip(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!Sa(o)}l(Ok,"isNoEffectTurnTransition");function Ek(e,n){let o=U(n);return e.some(r=>r.kind==="mon-fainted"&&r.mon.kind===1&&r.mon.color===o)}l(Ek,"eventsIncludeOpponentDrainerFainted");function Aa(e,n,o){if(o<=0)return 0;let r=0,i=U(n);for(let a of e){if(a.kind!=="mana-move")continue;let t=Fn(a.from,n),s=Fn(a.to,n),u=Fn(a.from,i),c=Fn(a.to,i),p=Math.max(K(u,c),0),d=Math.max(K(t,s),0);if(p>d){let f=K(p,d);r=B(r,X(X(f,Pe(a.mana,i)),o))}}return r}l(Aa,"manaHandoffPenalty");function gk(e,n,o){let r=o;return r=B(r,cr(e.myBestCarrierSteps,n.myBestCarrierSteps,90,130)),r=K(r,cr(e.opponentBestCarrierSteps,n.opponentBestCarrierSteps,80,120)),r=B(r,cr(e.myBestDrainerToManaSteps,n.myBestDrainerToManaSteps,34,50)),r=K(r,cr(e.opponentBestDrainerToManaSteps,n.opponentBestDrainerToManaSteps,30,44)),r=B(r,X(K(n.myCarrierCount,e.myCarrierCount),55)),r=K(r,X(K(n.opponentCarrierCount,e.opponentCarrierCount),48)),r}l(gk,"applyCarrierAndDrainerEfficiencyDelta");function vk(e,n,o){let r=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(r=B(r,um)),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(r=B(r,Math.trunc(um/3))),r=B(r,X(K(n.mySpiritActionTargets,e.mySpiritActionTargets),lm)),r=K(r,X(K(n.opponentSpiritActionTargets,e.opponentSpiritActionTargets),Math.trunc(lm/2))),r}l(vk,"applySpiritEfficiencyDelta");function Ak(e,n,o){let r=o;return r=B(r,X(K(n.mySameTurnScoreValue,e.mySameTurnScoreValue),55)),r=K(r,X(K(n.opponentSameTurnScoreValue,e.opponentSameTurnScoreValue),45)),r=B(r,X(K(n.mySameTurnOpponentManaScoreValue,e.mySameTurnOpponentManaScoreValue),90)),r=K(r,X(K(n.opponentSameTurnOpponentManaScoreValue,e.opponentSameTurnOpponentManaScoreValue),75)),r}l(Ak,"applyScoreWindowEfficiencyDelta");function Ik(e,n,o){let r=o;return!e.mySafeSupermanaProgress&&n.mySafeSupermanaProgress&&(r=B(r,140)),!e.opponentSafeSupermanaProgress&&n.opponentSafeSupermanaProgress&&(r=K(r,120)),!e.mySafeOpponentManaProgress&&n.mySafeOpponentManaProgress&&(r=B(r,120)),!e.opponentSafeOpponentManaProgress&&n.opponentSafeOpponentManaProgress&&(r=K(r,110)),r=B(r,cr(e.mySafeSupermanaProgressSteps,n.mySafeSupermanaProgressSteps,26,40)),r=K(r,cr(e.opponentSafeSupermanaProgressSteps,n.opponentSafeSupermanaProgressSteps,22,36)),r=B(r,cr(e.mySafeOpponentManaProgressSteps,n.mySafeOpponentManaProgressSteps,22,34)),r=K(r,cr(e.opponentSafeOpponentManaProgressSteps,n.opponentSafeOpponentManaProgressSteps,18,30)),r}l(Ik,"applySafeProgressEfficiencyDelta");function Nk(e,n,o,r,i,a){let t=a,s=r.some(u=>u.kind==="mana-scored")||Ek(r,o);return i.applyRootManaHandoffGuard&&!s&&(t=K(t,Aa(r,o,i.rootManaHandoffPenalty))),Ok(e,n,r)?t=K(t,Mk):!Sa(r)&&t<=0&&(t=K(t,kk)),i.applyBacktrackPenalty&&i.rootBacktrackPenalty>0&&Br(r)&&(t=K(t,i.rootBacktrackPenalty)),t}l(Nk,"applyRootEfficiencyPenalties");function Dk(e,n,o,r,i,a,t){let s=0;return s=gk(i,a,s),s=vk(i,a,s),s=Ak(i,a,s),s=Ik(i,a,s),t.isRoot&&(s=Nk(e,n,o,r,t,s)),s}l(Dk,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function Ms(e,n,o,r,i,a,t){let s=Pk(n,o,t.includeTacticalExact&&n.activeColor===o,t.includeStrategicExact,a);return Dk(e,n,o,r,i,s,t)}l(Ms,"moveEfficiencyDeltaFromBeforeSnapshot");var Sm=268435455,Bo=q+4,Kl=q*3,xk=4,Bk=6,Wk=600,Fk=1800,_k=220,Gk=280;function Ts(e,n){return n===0?e.whiteScore:e.blackScore}l(Ts,"scoreForColor");function Em(e,n){for(let[o,r]of e.board.occupied()){let i=H(r);if(i?.color===n&&i.kind===1)return{location:o,mon:i}}}l(Em,"findDrainer");function wn(e,n){let o=Em(e,n);if(o===void 0)return!1;if(V(o.mon))return!0;if(e.isFirstTurn())return!1;let r=rn(e.board);return at(e.board,r,U(n),n,o.location,Se,!0)}l(wn,"isOwnDrainerVulnerable");function Vk(e,n){let o=U(n);for(let[r,i]of e.board.occupied()){let a=H(i);if(a?.color===o&&a.kind===1&&!V(a))return r}}l(Vk,"opponentAwakeDrainerLocation");function Lk(e,n,o){let r=o===4?Oo(n):Eo(n),i=2147483647;for(let a of r)i=Math.min(i,J(e,a));return i}l(Lk,"minimumStepsToAttackSource");function zl(e,n){let o=[],r=Vk(e,n);if(r===void 0)return o;let i=Math.max(0,Se-e.monsMovesCount);if(i<=0)return o;let a=U(n),t=e.board.findAwakeAngel(a),s=t!==void 0&&J(t,r)===1,u=[];for(let[c,p]of e.board.occupied())p.kind==="consumable"&&p.consumable===2&&u.push(c);for(let[c,p]of e.board.occupied()){let d=H(p);if(d?.color!==n||V(d))continue;if(p.kind==="mon-with-consumable"&&p.consumable===1&&J(c,r)<=i+3){o.push(c);continue}if(!s&&(d.kind===4||d.kind===0)&&Lk(c,r,d.kind)<=i){o.push(c);continue}for(let m of u){let S=J(c,m);if(S>i)continue;let h=i-S;if(J(m,r)<=h+3){o.push(c);break}}}return o}l(zl,"potentialDrainerAttackerLocations");function Hk(e,n){return zl(e,n).length>0}l(Hk,"hasPotentialDrainerAttacker");function Uk(e,n){return e.activeColor===n&&e.playerCanUseAction()&&Hk(e,n)}l(Uk,"approximateCanAttackOpponentDrainerThisTurn");function gm(e,n){let o=Em(e,n);if(o===void 0||V(o.mon)||wn(e,n))return!1;let r=rn(e.board),i=e.board.findAwakeAngel(n),a=i!==void 0&&J(i,o.location)===1;return it(e.board,r,n,o.location,a)}l(gm,"isOwnDrainerWalkVulnerable");function ym(e,n){let o=0,r=Bo;for(let[i,a]of e.board.occupied()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||V(a.mon))continue;o+=1;let t=Math.max(Math.min(i.i,10-i.i),Math.min(i.j,10-i.j));r=Math.min(r,t)}return[o,r]}l(ym,"carrierSnapshot");function jk(e,n,o){let[r,i]=ym(e,o),[a,t]=ym(n,o);return a>r||t<i&&t<Bo}l(jk,"hasCarrierProgress");function Kk(e,n){return e.board.base({kind:3,color:n,cooldown:0})}l(Kk,"spiritBase");function qk(e,n){let o=Kk(e,n);for(let[r,i]of e.board.occupied()){let a=H(i);if(!we(r,o)&&a?.kind===3&&a.color===n&&!V(a))return!0}return!1}l(qk,"hasAwakeSpiritOffBase");function vm(e,n,o,r){return r.some(i=>i.kind==="spirit-target-move")||fa(e,o)&&qk(n,o)}l(vm,"hasSpiritDevelopment");function zk(e,n,o,r){return r.some(i=>i.kind==="mana-scored")||Ts(n,o)>Ts(e,o)}l(zk,"isImmediateScore");function Am(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===1&&o.mon.color===U(n))}l(Am,"attacksDrainer");function $l(e,n,o,r=wn(e,o),i=wn(n.game,o)){let a=zk(e,n.game,o,n.events),t=Am(n.events,o),s=r&&!i,u=jk(e,n.game,o),c=Sa(n.events),p=vm(e,n.game,o,n.events);return{immediateScore:a,drainerAttack:t,drainerSafetyRecover:s,carrierProgress:u,material:c,quiet:!a&&!t&&!s&&!u&&!c&&!p}}l($l,"classifyTransition");function Xl(e,n,o){let r=0;for(let i of o)switch(i.kind){case"mana-scored":r+=e===n?780:-780;break;case"pickup-mana":r+=e===n?230:-230;break;case"mon-fainted":r+=i.mon.color===n?-360:360;break;case"use-potion":r+=e===n?-80:80;break;case"pickup-bomb":case"pickup-potion":r+=e===n?45:-45;break;default:break}return r}l(Xl,"orderingEventBonus");function hm(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}l(hm,"scoresMana");function bm(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}l(bm,"picksUpMana");function Mm(e,n,o){return e.some(r=>r.kind==="mana-move"&&o(r.mana)&&Fn(r.to,n)<Fn(r.from,n))}l(Mm,"manaMovedToward");function Yl(e,n,o){return e.some(r=>r.kind==="spirit-target-move"&&r.item.kind==="mana"&&o(r.item.mana)&&Fn(r.to,n)<Fn(r.from,n))}l(Yl,"spiritMovesManaToward");function $k(e,n,o){let r=0,i=U(n);for(let a of e){if(a.kind!=="mana-move")continue;let t=Math.max(0,Fn(a.from,n)-Fn(a.to,n)),s=Math.max(0,Fn(a.from,i)-Fn(a.to,i));s>t&&(r+=(s-t)*Pe(a.mana,i)*o)}return r}l($k,"manaHandoffPenalty");function Ia(e,n,o){let r=rn(e.board);for(let[i,a]of e.board.occupied())if(a.kind==="mon-with-mana"&&a.mon.kind===1&&a.mon.color===n&&!V(a.mon)&&je(a.mana,o))return Hi(e.board,r,n,i);return!1}l(Ia,"safeCarrierForMana");function ws(e,n,o,r){return Yl(n,o,i=>je(i,r))||n.some(i=>i.kind==="spirit-target-move"&&i.item.kind==="mana"&&je(i.item.mana,r))&&Ia(e,o,r)}l(ws,"spiritManaSetup");function km(e,n,o){let r;for(let[i,a]of e.board.occupied()){if(a.kind==="mon-with-mana"&&a.mon.color===n&&a.mon.kind===1&&!V(a.mon)&&je(a.mana,o)){r=0;continue}if(!(a.kind!=="mon"&&a.kind!=="mon-with-consumable")&&!(a.mon.color!==n||a.mon.kind!==1||V(a.mon)))for(let[t,s]of e.board.occupied()){if(s.kind!=="mana"||!je(s.mana,o))continue;let u=J(i,t);r=r===void 0?u:Math.min(r,u)}}return r}l(km,"approximateSpecificManaProgressSteps");function Xk(e,n){let o;for(let[r,i]of e.board.occupied()){if(i.kind!=="mon-with-mana"||i.mon.color!==n||V(i.mon))continue;let a=Math.max(0,va(r)-1);o=o===void 0?a:Math.min(o,a)}return o}l(Xk,"approximateBestCarrierSteps");function Yk(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,Se-e.monsMovesCount),r=0;for(let[i,a]of e.board.occupied()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||V(a.mon))continue;Math.max(0,va(i)-1)<=o&&(r=Math.max(r,Pe(a.mana,n)))}return r}l(Yk,"approximateSameTurnScoreWindowValue");function Ql(e,n,o=!1){let r=o?ut(e).colorSummary(n):void 0,i=Math.max(0,Se-e.monsMovesCount),a=km(e,n,{kind:"supermana"}),t=km(e,n,{kind:"regular",color:U(n)});return{canAttackOpponentDrainer:!1,safeSupermanaProgress:a!==void 0&&a<=i,safeSupermanaProgressSteps:a,safeOpponentManaProgress:t!==void 0&&t<=i,safeOpponentManaProgressSteps:t,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:r?.immediateWindow.bestScore??Yk(e,n),scorePathBestSteps:r?.scorePathWindow.bestSteps??Xk(e,n)}}l(Ql,"approximateActiveTurnSummary");function Im(e){let n=e.activeColor,o=Ql(e,n);return o.sameTurnScoreWindowValue>0||Uk(e,n)||o.safeSupermanaProgress||o.safeOpponentManaProgress}l(Im,"hasProTacticalPotential");function Qk(e,n,o,r){if(e.activeColor===n)return o?pl(e,n):Ql(e,n,r)}l(Qk,"rootTurnSummary");function Nm(e,n,o,r){let i=0;return o&&(i+=80),r&&(i+=48),n&&(i+=24),e?.spiritAssistedScore&&(i+=72),e?.spiritAssistedDenial&&(i+=40),e?.spiritAssistedSupermanaProgress&&(i+=36),e?.spiritAssistedOpponentManaProgress&&(i+=36),i+=Math.max(0,e?.sameTurnScoreWindowValue??0)*20,e?.safeSupermanaProgressSteps!==void 0&&(i+=Math.max(0,12-Math.min(12,e.safeSupermanaProgressSteps))*4),e?.safeOpponentManaProgressSteps!==void 0&&(i+=Math.max(0,12-Math.min(12,e.safeOpponentManaProgressSteps))*4),e?.scorePathBestSteps!==void 0&&(i+=Math.max(0,8-Math.min(8,e.scorePathBestSteps))*3),i}l(Nm,"liveSpiritSetupGain");function Cm(e,n){if(e>=Bo||n<=0)return 0;let o=Math.max(0,Math.min(Se,e));return(Se-o)*n}l(Cm,"rootProgressBonus");function Zk(e,n){let o=0;return n.scoresSupermanaThisTurn?o=R(o,Math.max(0,e.softSupermanaScoreBonus)):n.supermanaProgress&&!n.ownDrainerVulnerable&&(o=R(o,Math.max(0,e.softSupermanaProgressBonus)),o=R(o,Cm(n.safeSupermanaProgressSteps,8))),n.scoresOpponentManaThisTurn?o=R(o,Math.max(0,e.softOpponentManaScoreBonus)):n.opponentManaProgress&&!n.ownDrainerVulnerable&&(o=R(o,Math.max(0,e.softOpponentManaProgressBonus)),o=R(o,Cm(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=L(o,Math.max(0,e.softManaHandoffPenalty))),n.hasRoundtrip&&(o=L(o,Math.max(0,e.softRoundtripPenalty))),o}l(Zk,"rootSoftPriority");function Jk(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}l(Jk,"rootTransitionRequiresExactLiteProgress");function eC(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&H(n.item)?.kind===3)}l(eC,"rootTransitionRequiresExactLiteSpiritWindow");function Tm(e){return Jk(e)||eC(e)}l(Tm,"transitionRequiresExactLite");function wm(e,n,o,r){let i=e.exactLiteRootCallBudget,a=e.exactLiteStaticCallBudget;return e.enableExactLiteChecks&&i>0&&Tm(o.events)&&(r.rootCalls>0?r.rootCalls-=1:i=0),e.enableExactLiteChecks&&a>0&&o.game.activeColor===n&&(r.staticCalls>0?r.staticCalls-=1:a=0),i=Math.min(i,r.rootCalls),a=Math.min(a,r.staticCalls),{...e,exactLiteRootCallBudget:i,exactLiteStaticCallBudget:a,enableExactRootAnalysis:e.enableExactLiteChecks?i>0&&Tm(o.events):e.enableExactRootAnalysis}}l(wm,"withExactLiteBudgetedTransitionConfig");function Dm(e,n){let o=se(e);return bs(e,n,!1,!1,o)}l(Dm,"rootCandidateSourceSnapshot");function ql(e,n,o,r,i,a){if(T())return;let t=n.game,s=se(t),u=Ms(e,t,o,n.events,a(),s,{isRoot:!0,applyBacktrackPenalty:!0,applyRootManaHandoffGuard:!0,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:r.rootBacktrackPenalty,rootManaHandoffPenalty:r.rootManaHandoffPenalty});if(T())return;let c=wn(t,o),p=!1,d=$l(e,n,o,i,c),f=hm(n.events,te=>te.kind==="supermana"),m=hm(n.events,te=>te.kind==="regular"&&te.color!==o),S=bm(n.events,te=>te.kind==="supermana"),h=bm(n.events,te=>te.kind==="regular"&&te.color!==o),y=Qk(t,o,r.enableExactRootAnalysis,r.enableExactLiteChecks&&r.exactLiteStaticCallBudget>0),M=S&&Ia(t,o,{kind:"supermana"}),C=h&&Ia(t,o,{kind:"regular",color:U(o)}),k=ws(t,n.events,o,{kind:"supermana"}),b=ws(t,n.events,o,{kind:"regular",color:U(o)}),w=f||S||Mm(n.events,o,te=>te.kind==="supermana")||k||(y?.safeSupermanaProgress??!1)||(y?.spiritAssistedSupermanaProgress??!1),P=m||h||Mm(n.events,o,te=>te.kind==="regular"&&te.color!==o)||b||(y?.safeOpponentManaProgress??!1)||(y?.spiritAssistedOpponentManaProgress??!1)||(y?.spiritAssistedDenial??!1),O=y?.safeSupermanaProgressSteps??Bo,I=y?.safeOpponentManaProgressSteps??Bo,D=y?.scorePathBestSteps??Kl,x=y?.sameTurnScoreWindowValue??0,W=vm(e,t,o,n.events),_=n.events.some(te=>te.kind==="spirit-target-move")&&t.activeColor===o&&x>0,v=Yl(n.events,o,te=>te.kind==="regular"&&te.color===o)||k||b,j=Nm(y,W,_,v),de=t.winnerColor()===o,he=d.drainerAttack,ie=!(de||he||f||m||y?.spiritAssistedScore===!0)&&$k(n.events,o,Math.max(0,r.rootManaHandoffPenalty))>0,Qe=Br(n.events),ve=Zk(r,{supermanaProgress:w,opponentManaProgress:P,safeSupermanaProgressSteps:O,safeOpponentManaProgressSteps:I,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:m,ownDrainerVulnerable:c,manaHandoffToOpponent:ie,hasRoundtrip:Qe}),ze=Na(t,o,Math.max(0,r.depth-1),r.depth)??sr(t,o,r.scoringWeights,!1);ze=R(ze,Xl(e.activeColor,o,n.events)),ze=R(ze,ve);let vn=n.events.some(te=>te.kind==="use-potion"),bn=de||he||Ts(t,o)>=Ts(e,o)+2||f||m||y?.spiritAssistedScore===!0||!c&&(w||P);return vn&&!bn&&(ze=L(ze,Math.max(0,r.potionSpendPenalty))),{inputs:n.inputs,game:t,events:n.events,stateHash:s,heuristic:ze,efficiency:u,winsImmediately:de,attacksOpponentDrainer:he,ownDrainerVulnerable:c,ownDrainerWalkVulnerable:p,spiritDevelopment:W,keepsAwakeSpiritOnBase:fa(e,o)&&fa(t,o),manaHandoffToOpponent:ie,hasRoundtrip:Qe,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:m,safeSupermanaPickupNow:M,safeOpponentManaPickupNow:C,safeSupermanaProgressSteps:O,safeOpponentManaProgressSteps:I,scorePathBestSteps:D,sameTurnScoreWindowValue:x,spiritSetupGain:j,spiritSameTurnScoreSetupNow:_,spiritOwnManaSetupNow:v,supermanaProgress:w,opponentManaProgress:P,interviewSoftPriority:ve,classes:d}}l(ql,"buildRootCandidate");function xm(e,n,o,r){let i=Be(r),a=Je(e,i);if(a===void 0)return;let t=ql(e,{inputs:i,game:a.game,events:a.events},n,o,wn(e,n),()=>Dm(e,n));return t===void 0?void 0:{...t,rootRank:0}}l(xm,"buildRootCandidateForInputs");function zn(e,n){return e===n?0:e?-1:1}l(zn,"compareBooleanPreferred");function ks(e,n){let o=e<Bo,r=n<Bo;return o!==r?o?-1:1:o?e-n:0}l(ks,"progressStepsOrder");function nC(e,n){let o=e<Kl,r=n<Kl;return o!==r?o?-1:1:o?e-n:0}l(nC,"scorePathStepsOrder");function Bm(e,n){let o=zn(e.winsImmediately,n.winsImmediately);if(o!==0||(o=zn(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=zn(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=zn(e.classes.immediateScore,n.classes.immediateScore),o!==0))return o;for(let r of[[e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn],[e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn],[e.safeSupermanaPickupNow,n.safeSupermanaPickupNow],[e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow]])if(o=zn(r[0],r[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=zn(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=zn(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=ks(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=ks(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=nC(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=zn(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=ks(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=zn(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=ks(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=zn(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=zn(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=zn(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}l(Bm,"tacticalRootOrder");function Rs(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=Bm(e,n);return o!==0?o:Bn(e.inputs,n.inputs)}l(Rs,"compareRootCandidates");function oC(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}l(oC,"hasPriorityClass");function rC(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,r=[],i=l(c=>{o.add(c),r.includes(c)||r.push(c)},"markPriority");for(let c=0;c<3;c+=1){let p=e.findIndex(d=>oC(d,c));p>=0&&i(p)}let a=-1;for(let c=0;c<e.length;c+=1){let p=e[c];if(p===void 0||p.sameTurnScoreWindowValue<=0)continue;let d=e[a];(d===void 0||Bm(p,d)<0)&&(a=c)}a>=0&&i(a);for(let c=0;c<e.length;c+=1){let p=e[c];if(p===void 0)continue;let d=p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.spiritSameTurnScoreSetupNow||p.sameTurnScoreWindowValue>0||p.spiritOwnManaSetupNow,f=p.supermanaProgress&&p.safeSupermanaProgressSteps<Bo||p.opponentManaProgress&&p.safeOpponentManaProgressSteps<Bo;(d||f)&&o.add(c)}let t=[],s=new Set,u=l(c=>{if(t.length>=n||s.has(c))return;let p=e[c];p!==void 0&&(t.push(p),s.add(c))},"append");for(let c of r)u(c);for(let c=0;c<e.length;c+=1)o.has(c)&&u(c);for(let c=0;c<e.length;c+=1)u(c);return t}l(rC,"truncateWithClassCoverage");function Cs(e,n){let o=new Set(e.map(r=>un(r.inputs)));for(let r of n)o.has(un(r.inputs))||(o.add(un(r.inputs)),e.push(r))}l(Cs,"appendUniqueTransitions");function tC(e){return e.depth>=3?Bk:xk}l(tC,"forcedAttackCandidatesLimit");function aC(e){return e.depth>=3?Fk:Wk}l(aC,"forcedAttackNodeBudget");function iC(e){return e.depth>=3?Gk:_k}l(iC,"forcedAttackEnumLimit");function sC(e){return e.depth>=3?8:4}l(sC,"spiritSetupFallbackCandidatesLimit");function uC(e){return e.depth>=3?256:128}l(uC,"spiritSetupFallbackEnumLimit");function Rm(e){return e.depth>=3?8:4}l(Rm,"safeDrainerPickupFallbackCandidatesLimit");function lC(e){return e.depth>=3?8:4}l(lC,"drainerSafetyFallbackCandidatesLimit");function cC(e){return e.depth>=3?192:96}l(cC,"drainerSafetyFallbackEnumLimit");function pC(e){return e.depth>=3?24:12}l(pC,"genericRootFallbackEnumLimit");function Zl(e,n,o){let r=[];for(let[i,a]of e.board.occupied()){let t=H(a);t?.color===n&&!V(t)&&(o===void 0||t.kind===o)&&r.push(i)}return r}l(Zl,"awakeMonLocations");function Wm(e,n,o){return Yl(n,o,r=>r.kind==="regular"&&r.color===o)||ws(e,n,o,{kind:"supermana"})||ws(e,n,o,{kind:"regular",color:U(o)})}l(Wm,"hasSpiritScoringManaSetup");function dC(e,n,o,r){if(T()||!e.playerCanUseAction())return[];let i=Zl(e,n,3);if(i.length===0)return[];let a=Math.max(1,r),t=[];for(let s of i){if(T())return[];if(t.length>=a)break;let u=Ji(e,uC(o),kn,[s]);if(Y())return[];for(let c of u){if(T())return[];if(t.length>=a)break;Wm(c.game,c.events,n)&&t.push(c)}}return t}l(dC,"collectTargetedSpiritSetupInputs");function fC(e,n,o,r){if(T())return[];let i=Zl(e,n);if(i.length===0)return[];let a=Math.max(1,r),t=[],s=new Set;for(let u of i){if(T())return[];if(t.length>=a)break;let c=Ji(e,cC(o),kn,[u]);if(Y())return[];for(let p of c){if(T())return[];if(t.length>=a)break;if(wn(p.game,n))continue;let d=un(p.inputs);s.has(d)||(s.add(d),t.push(p))}}return t.sort((u,c)=>Bn(u.inputs,c.inputs)),t}l(fC,"collectTargetedDrainerSafetyInputs");function Fm(e,n){return e.some(o=>o.kind==="pickup-mana"&&je(o.mana,n))}l(Fm,"eventsPickupWantedMana");function mC(e,n){return e.some(o=>o.kind==="mana-scored"&&je(o.mana,n))}l(mC,"eventsScoreWantedMana");function Pm(e,n,o){return Fm(e.events,o)&&Ia(e.game,n,o)}l(Pm,"transitionHasSafeDrainerPickup");function Om(e,n,o,r){if(T()||!e.playerCanMoveMon())return[];let i=Zl(e,n,1);if(i.length===0)return[];let a=Math.max(1,o),t=[],s=new Set;for(let u of i){if(T())return[];if(t.length>=a)break;let c=Ui(e,n,u,r);if(Y())return[];if(c===void 0||c.length===0)continue;let p=[{kind:"location",location:{i:u.i,j:u.j}},...c.map(f=>({kind:"location",location:{i:f.i,j:f.j}}))],d=Je(e,p);if(d!==void 0&&Fm(d.events,r)&&(Ia(d.game,n,r)||mC(d.events,r))){let f=un(p);s.has(f)||(s.add(f),t.push({inputs:p,game:d.game,events:d.events}))}}return t.sort((u,c)=>Bn(u.inputs,c.inputs)),t}l(Om,"collectTargetedSafeDrainerPickupInputs");function SC(e,n){return e.playerCanMoveMon()&&zl(e,n).length>0}l(SC,"canAttemptForcedDrainerAttackFallback");function yC(e,n,o,r){if(T()||e.activeColor!==n||o.remaining===0)return!1;let i=se(e);if(r.has(i))return!0;o.remaining=Math.max(0,o.remaining-1);let a=Pd(e,n);return a&&ye()&&r.add(i),a}l(yC,"canAttackOpponentDrainerBeforeTurnEnds");function hC(e,n,o,r,i){if(T())return[];let a=i?zl(e,n):void 0;if(i&&a?.length===0)return[];let t=i?2:1,s=iC(o)*t,u={remaining:aC(o)*t},c=new Vn(Math.max(1,u.remaining)),p=Ji(e,s,kn,a);if(T())return[];let d=Math.max(1,r),f=[];for(let m of p){if(T())return[];if(f.length>=d)break;if(Am(m.events,n)){f.push(m);continue}m.game.activeColor===n&&yC(m.game,n,u,c)&&f.push(m)}return f}l(hC,"collectDrainerAttackInputs");function Wo(e,n,o){if(T())return[];let r=e.fen(),i=wn(e,n),a=Kn(e,o.rootEnumLimit,kn);if(i&&!a.some(C=>!wn(C.game,n))&&Cs(a,fC(e,n,o,lC(o))),Y())return[];let t=Ql(e,n,!1),s=Nm(t,!1,!1,!1);if(T())return[];let u={kind:"supermana"};if(t.safeSupermanaProgress&&!a.some(C=>Pm(C,n,u))&&Cs(a,Om(e,n,Rm(o),u)),Y())return[];let c={kind:"regular",color:U(n)};if(t.safeOpponentManaProgress&&!a.some(C=>Pm(C,n,c))&&Cs(a,Om(e,n,Rm(o),c)),Y())return[];if((o.enableInterviewHardSpiritDeploy||o.enableRootSpiritDevelopmentPref)&&(dt(e,n)||s>0||t.spiritAssistedSupermanaProgress||t.spiritAssistedOpponentManaProgress)&&!a.some(C=>Wm(C.game,C.events,n))&&Cs(a,dC(e,n,o,sC(o))),Y())return[];let p={rootCalls:o.exactLiteRootCallBudget,staticCalls:o.exactLiteStaticCallBudget},d,f=l(()=>(d??(d=Dm(e,n)),d),"getSourceSnapshot"),m=[],S=l(C=>{for(let k of C){if(T())return!1;let b=wm(o,n,k,p),w=ql(e,k,n,b,i,f);if(Y())return!1;w!==void 0&&m.push(w)}return!0},"appendCandidates");if(!S(a))return[];if(m.length===0){let C=Kn(e,pC(o),kn);if(Y()||!S(C))return[]}let h=m.map((C,k)=>({...C,rootRank:k}));h.sort(Rs);let y=h.some(C=>C.winsImmediately),M;if(!y&&!h.some(C=>C.attacksOpponentDrainer)&&SC(e,n)){let C=hC(e,n,o,tC(o),o.enableTargetedDrainerAttackFallback);if(Y())return[];if(C.length>0){M=new Set(C.map(b=>un(b.inputs)));let k=new Set(h.map(b=>un(b.inputs)));for(let b of C){if(T())return[];let w=un(b.inputs);if(k.has(w))continue;k.add(w);let P=wm(o,n,b,p),O=ql(e,b,n,P,i,f);if(Y())return[];O!==void 0&&h.push({...O,rootRank:0})}h.sort(Rs),y=h.some(b=>b.winsImmediately)}}if(!y&&h.some(C=>C.attacksOpponentDrainer)?h=h.filter(C=>C.attacksOpponentDrainer):M!==void 0&&(h=h.filter(C=>M.has(un(C.inputs)))),h=rC(h,o.rootBranchLimit),h=h.map((C,k)=>({...C,rootRank:k})),e.fen()!==r)throw new Error("root candidate enumeration mutated its source game");return T()?[]:h}l(Wo,"rankRootCandidates");function Na(e,n,o,r){let i=e.winnerColor();if(i===void 0)return;let a=Math.max(0,r-o);return i===n?Sm-a:-Sm+a}l(Na,"terminalSearchScore");var to=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function _m(e,n){let o=q+4;if(e>=o||n<=0)return 0;let r=Math.min(Se,Math.max(0,ce(e)));return X(Se-r,ce(n))}l(_m,"rootProgressStepSoftBonus");function bC(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=R(R(n,520),_m(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=R(R(n,480),_m(e.safeOpponentManaProgressSteps,40))),n}l(bC,"rootScoutProgressBonus");function Lm(e){return R(R(ce(e.heuristic),Ve(ce(e.efficiency),2)),bC(e))}l(Lm,"rootFocusScoutScore");function MC(e){let n=0;return e.winsImmediately&&(n=B(n,5e3)),(e.attacksOpponentDrainer||e.classes.drainerAttack)&&(n=B(n,2800)),e.ownDrainerVulnerable&&(n=B(n,2200)),e.classes.immediateScore&&(n=B(n,1700)),e.classes.drainerSafetyRecover&&(n=B(n,1500)),e.manaHandoffToOpponent&&(n=B(n,900)),e.hasRoundtrip&&(n=B(n,700)),e.classes.material&&(n=B(n,240)),e.efficiency<0&&(n=B(n,Math.min(K(0,ce(e.efficiency)),400))),n}l(MC,"rootVolatilityScore");function Ye(e,n){let o=q+4,r=e<o,i=n<o;return r?!i||e<n:!1}l(Ye,"rootProgressStepsBetter");function Os(e,n){let o=q*3,r=e<o,i=n<o;return r?!i||e<n:!1}l(Os,"rootScorePathStepsBetter");function Gm(e,n){return e.winsImmediately!==n.winsImmediately?e.winsImmediately:e.attacksOpponentDrainer!==n.attacksOpponentDrainer?e.attacksOpponentDrainer:e.ownDrainerVulnerable!==n.ownDrainerVulnerable?!e.ownDrainerVulnerable:e.classes.immediateScore!==n.classes.immediateScore?e.classes.immediateScore:e.scoresSupermanaThisTurn!==n.scoresSupermanaThisTurn?e.scoresSupermanaThisTurn:e.scoresOpponentManaThisTurn!==n.scoresOpponentManaThisTurn?e.scoresOpponentManaThisTurn:e.safeSupermanaPickupNow!==n.safeSupermanaPickupNow?e.safeSupermanaPickupNow:e.safeOpponentManaPickupNow!==n.safeOpponentManaPickupNow?e.safeOpponentManaPickupNow:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue:e.spiritSameTurnScoreSetupNow!==n.spiritSameTurnScoreSetupNow?e.spiritSameTurnScoreSetupNow:e.spiritOwnManaSetupNow!==n.spiritOwnManaSetupNow?e.spiritOwnManaSetupNow:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?Ye(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?Ye(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Os(e.scorePathBestSteps,n.scorePathBestSteps):e.supermanaProgress!==n.supermanaProgress?e.supermanaProgress:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?Ye(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.opponentManaProgress!==n.opponentManaProgress?e.opponentManaProgress:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?Ye(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):e.manaHandoffToOpponent!==n.manaHandoffToOpponent?!e.manaHandoffToOpponent:e.hasRoundtrip!==n.hasRoundtrip?!e.hasRoundtrip:e.spiritDevelopment!==n.spiritDevelopment?e.spiritDevelopment:e.efficiency!==n.efficiency?e.efficiency>n.efficiency:e.heuristic!==n.heuristic?e.heuristic>n.heuristic:!1}l(Gm,"isBetterTacticalRootCandidate");function nc(e,n){return Gm(e,n)?-1:Gm(n,e)?1:0}l(nc,"compareTacticalRootCandidates");function ec(e,n){return e===n?0:e>n?-1:1}l(ec,"compareScoresDescending");function Wr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}l(Wr,"valueAt");function Es(e,n,o){return ec(n[1],o[1])||nc(Wr(e,n[0]),Wr(e,o[0]))||n[0]-o[0]}l(Es,"compareRankedRootIndices");function Hm(e,n,o){let r=[];if(o!==void 0&&r.push(o),n!==void 0)for(let t of n)r.some(s=>ae(s,t))||r.push(t);let i=[...e],a=0;for(let t of r){let s=i.findIndex(c=>ae(c.inputs,t));if(s<0)continue;if(s===a){a+=1;continue}let[u]=i.splice(s,1);u!==void 0&&(i.splice(a,0,u),a+=1)}return i}l(Hm,"prioritizeRootInputs");function kC(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}l(kC,"nonnegativeInteger");function Jl(e,n,o){if(n>o)throw new RangeError("root scout budget has invalid clamp bounds");return Math.min(o,Math.max(n,Math.trunc(e)))}l(Jl,"clampInteger");function Vm(e){return e.turnEngineMode===1&&e.enableTurnEngineSelector}l(Vm,"isCurrentPro");function Ps(e,n,o){return{candidates:Hm(e,n,o),scoutVisitedNodes:0}}l(Ps,"prioritizedRootResult");function CC(e,n){let o=e.enableTwoPassVolatilityFocus||e.depth<=3?1:Jl(e.depth,1,to.scoutDepth),r=Jl(1e4-to.focusBudgetShareBp,500,4e3),i=n;if(o>1){let a=Math.max(0,e.maxVisitedNodes-1);if(a<to.scoutMinNodes)return;i=Jl(Math.trunc(e.maxVisitedNodes*r/1e4),to.scoutMinNodes,a)}if(!(i<n))return{...e,depth:o,maxVisitedNodes:i,enableSelectiveExtensions:!1,enableQuietReductions:!1}}l(CC,"createRootScoutConfig");function TC(e,n,o){let r=0,i=-2147483648,a=Array.from({length:n.length},()=>{});for(let[t,s]of n.entries()){if(e.checkpoint?.()===!0)return{status:"cancelled",visitedNodes:r};if(o.depth>1&&r>=o.maxVisitedNodes)break;let u;if(o.depth>1){r+=1;let c=e.evaluateDeeperScout({candidate:s,candidateIndex:t,perspective:e.perspective,depth:o.depth-1,alpha:i,visitedNodes:r,config:o,useTranspositionTable:e.useTranspositionTable});u=ce(c.score),r=Math.min(o.maxVisitedNodes,Math.max(r,kC(c.visitedNodes,r)))}else u=Lm(s);if(e.cancelled?.()===!0)return{status:"cancelled",visitedNodes:r};a[t]=u,i=Math.max(i,u)}return{status:"finished",scores:a,visitedNodes:r}}l(TC,"runRootScout");function oc(e,n){return n??Lm(e)}l(oc,"effectiveScoutScore");function wC(e,n){let o=e.map((r,i)=>[i,oc(r,n[i])]);return o.sort((r,i)=>Es(e,r,i)),o}l(wC,"rankedRootIndices");function RC(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,r=e[n-1]?.[1]??-2147483648;return L(o,r)<=to.narrowSpreadFallback}l(RC,"hasNarrowScoutSpread");function PC(e,n,o,r,i,a){let{config:t,forcedInputs:s,perspective:u,priorityInputs:c}=e,p=Array.from({length:n.length}).fill(!1);for(let[d]of o.slice(0,a))p[d]=!0;if(Vm(t)&&a<=3&&!o.slice(0,a).some(([f])=>{let m=Wr(n,f);return m.spiritDevelopment&&!m.spiritSameTurnScoreSetupNow&&!m.spiritOwnManaSetupNow})){let f=o.slice(0,a+3).map(([m])=>m).filter(m=>{let S=Wr(n,m);return S.spiritDevelopment&&!S.spiritSameTurnScoreSetupNow&&!S.spiritOwnManaSetupNow&&!S.ownDrainerVulnerable&&!S.manaHandoffToOpponent&&!S.hasRoundtrip&&S.game.activeColor===u&&e.qualifiesPlainSpiritPlan?.(S)===!0});if(f.length>=2)for(let m of f)p[m]=!0}for(let[d,f]of o)B(f,to.focusScoreMargin)<i||(p[d]=!0);for(let[d,f]of n.entries())f.attacksOpponentDrainer&&(p[d]=!0),(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn||f.safeSupermanaPickupNow||f.safeOpponentManaPickupNow||f.spiritSameTurnScoreSetupNow||f.sameTurnScoreWindowValue>0||f.spiritOwnManaSetupNow)&&(p[d]=!0),Vm(t)&&f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&f.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(f)===!0&&(p[d]=!0);if(c!==void 0)for(let d of c){let f=n.findIndex(m=>ae(m.inputs,d));f>=0&&(p[f]=!0)}if(s!==void 0){let d=n.findIndex(f=>ae(f.inputs,s));d>=0&&(p[d]=!0)}if(t.enableTwoPassVolatilityFocus){let d=n.map((m,S)=>{let h=r[S];return{index:S,volatility:MC(m),scoutScore:oc(m,h)}}).filter(({volatility:m})=>m>0).sort((m,S)=>ec(m.volatility,S.volatility)||ec(m.scoutScore,S.scoutScore)||m.index-S.index);for(let{index:m}of d.slice(0,Math.max(to.volatilityKeep,1)))p[m]=!0;let f=d[0]?.volatility;if(f!==void 0)for(let{index:m,volatility:S,scoutScore:h}of d){if(B(S,to.volatilityMargin)<f)break;B(h,to.focusScoreMargin)<i||(p[m]=!0)}}return p}l(PC,"selectFocusedRootIndices");function Um(e){let{config:n,priorityInputs:o,forcedInputs:r}=e,i=[...e.rootMoves];if(e.checkpoint?.()===!0)return{candidates:[],scoutVisitedNodes:0};if(!n.enableTwoPassRootAllocation||i.length<=to.focusCount||n.depth<=1)return Ps(i,o,r);let a=CC(n,i.length);if(a===void 0)return Ps(i,o,r);let t=TC(e,i,a);if(t.status==="cancelled")return{candidates:[],scoutVisitedNodes:t.visitedNodes};let s=Math.min(to.focusCount,i.length),u=wC(i,t.scores);if(RC(u,s)){let f=u.map(([m])=>Wr(i,m));return Ps(f,o,r)}let c=PC(e,i,u,t.scores,u[0]?.[1]??-2147483648,s);if(!c.some(Boolean))return Ps(i,o,r);let p=c.flatMap((f,m)=>{if(!f)return[];let S=Wr(i,m);return[[m,oc(S,t.scores[m])]]});p.sort((f,m)=>Es(i,f,m));let d=p.map(([f])=>Wr(i,f));return{candidates:Hm(d,o,r),scoutVisitedNodes:Math.min(t.visitedNodes,n.maxVisitedNodes)}}l(Um,"focusedRootCandidates");var OC=2400,jm=110;function EC(e){return{...e.candidate,score:e.score,nodesAfter:e.nodesAfter}}l(EC,"flattenRootEvaluation");function tc(e){return e.map(EC)}l(tc,"flattenRootEvaluations");var bt=new ke(Number.MAX_SAFE_INTEGER);function ac(e,n,o,r,i=se(e)){let a=n,t=bt.get(i,a,void 0,o.scoringKey);if(t!==void 0)return r.cacheHits+=1,t;let s=sr(e,n,o.scoringWeights,!1);return ye()&&(bt.size>=o.preferabilityCacheCapacity&&!bt.has(i,a,void 0,o.scoringKey)&&bt.clear(),bt.set(i,s,a,void 0,o.scoringKey)),s}l(ac,"cachedPreferability");function Km(e){let n=0;return e.immediateScore&&(n+=1e3),e.drainerAttack&&(n+=700),e.drainerSafetyRecover&&(n+=500),e.carrierProgress&&(n+=220),e.material&&(n+=80),n}l(Km,"classPriority");function gC(e,n){return-Xp(e,n)}l(gC,"compareHashesDescending");function vC(e,n,o){if(e.heuristic!==n.heuristic)return o?n.heuristic-e.heuristic:e.heuristic-n.heuristic;if(e.orderingEfficiency!==n.orderingEfficiency)return n.orderingEfficiency-e.orderingEfficiency;let r=Km(n.classes)-Km(e.classes);return r!==0?r:gC(e.hash,n.hash)}l(vC,"compareRankedChildren");function qm(e,n,o){return o?R(e,jm)>=n:e<=R(n,jm)}l(qm,"childWithinCoverageMargin");function rc(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}l(rc,"isPriorityChild");function AC(e,n,o,r=!0){if(e.length<=n||n===0)return[...e];let i=e[n-1]?.heuristic??0,a=e.findIndex((u,c)=>c>=n&&rc(u)&&(r||qm(u.heuristic,i,o)));if(a<0)return e.slice(0,n);let t=new Array(e.length).fill(!1);t[a]=!0;let s=1;for(let u=0;u<t.length&&!(s>=n);u+=1)t[u]!==!0&&(t[u]=!0,s+=1);return e.filter((u,c)=>t[c]===!0)}l(AC,"truncateChildrenWithCoverage");function IC(e,n,o=!0){if(e.length<3||e.slice(0,2).some(rc))return;let r=e[1]?.heuristic??0,i=e.findIndex((a,t)=>t<2||!rc(a)?!1:o||qm(a.heuristic,r,n));if(i>=2){let a=e[1],t=e[i];a!==void 0&&t!==void 0&&(e[1]=t,e[i]=a)}}l(IC,"enforceTacticalChildTop2");function NC(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}l(NC,"isQuietReductionCandidate");function DC(e,n,o){return e||n>0&&!o.quiet&&!o.material}l(DC,"isSelectiveExtensionCandidate");function xC(e,n,o,r){if(T())return[];let i=e.activeColor===n.perspective,a=e.activeColor,t=bs(e,n.perspective,!1,!1,o),s=wn(e,a),u=[];for(let c of Kn(e,n.config.nodeEnumLimit)){if(T())return[];let p=se(c.game),d=wn(c.game,a),f=$l(e,c,a,s,d),m=Ms(e,c.game,a,c.events,t,p,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.rootManaHandoffPenalty}),S=Na(c.game,n.perspective,0,n.config.depth)??ac(c.game,n.perspective,n.config,n.stats,p);S=R(S,Xl(a,n.perspective,c.events)),r!==void 0&&Xu(p,r)&&(S=R(S,OC));let h=s!==d||c.events.some(y=>y.kind==="mana-scored"||y.kind==="mon-fainted"&&y.mon.kind===1);u.push({game:c.game,hash:p,heuristic:S,orderingEfficiency:m,tacticalExtensionTrigger:h,quietReductionCandidate:NC(m,h,f),classes:f})}return u.sort((c,p)=>vC(c,p,i)),IC(u,i,!0),AC(u,n.config.nodeBranchLimit,i,!0)}l(xC,"rankedChildren");function Mt(e,n,o){return Na(e,o.perspective,0,o.config.depth)??ac(e,o.perspective,o.config,o.stats,n)}l(Mt,"staticScore");function BC(e,n,o,r,i){let a=Mt(e,n,i),t=e.activeColor===i.perspective;if(t&&a>=r||!t&&a<=o)return a;i.stats.quiescenceNodes+=1;let s=a,u=t?Math.max(o,s):Math.min(r,s);for(let c of Kn(e,Math.min(i.config.quiescenceEnumLimit,i.config.nodeEnumLimit))){if(i.stats.visitedNodes>=i.config.maxVisitedNodes||T())break;if(!$d(c.events))continue;i.stats.visitedNodes+=1;let p=se(c.game),d=ac(c.game,i.perspective,i.config,i.stats,p);if(s=t?Math.max(s,d):Math.min(s,d),u=t?Math.max(u,s):Math.min(u,s),t&&u>=r||!t&&u<=o)break}return s}l(BC,"quiescenceScore");function gs(e,n,o,r,i,a,t){let s=Na(e,t.perspective,o,t.config.depth);if(s!==void 0)return s;if(T())return 0;if(t.stats.visitedNodes>=t.config.maxVisitedNodes)return Mt(e,n,t);if(o<=0)return t.config.enableQuiescenceSearch&&t.stats.quiescenceNodes<t.config.quiescenceNodeBudget?BC(e,n,r,i,t):Mt(e,n,t);let u=r,c=i,p=u,d=c,f,m=t.config.useTranspositionTable?t.transposition.get(n):void 0;if(m!==void 0&&(t.stats.cacheHits+=1,$p(m.bestChildHash)||(f=m.bestChildHash),m.depth>=o&&(m.bound==="exact"||(m.bound==="lower"?u=Math.max(u,m.score):c=Math.min(c,m.score),u>=c))))return m.score;let S=e.activeColor===t.perspective;if(t.config.enableFutilityPruning&&o===1&&!Im(e)){let k=Mt(e,n,t);if(S&&R(k,t.config.futilityMargin)<u||!S&&L(k,t.config.futilityMargin)>c)return k}let h=xC(e,t,n,f);if(h.length===0)return Mt(e,n,t);let y=S?-2147483648:2147483647,M=zp,C=!1;for(let k of h){if(t.stats.visitedNodes>=t.config.maxVisitedNodes){C=!0;break}let b=Math.max(0,o-1),w=a;t.config.enableSelectiveExtensions&&DC(k.tacticalExtensionTrigger,k.orderingEfficiency,k.classes)&&w>0&&(t.extensionNodeBudget===0||t.stats.extensionNodes<t.extensionNodeBudget)?(b=o,w-=1,t.extensionNodeBudget>0&&(t.stats.extensionNodes+=1)):t.config.enableQuietReductions&&k.quietReductionCandidate&&o>=t.config.quietReductionDepthThreshold&&(b=Math.max(0,o-2)),t.stats.visitedNodes+=1;let P=gs(k.game,k.hash,b,u,c,w,t);if((S&&P>y||!S&&P<y)&&(y=P,M=k.hash),S?u=Math.max(u,y):c=Math.min(c,y),u>=c||T())break}if((y===-2147483648||y===2147483647)&&(y=Mt(e,n,t)),t.config.useTranspositionTable&&!C&&ye()){let k=y<=p?"upper":y>=d?"lower":"exact";t.transposition.size>=t.config.transpositionCapacity&&!t.transposition.has(n)&&t.transposition.clear(),t.transposition.set(n,{depth:o,score:y,bound:k,bestChildHash:M})}return y}l(gs,"boundedSearch");function ic(e,n){return{perspective:e,config:n,transposition:new ke(WC(n.transpositionCapacity)),extensionNodeBudget:n.enableSelectiveExtensions?Math.max(1,Math.floor(n.maxVisitedNodes*n.extensionNodeShareBp/1e4)):0,stats:{visitedNodes:0,cacheHits:0,quiescenceNodes:0,extensionNodes:0}}}l(ic,"createSearchContext");function WC(e){return Number.isNaN(e)||e===Number.POSITIVE_INFINITY?Number.MAX_SAFE_INTEGER:Math.max(1,Math.min(Number.MAX_SAFE_INTEGER,Math.ceil(e)))}l(WC,"transpositionStorageCapacity");function FC(e){let n=se(e.game);return Xu(n,e.stateHash)?e:{...e,stateHash:n}}l(FC,"candidateWithCurrentStateHash");function _C(e,n){return e.score>n.score||e.score===n.score&&Rs(e.candidate,n.candidate)<0}l(_C,"betterEvaluation");function GC(e,n){let o=[],r,i=-2147483648;for(let a of e){if(n.stats.visitedNodes>=n.config.maxVisitedNodes||T())break;n.stats.visitedNodes+=1;let t=n.config.depth<=1?a.heuristic:gs(a.game,a.stateHash,n.config.depth-1,i,2147483647,n.config.maxExtensionsPerPath,n),s={candidate:a,score:t,nodesAfter:n.stats.visitedNodes};o.push(s),(r===void 0||_C(s,r))&&(r=s),i=Math.max(i,t)}return{evaluations:o,best:r}}l(GC,"evaluateFocusedRoots");function zm(e,n,o,r){let i=ic(n,r),a=se(e);return gs(e,a,Math.max(0,o),-2147483648,2147483647,r.maxExtensionsPerPath,i)}l(zm,"evaluateSearchScore");function sc(e,n,o,r,i={},a=o.useTranspositionTable){let t=e.fen(),s=r?r.map(FC):Wo(e,n,o),u,c=Um({rootMoves:s,perspective:n,config:o,useTranspositionTable:a,...i.priorityInputs===void 0?{}:{priorityInputs:i.priorityInputs},...i.forcedInputs===void 0?{}:{forcedInputs:i.forcedInputs},...i.qualifiesPlainSpiritPlan===void 0?{}:{qualifiesPlainSpiritPlan:i.qualifiesPlainSpiritPlan},...i.qualifiesDrainerSafetyRecoveryPlan===void 0?{}:{qualifiesDrainerSafetyRecoveryPlan:i.qualifiesDrainerSafetyRecoveryPlan},evaluateDeeperScout:l(p=>(u??(u=ic(n,{...p.config,useTranspositionTable:p.useTranspositionTable})),u.stats.visitedNodes=Math.max(u.stats.visitedNodes,p.visitedNodes),{score:gs(p.candidate.game,p.candidate.stateHash,p.depth,p.alpha,2147483647,0,u),visitedNodes:u.stats.visitedNodes}),"evaluateDeeperScout"),checkpoint:T,cancelled:Y});if(e.fen()!==t)throw new Error("root focus mutated its source game");return{candidates:c.candidates,scoutVisitedNodes:c.scoutVisitedNodes}}l(sc,"focusRootCandidatesForSearch");function uc(e,n,o,r,i={}){let a=e.fen(),t=sc(e,n,o,r,i),s=t.candidates,u=ic(n,o);u.stats.visitedNodes=t.scoutVisitedNodes;let{evaluations:c,best:p}=GC(s,u);if(e.fen()!==a)throw new Error("bounded search mutated its source game");return{best:p,evaluations:c,visitedNodes:u.stats.visitedNodes,cacheHits:u.stats.cacheHits,timedOut:Y()}}l(uc,"searchRootCandidates");function lc(){bt.clear(),mm(),Ki()}l(lc,"clearSearchCaches");function ao(e){return e.activeColor===0&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}l(ao,"currentProIsEarlyWhiteTurnStart");function vs(e){return{...e,ownSeedCap:Math.min(e.ownSeedCap,14),ownBeam:Math.min(e.ownBeam,5),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,4),stepCap:Math.min(e.stepCap,6),opponentSeedCap:1,opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(e.expansionCap,48)}}l(vs,"applyEarlyWhiteTurnEngineLimits");function As(e){let n=e.mode===1;return{...e,ownSeedCap:Math.min(e.ownSeedCap,n?12:8),ownBeam:Math.min(e.ownBeam,n?5:4),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,n?4:3),stepCap:Math.min(e.stepCap,5),opponentSeedCap:Math.min(e.opponentSeedCap,n?6:4),opponentBeam:Math.min(e.opponentBeam,n?3:2),replySeedCap:Math.min(e.replySeedCap,n?3:2),replyBeam:n?2:1,expansionCap:Math.min(e.expansionCap,n?144:96)}}l(As,"applyTurnEngineRerankLimits");var cn=Math.trunc(2147483647/8),VC=700,yc=4096,LC=Object.freeze({currentPro:!1,allowExactStrategic:!1,turnEngineMode:_e.ProV1,enableRootReplyRiskGuard:!0,rootReplyRiskScoreMargin:125,rootReplyRiskShortlistMax:4,rootReplyRiskReplyLimit:10,rootReplyRiskNodeShareBp:650,preferCleanReplyRiskRoots:!1,enableInterviewDeterministicTiebreak:!1}),HC=Object.freeze({currentPro:!1,allowExactStrategic:!1,turnEngineMode:_e.ProV1,enableRootReplyRiskGuard:!0,rootReplyRiskScoreMargin:145,rootReplyRiskShortlistMax:7,rootReplyRiskReplyLimit:16,rootReplyRiskNodeShareBp:1350,preferCleanReplyRiskRoots:!0,enableInterviewDeterministicTiebreak:!1}),UC=Object.freeze({currentPro:!0,allowExactStrategic:!1,turnEngineMode:_e.CurrentPro,enableRootReplyRiskGuard:!1,rootReplyRiskScoreMargin:165,rootReplyRiskShortlistMax:9,rootReplyRiskReplyLimit:24,rootReplyRiskNodeShareBp:2e3,preferCleanReplyRiskRoots:!0,enableInterviewDeterministicTiebreak:!0}),jC=Object.freeze({fast:LC,normal:HC,pro:UC});function Fa(e){let n=jC[e.preference];return Object.freeze({...n,...e,currentPro:e.turnEngineMode===_e.CurrentPro,evaluationCacheKey:e.scoringKey})}l(Fa,"replyRiskConfigForSearch");var pc=new ke(yc),dc=new ke(yc),fc=new ke(yc),$m=new WeakMap,Xm=1;function hc(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}l(hc,"cacheGet");function bc(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}l(bc,"cacheSet");function cc(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(cn/2)}}l(cc,"conservativeSnapshot");function _o(e,n,o){return o.evaluateGame===void 0?sr(e,n,o.scoringWeights??jn,o.allowExactStrategic??!1):o.evaluateGame(e,n)}l(_o,"evaluateGame");function Mc(e,n,o,r){let i=r.scoringWeights??jn,a=$m.get(i);if(a===void 0&&(a=Xm,Xm+=1,$m.set(i,a)),!Number.isInteger(o)||o<0||o>65535||a<1||a>1048575)return;let t=o+a*65536+n*68719476736+Number(r.allowExactStrategic??!1)*137438953472;return{hash:se(e),tag:t,qualifier:r.evaluationCacheKey}}l(Mc,"snapshotCacheKey");function KC(e,n){if([[e.ownSeedCap,15],[e.ownBeam,7],[e.perNodeFamilyCap,7],[e.stepCap,7],[e.opponentSeedCap,7],[e.opponentBeam,3],[e.replySeedCap,3],[e.replyBeam,3],[e.expansionCap,255]].some(([a,t])=>!Number.isInteger(a)||a<0||a>t))return;let r=e.ownSeedCap|e.ownBeam<<4|e.perNodeFamilyCap<<7|e.stepCap<<10|e.opponentSeedCap<<13|e.opponentBeam<<16|e.replySeedCap<<18|e.replyBeam<<20,i=e.expansionCap|Number(e.enableSpiritFamily)<<8|Number(n)<<9;return Oe(i,r)}l(KC,"selectedOverrideConfigKey");function kc(){pc.clear(),qC()}l(kc,"clearReplyRiskCache");function qC(){dc.clear(),fc.clear()}l(qC,"clearReplyRiskAdvisorCaches");function hn(e,n,o,r){if(T())return cc();let i=Math.max(1,Math.trunc(r)),t=o.evaluateGame===void 0?Mc(e,n,i,o):void 0;if(t!==void 0){let c=hc(pc,t);if(c!==void 0)return c}let s=e.winnerColor(),u;if(s!==void 0){let c=s===n;u={allowsImmediateOpponentWin:!c,opponentReachesMatchPoint:!c,worstReplyScore:c?Math.trunc(cn/2):-Math.trunc(cn/2)}}else if(e.activeColor===n)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:_o(e,n,o)};else{let c=Kn(e,i);if(T())return cc();if(c.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(cn/4)};else{let p=!1,d=!1,f=2147483647,m=!1;for(let S of c){if(T())return cc();let h=S.game;m=!0;let y=n===0?h.blackScore:h.whiteScore;Ae-y<=1&&(d=!0);let M=h.winnerColor(),C;if(M===n?C=Math.trunc(cn/2):M!==void 0?(p=!0,d=!0,C=-Math.trunc(cn/2)):C=_o(h,n,o),f=Math.min(f,C),p)break}(!m||f===2147483647)&&(f=_o(e,n,o)),u={allowsImmediateOpponentWin:p,opponentReachesMatchPoint:d,worstReplyScore:f}}}return ye()&&t!==void 0&&bc(pc,t,u),u}l(hn,"rootReplyRiskSnapshot");function Fr(e,n){return e===n?0:e?-1:1}l(Fr,"boolOrder");function pr(e,n){let r=e<15,i=n<15;return r&&(!i||e<n)}l(pr,"progressStepsBetter");function sS(e,n){let r=e<33,i=n<33;return r&&(!i||e<n)}l(sS,"scorePathStepsBetter");function Cc(e,n){let o=[[e.winsImmediately,n.winsImmediately,!0],[e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0],[e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1],[e.classes.immediateScore,n.classes.immediateScore,!0],[e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0],[e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0],[e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0],[e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow,!0]];for(let[i,a,t]of o){let s=t?Fr(i,a):Fr(!i,!a);if(s!==0)return s}if(e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue)return n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue;for(let[i,a]of[[e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow],[e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow]]){let t=Fr(i,a);if(t!==0)return t}if(e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps)return pr(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1;if(e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps)return pr(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1;if(e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps)return sS(e.scorePathBestSteps,n.scorePathBestSteps)?-1:1;let r=Fr(e.supermanaProgress,n.supermanaProgress);if(r!==0)return r;if(e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps)return pr(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1;if(r=Fr(e.opponentManaProgress,n.opponentManaProgress),r!==0)return r;if(e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps)return pr(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1;for(let[i,a,t]of[[e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1],[e.hasRoundtrip,n.hasRoundtrip,!1],[e.spiritDevelopment,n.spiritDevelopment,!0]])if(r=t?Fr(i,a):Fr(!i,!a),r!==0)return r;return e.interviewSoftPriority!==n.interviewSoftPriority?n.interviewSoftPriority-e.interviewSoftPriority:n.efficiency-e.efficiency}l(Cc,"compareTacticalRoots");function Da(e,n,o){let r=e[n],i=e[o];return r===void 0||i===void 0?n-o:i.score-r.score||Cc(r,i)||n-o}l(Da,"compareRankedReplyRiskEvaluations");function xa(e,n){return pr(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||pr(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}l(xa,"rootProgressOrSetupBetter");function uS(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}l(uS,"isTacticalPriorityRoot");function Go(e,n,o){let r=e[n],i=e[o];if(r===void 0||i===void 0)return o-n;if(r.score!==i.score)return r.score>i.score?1:-1;let a=Cc(r,i);return a!==0?a<0?1:-1:n===o?0:n<o?1:-1}l(Go,"rankedRootOrder");function _r(e,n){return e.safeSupermanaProgressSteps===n.safeSupermanaProgressSteps&&e.safeOpponentManaProgressSteps===n.safeOpponentManaProgressSteps&&(e.safeSupermanaProgressSteps<q+4||e.safeOpponentManaProgressSteps<q+4)&&e.safeSupermanaPickupNow===n.safeSupermanaPickupNow&&e.safeOpponentManaPickupNow===n.safeOpponentManaPickupNow&&e.supermanaProgress===n.supermanaProgress&&e.opponentManaProgress===n.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!e.spiritDevelopment&&!n.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!n.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!n.spiritOwnManaSetupNow&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip}l(_r,"sameNonTacticalProgressLane");function _a(e,n,o){if(n.length===0||T())return[];let r=-2147483648,i=2147483647,a=!1;for(let d of n){let f=e[d];f!==void 0&&(r=Math.max(r,f.score),i=Math.min(i,f.score),a||(a=f.winsImmediately))}if(a&&L(r,i)>VC)return[];let t=Math.max(0,o.rootReplyRiskScoreMargin??165),s=n.filter(d=>{let f=e[d];return f!==void 0&&R(f.score,t)>=r});if(s.sort((d,f)=>Da(e,d,f)),s.length===0)return s;let u=Math.max(1,o.rootReplyRiskShortlistMax??9);if(s.length>u)if(N(o)){let d=s.slice(0,u),f=d.some(y=>{let M=e[y];return M!==void 0&&(M.spiritDevelopment||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow)}),m=e[s[0]??-1]?.score??r,S=[];if(!f){let y=s.slice(u).find(M=>{let C=e[M];return C!==void 0&&L(m,C.score)<=64&&(C.spiritDevelopment||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow)});y!==void 0&&S.push(y)}if([...d,...S].some(y=>{let M=e[y];return M!==void 0&&G(M)})){let y=0;for(let M of s.slice(u)){let C=e[M];if(C!==void 0&&G(C)&&L(m,C.score)<=64&&!S.includes(M)&&(S.push(M),y+=1,y>=2))break}}s=[...d,...S]}else s=s.slice(0,u);let c=s[0],p=c===void 0?void 0:e[c];if(N(o)&&p!==void 0&&A(p)&&z(p)){let d=n.filter(f=>!s.includes(f)).filter(f=>{let m=e[f];return m!==void 0&&!A(m)&&_r(m,p)&&L(p.score,m.score)<=320}).sort((f,m)=>Da(e,f,m))[0];d!==void 0&&s.push(d)}return s.sort((d,f)=>Da(e,d,f)),s}l(_a,"replyRiskGuardShortlistIndices");function Ct(e){return e.enableTurnEngineSelector===!0&&N(e)&&e.enableTurnEngineSecondaryAnalysis===!0}l(Ct,"currentProSecondaryAnalysisLive");function io(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}l(io,"canTurnEngineProjectReplyRiskRoot");function mc(e){return e===0||e===1||e===2}l(mc,"isTacticalTurnEngineFamily");function lS(e){return mc(e)||e===6||e===5}l(lS,"isInformativeReplyRiskProjectionFamily");function zC(e,n,o,r){return r.enableTurnEngineSelector!==!0||!N(r)||!io(e,o)||G(e)||n.plan.headFamily===6&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:lS(n.plan.headFamily)?!0:(n.plan.headFamily===3||n.plan.headFamily===4)&&z(e)}l(zC,"shouldUseReplyRiskProjectionForRoot");function Ym(e,n,o,r,i){let a=n!==void 0&&zC(e,n,o,r)?n.plan.endGame:e.game;return hn(a,o,r,i)}l(Ym,"rootReplyRiskSnapshotWithProjection");function $C(e){return N(e)?1:0}l($C,"normalizedTurnEngineMode");function Fo(e,n){return Math.max(1,Math.trunc(e??n))}l(Fo,"positiveCap");function Ga(e){return{mode:$C(e),ownSeedCap:Fo(e.turnEngineSeedCap,14),ownBeam:Fo(e.turnEngineBeamWidth,5),perNodeFamilyCap:Fo(e.turnEnginePerNodeFamilyCap,4),stepCap:Fo(e.turnEngineStepCap,6),opponentSeedCap:Fo(e.turnEngineOpponentSeedCap,6),opponentBeam:Fo(e.turnEngineOpponentBeamWidth,2),replySeedCap:Fo(e.turnEngineReplySeedCap,3),replyBeam:Fo(e.turnEngineReplyBeamWidth,1),expansionCap:Fo(e.turnEngineExpansionCap,176),enableSpiritFamily:e.turnEngineEnableSpiritFamily??!0,scoringWeights:e.scoringWeights??jn,enableLazyOracleScoreWindowProjection:!1}}l(Ga,"fullTurnEngineConfig");function cS(e){return As(Ga(e))}l(cS,"rerankTurnEngineConfig");function XC(e,n){let o=Ga(n);o.mode===1&&n.enableTurnEngineLowBudgetGuard===!0&&ao(e)&&(o=vs(o));let r=o.mode===1;return{...o,ownSeedCap:Math.min(o.ownSeedCap,r?8:6),ownBeam:Math.min(o.ownBeam,r?3:2),perNodeFamilyCap:Math.min(o.perNodeFamilyCap,r?3:2),stepCap:Math.min(o.stepCap,4),opponentSeedCap:Math.min(o.opponentSeedCap,r?2:1),opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(o.expansionCap,r?64:48)}}l(XC,"projectionTurnEngineConfig");function Qm(e,n){return Wn(e,n)>=0?e:n}l(Qm,"maxTurnEngineUtility");function pS(e,n,o,r,i){let a=Ta(n.game,e,o,r),t={actions:[],compiledChunks:[n.inputs],endGame:n.game.cloneForSimulation(),utility:a,headUtility:a,headFamily:i,goalFamily:i,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ys(e,t,o,r)}l(pS,"turnEngineRootPlanUtilityWithConfig");function Sc(e,n,o,r,i){return r.evaluateTurnEngineRootUtility?.(e,n,o,i)??pS(e,n,o,Ga(r),i)}l(Sc,"turnEngineRootPlanUtility");function YC(e,n,o,r,i){let a=r.evaluateTurnEngineRootUtility?.(e,n,o,i);if(a!==void 0)return a;let t=XC(n.game,r),s=Mc(n.game,o,i+1,r),u=KC(t,r.enableTurnEngineSelectedFollowupProjection===!0),c=s===void 0||u===void 0?void 0:{...s,secondary:u};if(c!==void 0){let f=hc(fc,c);if(f!==void 0)return f}let p=Ta(n.game,e,o,t),d;if(!Ct(r))d=p;else{let f=pS(e,n,o,t,i);if(r.enableTurnEngineSelectedFollowupProjection!==!0||!io(n,o))d=Qm(f,p);else{let m=n.ownDrainerVulnerable||n.spiritDevelopment||n.spiritSameTurnScoreSetupNow||n.spiritOwnManaSetupNow||z(n),S=n.game.activeColor===1&&(i===7||i===5)&&!m&&!A(n)&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&!n.winsImmediately&&!n.attacksOpponentDrainer;if(!m&&!S)d=f;else{let h=ro(n.game,o,t);d=h===void 0?f:Qm(h.utility,f)}}}return ye()&&c!==void 0&&bc(fc,c,d),d}l(YC,"turnEngineSelectedOverrideUtility");function Zm(e,n,o){return N(o)&&E(e)===7&&E(n)===7&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!A(e)&&!A(n)&&_r(e,n)}l(Zm,"isCurrentProWhiteManaSiblingPair");function dS(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount<4)return;let a=[...o].filter(d=>{let f=n[d];return f!==void 0&&E(f)===7&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!A(f)&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!f.winsImmediately&&!f.attacksOpponentDrainer&&f.sameTurnScoreWindowValue===0&&!f.scoresSupermanaThisTurn&&!f.scoresOpponentManaThisTurn&&!f.safeSupermanaPickupNow&&!f.safeOpponentManaPickupNow}).sort((d,f)=>-Go(n,d,f))[0];if(a===void 0)return;let t=n[a];if(t===void 0)return;let s=Sc(e,t,r,i,7),u,c,p=!1;return n.forEach((d,f)=>{let m=Zm(d,t,i)&&L(t.score,d.score)<=24&&Math.abs(t.rootRank-d.rootRank)<=4&&d.rootRank<t.rootRank;if(o.includes(f)||E(d)!==7||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||A(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!m&&d.score<L(t.score,96)||d.rootRank>=t.rootRank&&!m)return;let S=Sc(e,d,r,i,7),y=oe(S,s)>0||S.strictlyDominatesOverrideAxes(s);if(!y&&!m)return;let M=u,C=c,k=M===void 0||C===void 0;if(M!==void 0&&C!==void 0){let b=n[M];if(b===void 0)k=!0;else{let w=Zm(b,t,i)&&L(t.score,b.score)<=24&&Math.abs(t.rootRank-b.rootRank)<=4&&b.rootRank<t.rootRank;if(y!==p)k=y;else if(y){let P=oe(S,C);k=P>0||P===0&&Go(n,f,M)>0}else m&&w?k=d.rootRank<b.rootRank||d.rootRank===b.rootRank&&Go(n,f,M)>0:k=m}}k&&(u=f,c=S,p=y)}),u}l(dS,"currentProWhiteTurnFourManaSiblingReentry");function Tc(e,n,o){if(!N(o)||n.length<2)return!1;for(let r=0;r<n.length;r+=1){let i=e[n[r]??-1];if(i!==void 0)for(let a=r+1;a<n.length;a+=1){let t=e[n[a]??-1];if(t!==void 0&&G(i)&&G(t)&&!A(i)&&!A(t)&&!i.manaHandoffToOpponent&&!t.manaHandoffToOpponent&&!i.hasRoundtrip&&!t.hasRoundtrip&&!i.winsImmediately&&!t.winsImmediately&&!i.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!t.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!t.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!t.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&!t.safeOpponentManaPickupNow&&!i.supermanaProgress&&!t.supermanaProgress&&!i.opponentManaProgress&&!t.opponentManaProgress&&i.sameTurnScoreWindowValue===0&&t.sameTurnScoreWindowValue===0)return!0}}return!1}l(Tc,"safePlainSpiritCompetition");function fS(e,n,o){if(!N(o)||n.length<2)return!1;for(let r=0;r<n.length;r+=1){let i=e[n[r]??-1];if(i!==void 0)for(let a=r+1;a<n.length;a+=1){let t=e[n[a]??-1];if(t!==void 0&&_r(i,t)&&A(i)!==A(t))return!0}}return!1}l(fS,"safeProgressCompetition");function mS(e,n,o,r){if(!N(r)||e.activeColor!==0||e.turnNumber>3||e.monsMovesCount<1||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!G(n),a=o.spiritOwnManaSetupNow&&o.opponentManaProgress&&!G(o);if(i===a)return!1;let t=i?[n,o]:[o,n],[s,u]=t;return G(u)?Tt(s,u)&&s.efficiency===u.efficiency&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!s.manaHandoffToOpponent&&!u.manaHandoffToOpponent&&!s.hasRoundtrip&&!u.hasRoundtrip&&!s.winsImmediately&&!u.winsImmediately&&!s.attacksOpponentDrainer&&!u.attacksOpponentDrainer&&!s.scoresSupermanaThisTurn&&!u.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!u.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!u.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!u.safeOpponentManaPickupNow&&s.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&s.supermanaProgress===u.supermanaProgress&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.opponentManaProgress===u.opponentManaProgress&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps:!1}l(mS,"isCurrentProWhiteSpiritFollowupSetupPair");function SS(e,n,o,r){for(let i=0;i<o.length;i+=1){let a=n[o[i]??-1];if(a!==void 0)for(let t=i+1;t<o.length;t+=1){let s=n[o[t]??-1];if(s!==void 0&&mS(e,a,s,r))return!0}}return!1}l(SS,"whiteSpiritFollowupSetupCompetition");function Is(e){return E(e)===7&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Is,"nonConcreteManaWindowRoot");function yS(e,n,o,r){if(!N(r)||o.length<2||e.activeColor!==1||e.turnNumber>4)return!1;for(let i=0;i<o.length;i+=1){let a=n[o[i]??-1];if(a!==void 0)for(let t=i+1;t<o.length;t+=1){let s=n[o[t]??-1];if(s===void 0)continue;let u=Is(a),c=Is(s);if(u===c)continue;let p=u?a:s,d=u?s:a;if(p.sameTurnScoreWindowValue<=1&&d.sameTurnScoreWindowValue===0&&E(d)===7&&d.ownDrainerVulnerable===p.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===p.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&xa(d,p)&&R(d.score,192)>=p.score)return!0}}return!1}l(yS,"blackManaWindowProgressCompetition");function hS(e,n,o){if(!N(o)||n.length<2)return!1;let r=n.map(i=>e[i]?.score).filter(i=>i!==void 0&&i>=0).sort((i,a)=>a-i);return r.length>=2&&L(r[0]??0,r[1]??0)<=64}l(hS,"closePositiveScoreCompetition");function QC(e,n,o,r){if(!Ct(r)||n.length<2)return new Map;let i=Tc(e,n,r),a=e[n[0]??-1],t=a!==void 0&&(a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn),s=n.some(f=>{let m=e[f];return m!==void 0&&G(m)&&io(m,o)});if(!t&&!s)return new Map;let u;s?u=i?r.enableTurnEngineLowBudgetGuard?Math.min(n.length,4):n.length:Math.min(n.length,r.enableTurnEngineLowBudgetGuard?4:8):u=Math.min(n.length,r.enableTurnEngineLowBudgetGuard?3:6);let c=cS(r),p=Ga(r),d=new Map;for(let f of n.slice(0,u)){if(T())return new Map;let m=e[f];if(m===void 0||!io(m,o))continue;let h=N(r)&&m.ownDrainerVulnerable&&!m.manaHandoffToOpponent&&!m.hasRoundtrip?p:c,y=r.buildTurnEnginePlanForReplyRisk===void 0?ro(m.game,o,h):r.buildTurnEnginePlanForReplyRisk(m,f,o,h);y!==void 0&&d.set(f,{plan:y})}return s&&!t&&!i&&![...d.values()].some(({plan:f})=>lS(f.headFamily))?new Map:d}l(QC,"turnEngineReplyRiskProjections");function Jm(e,n){return io(e,n)&&!G(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!A(e)&&!e.hasRoundtrip}l(Jm,"canChallengeSpiritPreferenceRoot");function eS(e,n){return io(e,n)&&!G(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(eS,"canChallengeSpiritPreferenceRootWithRecoveryProjection");function ZC(e,n,o,r){if(!Ct(r))return new Map;let i=r.enableTurnEngineLowBudgetGuard?4:6,a=n.filter(f=>{let m=e[f];return m!==void 0&&G(m)&&io(m,o)}).sort((f,m)=>Da(e,f,m)).slice(0,i),t=r.enableTurnEngineLowBudgetGuard?2:4,s=n.filter(f=>{let m=e[f];return m!==void 0&&(Jm(m,o)||eS(m,o))}).sort((f,m)=>Da(e,f,m)).slice(0,t),u=[...a];for(let f of s)u.includes(f)||u.push(f);if(u.length<2)return new Map;let c=cS(r),p=Ga(r),d=new Map;for(let f of u){let m=e[f];if(m===void 0)continue;let h=eS(m,o)&&!Jm(m,o)?p:c,y=r.buildTurnEnginePlanForReplyRisk===void 0?ro(m.game,o,h):r.buildTurnEnginePlanForReplyRisk(m,f,o,h);y!==void 0&&d.set(f,{plan:y})}return d}l(ZC,"buildSpiritRootProjections");function so(e,n,o){if(T())return 0;let r=e.winnerColor();if(r!==void 0)return r===n?Math.trunc(cn/2):-Math.trunc(cn/2);let i=o.spiritFollowupFloorScore?.(e,n);if(i!==void 0)return i;let a=o.evaluateGame===void 0?Mc(e,n,1,o):void 0;if(a!==void 0){let s=hc(dc,a);if(s!==void 0)return s}let t=_o(e,n,o);return ye()&&a!==void 0&&bc(dc,a,t),t}l(so,"spiritFollowupFloorScore");function Wa(e,n,o,r,i,a,t){let s=n[o],u=n[r];if(!Ct(a)||e.turnNumber>3||s===void 0||u===void 0||!G(s)||!G(u)||A(s)||A(u)||s.manaHandoffToOpponent||u.manaHandoffToOpponent||s.hasRoundtrip||u.hasRoundtrip||s.supermanaProgress||s.opponentManaProgress||u.supermanaProgress||u.opponentManaProgress||s.sameTurnScoreWindowValue>0||u.sameTurnScoreWindowValue>0||s.spiritSameTurnScoreSetupNow||u.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||u.spiritOwnManaSetupNow||Math.abs(s.score-u.score)>224)return;let c=t.get(o)??so(s.game,i,a);t.set(o,c);let p=t.get(r)??so(u.game,i,a);return t.set(r,p),c>=R(p,32)?1:p>=R(c,32)?-1:0}l(Wa,"spiritFollowupFloorOrder");function nS(e,n,o,r){return N(r)&&e.activeColor===1&&e.turnNumber<=4&&G(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&Tt(n,o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(nS,"isCurrentProBlackPlainSpiritFollowupSetupPair");function bS(e,n,o,r,i,a,t,s,u){let c=n[o],p=n[i];if(c===void 0||p===void 0)return;let d,f,m,S,h,y,M;if(nS(e,c,p,s))d=c,f=r,m=p,S=a,h=o,y=i,M=!0;else if(nS(e,p,c,s))d=p,f=a,m=c,S=r,h=i,y=o,M=!1;else return;if(f.allowsImmediateOpponentWin||S.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||S.opponentReachesMatchPoint)return;let C=u.get(h)??so(d.game,t,s);u.set(h,C);let k=u.get(y)??so(m.game,t,s);if(u.set(y,k),m.rootRank<=d.rootRank&&R(m.score,64)>=d.score&&m.spiritSetupGain>=R(d.spiritSetupGain,32)&&R(S.worstReplyScore,192)>=f.worstReplyScore&&R(k,32)>=C)return M?-1:1;if(!(R(f.worstReplyScore,192)<S.worstReplyScore||C<R(k,32)&&d.score<m.score))return M?1:-1}l(bS,"blackPlainSpiritFollowupReplyOrder");function wc(e,n,o,r,i,a,t,s,u){let c=n[o],p=n[i];if(!N(s)||e.activeColor!==1||e.turnNumber>2||c===void 0||p===void 0||!G(c)||!G(p)||!Tt(c,p)||c.ownDrainerVulnerable!==p.ownDrainerVulnerable||c.manaHandoffToOpponent!==p.manaHandoffToOpponent||c.hasRoundtrip!==p.hasRoundtrip||c.spiritSameTurnScoreSetupNow||p.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||p.spiritOwnManaSetupNow||c.winsImmediately||p.winsImmediately||c.attacksOpponentDrainer||p.attacksOpponentDrainer||r.allowsImmediateOpponentWin||a.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||a.opponentReachesMatchPoint)return;let d=u.get(o)??so(c.game,t,s);u.set(o,d);let f=u.get(i)??so(p.game,t,s);u.set(i,f);let m=r.worstReplyScore>=R(a.worstReplyScore,96)&&R(d,32)>=f&&R(c.score,48)>=p.score,S=a.worstReplyScore>=R(r.worstReplyScore,96)&&R(f,32)>=d&&R(p.score,48)>=c.score;if(m===S){let h=r.worstReplyScore<R(a.worstReplyScore,96)&&d<R(f,96),y=a.worstReplyScore<R(r.worstReplyScore,96)&&f<R(d,96);return h&&y&&c.score!==p.score?c.score>p.score?1:-1:void 0}return m?1:-1}l(wc,"earlyBlackPlainSpiritSiblingOrder");function MS(e,n,o,r,i,a){if(!N(a)||e.activeColor!==1||e.turnNumber>4||o.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let t=E(n),s=E(r),u=l(M=>M===7||M===3||M===4,"allowed");if(!u(t)||!u(s)||Math.abs(n.rootRank-r.rootRank)>8)return;let c=z(n),p=z(r),d=xa(n,r)||c&&!p,f=xa(r,n)||p&&!c;if(d===f)return;let m=Is(n),S=Is(r);if(m!==S){let M=m?n:r,C=m?o:i,k=m?r:n,b=m?i:o;if(M.sameTurnScoreWindowValue<=1&&k.sameTurnScoreWindowValue===0&&E(k)===7&&k.ownDrainerVulnerable===M.ownDrainerVulnerable&&k.ownDrainerWalkVulnerable===M.ownDrainerWalkVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&xa(k,M)&&R(b.worstReplyScore,96)>=C.worstReplyScore&&R(k.score,192)>=M.score)return m?-1:1}let h=R(o.worstReplyScore,240)>=i.worstReplyScore,y=R(i.worstReplyScore,240)>=o.worstReplyScore;if(d&&n.score>r.score&&h)return 1;if(f&&r.score>n.score&&y)return-1}l(MS,"earlyBlackManaProgressReplyOrder");function kS(e,n,o,r,i,a,t,s,u){let c=n[o],p=n[i];if(!N(s)||e.activeColor!==1||e.turnNumber>4||c===void 0||p===void 0)return;let d=G(c),f=G(p),m=E(c)===7,S=E(p)===7;if(d===f||m===S)return;let h=d?c:p,y=d?r:a,M=d?o:i,C=d?p:c,k=d?a:r,b=d?i:o;if(!Tt(h,C)||h.ownDrainerVulnerable!==C.ownDrainerVulnerable||h.ownDrainerWalkVulnerable!==C.ownDrainerWalkVulnerable||y.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||y.opponentReachesMatchPoint||k.opponentReachesMatchPoint||h.manaHandoffToOpponent||C.manaHandoffToOpponent||h.hasRoundtrip||C.hasRoundtrip||h.winsImmediately||C.winsImmediately||h.attacksOpponentDrainer||C.attacksOpponentDrainer||h.sameTurnScoreWindowValue>0||C.sameTurnScoreWindowValue>0||h.scoresSupermanaThisTurn||C.scoresSupermanaThisTurn||h.scoresOpponentManaThisTurn||C.scoresOpponentManaThisTurn||h.safeSupermanaPickupNow||C.safeSupermanaPickupNow||h.safeOpponentManaPickupNow||C.safeOpponentManaPickupNow||h.spiritSameTurnScoreSetupNow||h.spiritOwnManaSetupNow||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow||C.supermanaProgress||C.opponentManaProgress||R(h.score,24)<C.score||R(y.worstReplyScore,192)<k.worstReplyScore)return;let w=u.get(M)??so(h.game,t,s);u.set(M,w);let P=u.get(b)??so(C.game,t,s);if(u.set(b,P),!(R(w,32)<P))return d?1:-1}l(kS,"earlyBlackPlainSpiritManaReplyOrder");function CS(e,n,o,r,i,a,t,s,u){if(!Ct(s))return;let c=n[o],p=n[i];if(c===void 0||p===void 0)return;let d=G(c),f=G(p);if(d===f)return;let m=d?p:c,S=d?a:r,h=d?i:o,y=d?c:p,M=d?r:a,C=d?o:i;if(A(m)||A(y)||S.allowsImmediateOpponentWin||M.allowsImmediateOpponentWin||S.opponentReachesMatchPoint||M.opponentReachesMatchPoint||m.manaHandoffToOpponent||y.manaHandoffToOpponent||m.hasRoundtrip||y.hasRoundtrip||m.ownDrainerVulnerable||y.ownDrainerVulnerable||m.ownDrainerWalkVulnerable||y.ownDrainerWalkVulnerable||m.spiritSameTurnScoreSetupNow||m.spiritOwnManaSetupNow||y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow||m.winsImmediately||y.winsImmediately||m.attacksOpponentDrainer||y.attacksOpponentDrainer||m.sameTurnScoreWindowValue>0||y.sameTurnScoreWindowValue>0)return;let k=u.get(h)??so(m.game,t,s);u.set(h,k);let b=u.get(C)??so(y.game,t,s);u.set(C,b);let w=R(S.worstReplyScore,192)>=M.worstReplyScore,P=e.turnNumber<=2&&!m.supermanaProgress&&!m.opponentManaProgress&&m.score>=R(y.score,48)&&S.worstReplyScore>=96&&k>=b;if(!(R(m.score,32)<y.score||!w&&!P)&&(k>=R(b,48)||P))return d?-1:1}l(CS,"safeNonSpiritFollowupOrder");function TS(e,n,o,r,i,a){if(!mS(e,n,r,a))return;let t=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!G(n),s=t?n:r,u=t?o:i,c=t?r:n,p=t?i:o;if(!Tt(s,c)||s.efficiency!==c.efficiency||s.ownDrainerVulnerable!==c.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==c.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||c.manaHandoffToOpponent||s.hasRoundtrip||c.hasRoundtrip||s.winsImmediately||c.winsImmediately||s.attacksOpponentDrainer||c.attacksOpponentDrainer||s.scoresSupermanaThisTurn||c.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||c.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||c.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||c.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||s.supermanaProgress||c.supermanaProgress||u.allowsImmediateOpponentWin||p.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.opponentReachesMatchPoint)return;let d=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(R(s.score,96)<c.score||R(u.worstReplyScore,d)<p.worstReplyScore||s.rootRank>c.rootRank+8))return t?1:-1}l(TS,"whiteSpiritFollowupSetupReplyOrder");function oS(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!uS(e)&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue<=0&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(oS,"isFlatLateManaOnlyReplyRoot");function wS(e,n,o,r,i,a){if(!N(a)||a.enableTurnEngineLateSafeManaRootPreference!==!0||e.activeColor!==0||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||i.opponentReachesMatchPoint||!oS(n)||!oS(r))return;let t,s,u;if(!n.ownDrainerVulnerable&&r.ownDrainerVulnerable)t=n,s=r,u=!0;else if(n.ownDrainerVulnerable&&!r.ownDrainerVulnerable)t=r,s=n,u=!1;else return;if(!(s.score<=t.score||L(s.score,t.score)>16||Math.abs(s.rootRank-t.rootRank)>4||s.efficiency<=t.efficiency))return u?1:-1}l(wS,"lateSafeManaRootOrder");function kt(e,n){return n===0?e.whiteScore:e.blackScore}l(kt,"scoreForColor");function rS(e,n,o,r,i){let a=Math.max(0,kt(e,n)-o),t=e.winnerColor();if(t!==void 0){let S=t===n;return{allowsImmediateOpponentWin:!S,opponentReachesMatchPoint:!S,opponentMaxScoreGain:S?0:Ae,myScoreGain:a,worstReplyScore:S?Math.trunc(cn/2):-Math.trunc(cn/2)}}if(e.activeColor===n)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:a,worstReplyScore:_o(e,n,r)};let s=n===0?1:0,u=kt(e,s),c=Kn(e,Math.max(1,Math.trunc(i)));if(c.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:a,worstReplyScore:Math.trunc(cn/4)};let p=!1,d=!1,f=0,m=2147483647;for(let S of c){let h=S.game,y=kt(h,s);f=Math.max(f,Math.max(0,y-u)),Ae-y<=1&&(d=!0);let M=h.winnerColor(),C;if(M===n?C=Math.trunc(cn/2):M!==void 0?(p=!0,d=!0,C=-Math.trunc(cn/2)):C=_o(h,n,r),m=Math.min(m,C),p)break}return m===2147483647&&(m=_o(e,n,r)),{allowsImmediateOpponentWin:p,opponentReachesMatchPoint:d,opponentMaxScoreGain:f,myScoreGain:a,worstReplyScore:m}}l(rS,"normalRootSafetySnapshot");function tS(e,n,o,r){return e.allowsImmediateOpponentWin!==o.allowsImmediateOpponentWin?!e.allowsImmediateOpponentWin:e.opponentReachesMatchPoint!==o.opponentReachesMatchPoint?!e.opponentReachesMatchPoint:e.opponentMaxScoreGain!==o.opponentMaxScoreGain?e.opponentMaxScoreGain<o.opponentMaxScoreGain:e.myScoreGain!==o.myScoreGain?e.myScoreGain>o.myScoreGain:e.worstReplyScore!==o.worstReplyScore?e.worstReplyScore>o.worstReplyScore:n>r}l(tS,"betterNormalRootSafetyCandidate");function aS(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!uS(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}l(aS,"quietNonTacticalReplyRiskRoot");function JC(e){return e.preference!==void 0&&e.scoringKey!==void 0&&e.useTranspositionTable!==void 0}l(JC,"completeExecutionConfig");function eT(e,n,o,r){if(T())return 0;let i=e.winnerColor();if(i!==void 0)return i===n?Math.trunc(cn/2):-Math.trunc(cn/2);if(e.activeColor===n)return _o(e,n,o);if(!JC(o))return hn(e,n,o,r).worstReplyScore;let a=l((d,f,m)=>Math.min(m,Math.max(f,Math.trunc(d))),"clamp"),t=a(o.nodeBranchLimit,5,12),s=a(Math.max(0,o.nodeBranchLimit-4),4,10),u={...o,depth:1,maxVisitedNodes:a(o.maxVisitedNodes/18,110,360),rootBranchLimit:t,nodeBranchLimit:s,rootEnumLimit:a(t*3,t,48),nodeEnumLimit:a(s*3,s,36)},c=Kn(e,Math.max(1,Math.trunc(r)));if(Y())return 0;if(c.length===0)return Math.trunc(cn/4);let p=2147483647;for(let d of c){if(T())return 0;let f=d.game.winnerColor(),m=f===n?Math.trunc(cn/2):f!==void 0?-Math.trunc(cn/2):zm(d.game,n,1,u);if(Y())return 0;p=Math.min(p,m)}return p===2147483647?_o(e,n,o):p}l(eT,"normalRootSafetyDeepFloorScore");function RS(e,n,o,r,i,a,t){if(!N(t)||t.enableNormalRootSafetyRerank!==!0||!aS(n)||!aS(r)||Math.abs(n.rootRank-r.rootRank)>8||Math.abs(n.score-r.score)>160||Math.abs(o.worstReplyScore-i.worstReplyScore)>320||!(z(n)||z(r)||n.spiritOwnManaSetupNow||r.spiritOwnManaSetupNow||n.spiritSameTurnScoreSetupNow||r.spiritSameTurnScoreSetupNow||_r(n,r)||Va(n,r,t)))return;let u=Math.min(36,Math.max(12,Math.trunc(t.nodeEnumLimit??12))),c=kt(e,a),p=rS(n.game,a,c,t,u),d=rS(r.game,a,c,t,u);if(p.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||p.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||p.opponentMaxScoreGain!==d.opponentMaxScoreGain||p.myScoreGain!==d.myScoreGain||p.worstReplyScore!==d.worstReplyScore){if(tS(p,n.score,d,r.score))return 1;if(tS(d,r.score,p,n.score))return-1}let m=Ae-kt(e,a),S=Ae-kt(e,a===0?1:0);if(t.enableNormalRootSafetyDeepFloor===!0&&(m<=3||S<=3)){let h=l(C=>t.normalRootSafetyDeepFloorScore?.(C,a,u)??eT(C,a,t,u),"floor"),y=h(n.game),M=h(r.game);if(y!==M)return y>M?1:-1}}l(RS,"normalSafetyReplyOrder");function dr(e){switch(e){case 0:return 7;case 1:return 6;case 2:return 5;case 5:return 4;case 6:return 3;case 3:return 2;case 4:return 1;case 7:return 0}}l(dr,"closeSpiritGoalFamilyPriority");function nT(e,n){return e.plan.headFamily!==6||n.plan.headFamily!==6?0:dr(e.plan.goalFamily)-dr(n.plan.goalFamily)}l(nT,"compareCloseSpiritGoalFamily");function Ba(e,n,o){if(o){let r=oe(e.plan.headUtility,n.plan.headUtility);if(r!==0||(r=oe(e.plan.utility,n.plan.utility),r!==0))return r;let i=e.plan.headFamily===6,a=n.plan.headFamily===6;if(i!==a)return i?1:-1;if(r=nT(e,n),r!==0)return r}return Co(e.plan,n.plan)}l(Ba,"compareSpiritProjectionPlans");function Ns(e,n,o,r,i){if(!N(i))return;let a=n.plan.headFamily===6,t=r.plan.headFamily===6;if(a===t)return;let s=a?o:e,u=a?r:n,c=a?e:o,p=a?n:r,d=dr(p.plan.goalFamily),f=dr(u.plan.goalFamily);if(!(d>dr(6)||f<d||s.worstReplyScore<R(c.worstReplyScore,128)||oe(u.plan.utility,p.plan.utility)<0&&!u.plan.utility.supportsFamilyFallback(p.plan.utility)))return a?-1:1}l(Ns,"mixedPlainSpiritReplyFloorOrder");function Rc(e,n,o,r,i,a,t,s,u){if(!Ct(s))return;let c=r.plan.headFamily===6,p=a.plan.headFamily===6;if(c===p)return;let d=n[o],f=n[i];if(d===void 0||f===void 0)return;let m=c?f:d,S=c?a:r,h=c?d:f,y=c?r:a,M=!c,C=Wa(e,n,o,i,t,s,u),k=M?o:i,b=M?i:o,w=dr(S.plan.goalFamily),P=dr(y.plan.goalFamily);return w>=P&&P<=dr(6)&&m.score>=h.score&&Go(n,k,b)>0&&oe(S.plan.utility,y.plan.utility)>=0?M?1:-1:P>w&&oe(y.plan.utility,S.plan.utility)>=0&&oe(y.plan.headUtility,S.plan.headUtility)>=0?M?-1:1:(S.plan.headFamily===3||S.plan.headFamily===4||S.plan.headFamily===5)&&(C===0||S.plan.utility.supportsFamilyFallback(y.plan.utility))&&m.score>=h.score&&Co(S.plan,y.plan)>0?M?1:-1:c?1:-1}l(Rc,"mixedPlainSpiritProjectionOrder");function PS(e,n,o,r,i,a,t,s){if(!N(t)||o.length<2)return;let u=o.filter(p=>{let d=n[p];return d!==void 0&&G(d)});if(u.length<2||u.some(p=>!i.has(p)))return;let c=u[0];if(c!==void 0){for(let p of u.slice(1)){let d=n[p],f=n[c],m=i.get(p),S=i.get(c),h=r.get(p),y=r.get(c);if(d===void 0||f===void 0||m===void 0||S===void 0||h===void 0||y===void 0)continue;let M=wc(e,n,p,h,c,y,a,t,s);M??(M=Ns(h,m,y,S,t)),M??(M=Rc(e,n,p,m,c,S,a,t,s)),M===void 0&&(m.plan.headFamily===6&&S.plan.headFamily===6?M=Ba(m,S,Math.abs(d.score-f.score)<=192):(M=Wa(e,n,p,c,a,t,s),M??(M=Go(n,p,c)))),M>0&&(c=p)}return c}}l(PS,"plainSpiritReplyRiskPick");function OS(e,n,o,r){let i=G(e),a=G(o);if(i===a||n===void 0||r===void 0)return;let t=i?o:e,s=i?r:n,u=i?e:o,c=i?n:r,p=A(t),d=A(u),f=p&&!d&&(s.plan.utility.supportsTemporaryRiskRecovery()&&oe(s.plan.utility,c.plan.utility)>=0&&s.plan.utility.supportsFamilyFallback(c.plan.utility)||s.plan.goalFamily===0&&oe(s.plan.utility,c.plan.utility)>=0);if(!(p&&!d&&!f)){if(f)return i?-1:1;if(!(s.plan.headFamily===6||!s.plan.utility.passesOverrideGuard(c.plan.utility)||oe(s.plan.headUtility,c.plan.headUtility)<0||oe(s.plan.utility,c.plan.utility)<=0))return i?-1:1}}l(OS,"spiritProjectionChallengeOrder");function ES(e,n){let o=G(e),r=G(n);if(o===r)return;let i=o?n:e,a=o?e:n;if(!(A(i)||i.hasRoundtrip||i.score<R(a.score,40)||i.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return o?-1:1}l(ES,"spiritScoreChallengeOrder");function gS(e,n,o,r,i){if(!N(i)||!_r(e,o)||n.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let a=!A(e),t=!A(o);if(a===t)return;let s=R(n.worstReplyScore,240)>=r.worstReplyScore,u=R(r.worstReplyScore,240)>=n.worstReplyScore;if(a&&s)return 1;if(t&&u)return-1}l(gS,"safeProgressSiblingOrder");function vS(e,n,o,r,i,a,t){if(!N(t)||!_r(e,o))return;let s=A(e),u=A(o);if(s===u||i===void 0||a===void 0)return;let c=s?e:o,p=s?n:r,d=s?i:a,f=s?o:e,m=s?r:n,S=s?a:i;if(!(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint||d.plan.goalFamily!==0||oe(d.plan.utility,S.plan.utility)<0||R(p.worstReplyScore,160)<m.worstReplyScore||R(c.score,32)<f.score))return s?1:-1}l(vS,"riskyRecoveryProgressSiblingOrder");function Tt(e,n){let o=e.inputs[0],r=n.inputs[0];return o!==void 0&&r!==void 0&&_n(o)===_n(r)}l(Tt,"sameFirstInput");function Va(e,n,o){return N(o)&&Tt(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!A(e)&&!A(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress}l(Va,"sameOpeningSafeSetupPair");function AS(e,n,o,r,i){return N(i)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&Va(e,o,i)&&e.rootRank+3<=o.rootRank&&R(e.score,128)>=o.score&&R(n.worstReplyScore,160)>=r.worstReplyScore}l(AS,"omittedSameOpeningSetupCompetes");function IS(e,n,o,r,i){if(!N(i))return;let a=e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow,t=o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow;if(a===t)return;let s=a?e:o,u=a?n:r,c=a?o:e,p=a?r:n,d=c.supermanaProgress||c.opponentManaProgress||c.spiritOwnManaSetupNow||c.spiritSameTurnScoreSetupNow||c.spiritDevelopment;if(!(A(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||c.winsImmediately||c.attacksOpponentDrainer||!d||R(s.score,144)<c.score||R(u.worstReplyScore,192)<p.worstReplyScore))return a?1:-1}l(IS,"safePickupOrder");function oT(e,n,o,r,i){return N(i)&&G(e)&&G(o)&&!A(e)&&!A(o)&&!n.allowsImmediateOpponentWin&&!r.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!r.opponentReachesMatchPoint&&!e.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!e.hasRoundtrip&&!o.hasRoundtrip&&!e.winsImmediately&&!o.winsImmediately&&!e.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&!e.supermanaProgress&&!o.supermanaProgress&&!e.opponentManaProgress&&!o.opponentManaProgress&&e.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0}l(oT,"safePlainSpiritReplyRiskPair");function iS(e,n,o,r,i,a={}){if(e.winsImmediately!==o.winsImmediately)return e.winsImmediately;if(e.attacksOpponentDrainer!==o.attacksOpponentDrainer)return e.attacksOpponentDrainer;if(n.allowsImmediateOpponentWin!==r.allowsImmediateOpponentWin)return!n.allowsImmediateOpponentWin;if(n.opponentReachesMatchPoint!==r.opponentReachesMatchPoint)return!n.opponentReachesMatchPoint;let t=a.game!==void 0&&a.evaluations!==void 0&&a.candidateIndex!==void 0&&a.incumbentIndex!==void 0&&a.perspective!==void 0,s=a.spiritFollowupScores??new Map;if(a.game!==void 0){let m=wS(a.game,e,n,o,r,i);if(m!==void 0)return m>0}let u=vS(e,n,o,r,a.candidateProjection,a.incumbentProjection,i);if(u!==void 0)return u>0;let c=gS(e,n,o,r,i);if(c!==void 0)return c>0;if(a.game!==void 0){let m=MS(a.game,e,n,o,r,i);if(m!==void 0)return m>0}if(t){let m=a.game,S=a.evaluations,h=a.candidateIndex,y=a.incumbentIndex,M=a.perspective,C=kS(m,S,h,n,y,r,M,i,s);if(C!==void 0)return C>0;let k=CS(m,S,h,n,y,r,M,i,s);if(k!==void 0)return k>0;let b=bS(m,S,h,n,y,r,M,i,s);if(b!==void 0)return b>0;let w=wc(m,S,h,n,y,r,M,i,s);if(w!==void 0)return w>0;let P=TS(m,e,n,o,r,i);if(P!==void 0)return P>0}let p=IS(e,n,o,r,i);if(p!==void 0)return p>0;if(a.game!==void 0&&a.perspective!==void 0){let m=RS(a.game,e,n,o,r,a.perspective,i);if(m!==void 0)return m>0}let d=e.classes.carrierProgress&&!o.classes.carrierProgress,f=o.classes.carrierProgress&&!e.classes.carrierProgress;if((d||f)&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!o.classes.immediateScore&&!o.classes.drainerAttack&&!o.classes.drainerSafetyRecover&&Math.abs(n.worstReplyScore-r.worstReplyScore)<=80)return d;if(i.preferCleanReplyRiskRoots??!0){if(e.manaHandoffToOpponent!==o.manaHandoffToOpponent)return!e.manaHandoffToOpponent;if(e.hasRoundtrip!==o.hasRoundtrip)return!e.hasRoundtrip}if(oT(e,n,o,r,i)){if(a.candidateProjection!==void 0&&a.incumbentProjection!==void 0&&Math.abs(e.score-o.score)<=16&&e.efficiency===o.efficiency){let S=Ns(n,a.candidateProjection,r,a.incumbentProjection,i);if(S!==void 0)return S>0;if(t){let y=Rc(a.game,a.evaluations,a.candidateIndex,a.candidateProjection,a.incumbentIndex,a.incumbentProjection,a.perspective,i,s);if(y!==void 0)return y>0}if(a.candidateProjection.plan.headFamily===6||a.incumbentProjection.plan.headFamily===6){let y=Ba(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(y!==0)return y>0}}if(t){let S=Wa(a.game,a.evaluations,a.candidateIndex,a.incumbentIndex,a.perspective,i,s);return S!==void 0&&S!==0?S>0:Go(a.evaluations,a.candidateIndex,a.incumbentIndex)>0}if(e.score!==o.score)return e.score>o.score;let m=Cc(e,o);return m<0||m===0&&e.rootRank<o.rootRank}if(t){let m=Wa(a.game,a.evaluations,a.candidateIndex,a.incumbentIndex,a.perspective,i,s);if(m!==void 0&&m!==0)return m>0}if(N(i)&&Math.abs(n.worstReplyScore-r.worstReplyScore)>240)return n.worstReplyScore>r.worstReplyScore;if(N(i)&&e.interviewSoftPriority!==o.interviewSoftPriority&&e.efficiency>=o.efficiency)return e.interviewSoftPriority>o.interviewSoftPriority;if(i.enableInterviewDeterministicTiebreak&&e.spiritOwnManaSetupNow!==o.spiritOwnManaSetupNow){let m=Va(e,o,i);if(!N(i)||m||Math.abs(n.worstReplyScore-r.worstReplyScore)<=120)return e.spiritOwnManaSetupNow}if(i.enableInterviewDeterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.supermanaProgress&&o.supermanaProgress&&e.safeSupermanaProgressSteps!==o.safeSupermanaProgressSteps)return pr(e.safeSupermanaProgressSteps,o.safeSupermanaProgressSteps);if(i.enableInterviewDeterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.opponentManaProgress&&o.opponentManaProgress&&e.safeOpponentManaProgressSteps!==o.safeOpponentManaProgressSteps)return pr(e.safeOpponentManaProgressSteps,o.safeOpponentManaProgressSteps);if(i.enableInterviewDeterministicTiebreak&&e.spiritOwnManaSetupNow&&o.spiritOwnManaSetupNow&&e.scorePathBestSteps!==o.scorePathBestSteps)return sS(e.scorePathBestSteps,o.scorePathBestSteps);if(i.enableInterviewDeterministicTiebreak&&e.spiritDevelopment!==o.spiritDevelopment){let m=OS(e,a.candidateProjection,o,a.incumbentProjection);if(m!==void 0)return m>0;let S=ES(e,o);if(S!==void 0&&(!N(i)||Math.abs(n.worstReplyScore-r.worstReplyScore)<=120))return S>0;if(!N(i)||Math.abs(n.worstReplyScore-r.worstReplyScore)<=120)return e.spiritDevelopment}if(a.candidateProjection!==void 0&&a.incumbentProjection!==void 0){let m=Math.abs(n.worstReplyScore-r.worstReplyScore)<=100,S=!n.allowsImmediateOpponentWin&&!r.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!r.opponentReachesMatchPoint,h=mc(a.candidateProjection.plan.headFamily)||mc(a.incumbentProjection.plan.headFamily),y=e.spiritOwnManaSetupNow||o.spiritOwnManaSetupNow||e.spiritSameTurnScoreSetupNow||o.spiritSameTurnScoreSetupNow||e.spiritDevelopment||o.spiritDevelopment;if(N(i)&&G(e)&&G(o)&&m&&a.candidateProjection.plan.utility.hasNonnegativeDenyGain()&&a.incumbentProjection.plan.utility.hasNonnegativeDenyGain()&&S){let k=Ba(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(k!==0)return k>0}if(N(i)&&e.spiritDevelopment&&o.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!o.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!o.spiritOwnManaSetupNow&&m&&S){let k=Ba(a.candidateProjection,a.incumbentProjection,Math.abs(e.score-o.score)<=192);if(k!==0)return k>0}if(h&&S&&m&&!y){let k=Co(a.candidateProjection.plan,a.incumbentProjection.plan);if(k!==0)return k>0}}return e.interviewSoftPriority!==o.interviewSoftPriority?e.interviewSoftPriority>o.interviewSoftPriority:n.worstReplyScore!==r.worstReplyScore?n.worstReplyScore>r.worstReplyScore:e.score!==o.score?e.score>o.score:e.efficiency!==o.efficiency?e.efficiency>o.efficiency:!1}l(iS,"isBetterReplyRiskCandidate");function La(e,n,o,r,i,a=o){if(i.enableRootReplyRiskGuard===!1||T())return;let t=_a(n,o,i);if(t.length===0)return;let s=dS(e,n,t,r,i);s!==void 0&&!t.includes(s)&&(t=[...t,s].sort((y,M)=>-Go(n,y,M)));let u=Math.max(t.length,1,Math.trunc((i.maxVisitedNodes??1e3)*Math.max(0,i.rootReplyRiskNodeShareBp??2e3)/1e4)),c=Math.min(Math.max(1,i.rootReplyRiskReplyLimit??24),Math.max(1,Math.trunc(u/t.length))),p=QC(n,t,r,i),d=new Map;for(let y of t){if(T())return;let M=n[y];if(M===void 0)continue;let C=p.get(y);if(C!==void 0){d.set(y,Ym(M,C,r,i,c));continue}let b=i.enableTurnEngineSelector===!0&&N(i)&&io(M,r)&&!G(M)?i.projectedGameForReplyRisk?.(M,y,r):void 0;d.set(y,hn(b??M.game,r,i,c))}let f=new Map,m=PS(e,n,t,d,p,r,i,f);if(t.every(y=>{let M=n[y];return M!==void 0&&G(M)}))return m;if(N(i)&&t.every(y=>{let M=d.get(y);return M!==void 0&&!M.allowsImmediateOpponentWin&&!M.opponentReachesMatchPoint})&&!Tc(n,t,i)&&!SS(e,n,t,i)&&!fS(n,t,i)&&!yS(e,n,t,i)&&!hS(n,t,i)){let y=[...t].sort((k,b)=>{let w=d.get(k)?.worstReplyScore??-2147483648;return(d.get(b)?.worstReplyScore??-2147483648)-w||-Go(n,k,b)}),M=y[0],C=y[1];if(M!==void 0&&(C===void 0||(d.get(M)?.worstReplyScore??-2147483648)>(d.get(C)?.worstReplyScore??-2147483648)))return M}let S=m??t.find(y=>d.has(y));if(S===void 0)return;for(let y of t){if(y===S)continue;let M=n[y],C=n[S],k=d.get(y),b=d.get(S);M!==void 0&&C!==void 0&&k!==void 0&&b!==void 0&&iS(M,k,C,b,i,{candidateProjection:p.get(y),incumbentProjection:p.get(S),game:e,evaluations:n,candidateIndex:y,incumbentIndex:S,perspective:r,spiritFollowupScores:f})&&(S=y)}if(N(i)&&m!==void 0&&m!==S){let y=d.get(m),M=d.get(S),C=p.get(m),k=p.get(S);y!==void 0&&M!==void 0&&C!==void 0&&k!==void 0&&(Ns(y,C,M,k,i)??-1)>0&&(S=m)}let h=n[S];if(N(i)&&h!==void 0&&!h.spiritDevelopment&&!h.spiritSameTurnScoreSetupNow&&!h.spiritOwnManaSetupNow&&S>=4){let y=a.filter(M=>!t.includes(M)).filter(M=>{let C=n[M];return C!==void 0&&C.spiritOwnManaSetupNow&&C.rootRank+3<=h.rootRank&&Va(C,h,i)}).sort((M,C)=>-Go(n,M,C))[0];if(y!==void 0){let M=n[y],C=d.get(S);if(M!==void 0&&C!==void 0){let k=Ym(M,void 0,r,i,c);(AS(M,k,h,C,i)||iS(M,k,h,C,i,{incumbentProjection:p.get(S),game:e,evaluations:n,candidateIndex:y,incumbentIndex:S,perspective:r,spiritFollowupScores:f}))&&(S=y)}}}return T()?void 0:S}l(La,"pickRootWithReplyRiskGuard");var le=Object.freeze({rootFamily:E,rootIsUnsafe:A,rootHasProgressSurface:z,rootProgressOrSetupBetter:xa,sameNonTacticalProgressLane:_r,sameOpeningSafeSetupPair:Va,safePlainSpiritCompetition:Tc,safeProgressCompetition:fS,whiteSpiritFollowupSetupCompetition:SS,blackManaWindowProgressCompetition:yS,closePositiveScoreCompetition:hS,currentProWhiteTurnFourManaSiblingReentry:dS,turnEngineRootUtility:YC,turnEngineRootPlanUtility:Sc,buildSpiritRootProjections:ZC,spiritFollowupFloorScore:so,spiritFollowupFloorOrder:Wa,lateSafeManaRootOrder:wS,riskyRecoveryProgressSiblingOrder:vS,safeProgressSiblingOrder:gS,earlyBlackManaProgressReplyOrder:MS,earlyBlackPlainSpiritManaReplyOrder:kS,safeNonSpiritFollowupOrder:CS,blackPlainSpiritFollowupReplyOrder:bS,earlyBlackPlainSpiritSiblingOrder:wc,whiteSpiritFollowupSetupReplyOrder:TS,safePickupOrder:IS,normalSafetyReplyOrder:RS,omittedSameOpeningSetupCompetes:AS,mixedPlainSpiritReplyFloorOrder:Ns,mixedPlainSpiritProjectionOrder:Rc,plainSpiritReplyRiskPick:PS,compareSpiritProjectionPlans:Ba,spiritProjectionChallengeOrder:OS,spiritScoreChallengeOrder:ES});var NS=700,rT=180,DS=80,tT=40;function $(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}l($,"valueAt");function Ds(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}l(Ds,"assertRootIndex");function Vo(e,n){let o=n;for(let r of e)o=Math.max(o,r);return o}l(Vo,"maxValue");function aT(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}l(aT,"minValue");function Ha(e,n){return n===0?e.whiteScore:e.blackScore}l(Ha,"scoreForColor");function gc(e,n){return n===0?e.whitePotionsCount:e.blackPotionsCount}l(gc,"potionsForColor");function iT(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=Xn&&e.playerCanMoveMana()&&gc(e,n)>0}l(iT,"shouldPreferPotionTakebackLines");function xS(e,n,o){return gc(n.game,o)<gc(e,o)}l(xS,"rootSpendsPotion");function sT(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||Ha(n.game,o)>=R(Ha(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}l(sT,"rootPotionSpendCompensated");function BS(e,n,o,r,i){let a=Math.max(r.rootAntiHelpReplyLimit,1);return i.rootReplyRiskSnapshot?.(e.game,o,r,a,n).allowsImmediateOpponentWin??!1}l(BS,"immediateOpponentWin");function uo(e){return e.turnEngineMode===_e.CurrentPro}l(uo,"isCurrentPro");function wt(e,n,o,r,i){return{game:e,roots:n,candidateIndices:o,perspective:r,config:i}}l(wt,"selectionContext");function uT(e,n,o,r,i,a,t){return uo(a)&&(t.currentPro?.competition?.(e,wt(n,o,r,i,a))??!1)}l(uT,"currentProCompetition");function Pc(e,n,o,r,i,a,t){let s=["safe-progress","followup-progress","risky-score","negative-deny","score","projection","risky-recovery"],u=!1;for(let c of s)uT(c,e,n,o,r,i,a)&&(c!=="negative-deny"||t?.()!==!0)&&(u=!0);return u}l(Pc,"anyCurrentProCompetition");function lT(e,n,o){let r=o?.spiritSetupCompetesWithBest;if(r===void 0)return!1;let i=e.candidateIndices.filter(a=>!$(e.roots,a).spiritDevelopment);return n.some(a=>i.every(t=>r(e,a,t)))}l(lT,"spiritSetupOverridesNegativeDeny");function Oc(e,n,o,r){let i=aT(n.map(a=>o($(e,a))).filter(a=>a<r));return i===void 0?[...n]:n.filter(a=>o($(e,a))===i)}l(Oc,"retainBestKnownSteps");function Ua(e,n,o,r,i={}){if(n.length===0)return[];let a=n.map((s,u)=>u),t=!1;if(a.some(s=>$(n,s).winsImmediately))return a.filter(s=>$(n,s).winsImmediately);if(a.some(s=>$(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>$(n,s).attacksOpponentDrainer),t=!0),!t&&!a.some(s=>$(n,s).classes.immediateScore)){let s=Vo(a.flatMap(u=>{let c=$(n,u);return!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent?[c.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(c=>{let p=$(n,c);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!t&&a.some(s=>$(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=$(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!t&&a.some(s=>$(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=$(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!t&&!a.some(s=>$(n,s).classes.immediateScore)){let s=Vo(a.flatMap(c=>{let p=$(n,c);return p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0),u=Vo(a.flatMap(c=>{let p=$(n,c);return!p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(c=>{let p=$(n,c);return p.spiritSameTurnScoreSetupNow&&p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent}))}if(!t&&!a.some(s=>$(n,s).classes.immediateScore)&&a.some(s=>{let u=$(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=Vo(a.map(u=>$(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(c=>{let p=$(n,c);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!t){let s=a.filter(u=>{let c=$(n,u);return c.spiritOwnManaSetupNow&&!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent});if(s.length>0&&!Pc(e,n,a,o,r,i,()=>lT(wt(e,n,a,o,r),s,i.currentPro))){let u=s.filter(c=>$(n,c).supermanaProgress);if(u.length>0)a=Oc(n,u,c=>c.safeSupermanaProgressSteps,q+4);else{let c=s.filter(p=>$(n,p).opponentManaProgress);a=c.length>0?Oc(n,c,p=>p.safeOpponentManaProgressSteps,q+4):Oc(n,s,p=>p.scorePathBestSteps,q*3)}}}if(r.enableInterviewHardSpiritDeploy&&!t&&dt(e,o)&&!a.some(u=>{let c=$(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Pc(e,n,a,o,r,i)){let u=a.filter(c=>{let p=$(n,c);return p.spiritOwnManaSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});if(u.length>0)a=u;else{let c=Ha(e,o),p=a.filter(d=>!$(n,d).keepsAwakeSpiritOnBase);if(p.length>0){let d=p.filter(h=>{let y=$(n,h);return!y.ownDrainerVulnerable&&!y.manaHandoffToOpponent}),f=d.length>0?d:p,m=a.some(h=>{let y=$(n,h);return y.keepsAwakeSpiritOnBase&&Ha(y.game,o)>c}),S=f.some(h=>Ha($(n,h).game,o)>c);(!m||S)&&(a=f)}}}if(!t){let s=[...a],u=Vo(a.map(d=>$(n,d).score),-2147483648),c=Math.max(r.rootDrainerSafetyScoreMargin,0),p=a.filter(d=>{let f=$(n,d);return!f.ownDrainerVulnerable&&B(f.score,c)>=u});if(p.length>0&&(a=p,uo(r))){let d=wt(e,n,s,o,r);for(let f of i.currentPro?.safetyReentryIndices?.(d,p)??[]){if(Ds(n,f,"CurrentPro safety reentry callback"),!s.includes(f))throw new RangeError("CurrentPro safety reentry callback selected a root outside the prefilter");a.includes(f)||a.push(f)}}}if(r.enableRootSpiritDevelopmentPref&&dt(e,o)&&a.some(s=>$(n,s).spiritDevelopment)&&!a.some(u=>{let c=$(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Pc(e,n,a,o,r,i)){let u=Vo(a.map(p=>$(n,p).score),-2147483648),c=a.filter(p=>{let d=$(n,p);return d.spiritOwnManaSetupNow&&B(d.score,NS)>=u});if(c.length>0)a=c;else{let p=a.filter(d=>{let f=$(n,d);return f.spiritDevelopment&&B(f.score,NS)>=u});p.length>0&&(a=p)}}if(!t&&a.length>1&&iT(e,o)){let s=Vo(a.map(c=>$(n,c).score),-2147483648),u=a.filter(c=>B($(n,c).score,rT)>=s);if(u.length>1){let c=new Map,p=l(f=>{let m=c.get(f);if(m!==void 0)return m;let S=BS($(n,f),f,o,r,i);return c.set(f,S),S},"allowsLoss");if(u.some(f=>{let m=$(n,f);return!xS(e,m,o)&&!p(f)})){let f=new Set(u),m=a.filter(S=>{let h=$(n,S);return h.winsImmediately||!f.has(S)||!xS(e,h,o)||sT(e,h,o)});m.length>0&&(a=m)}}}if(a.length>1){let s=Vo(a.map(p=>$(n,p).score),-2147483648),u=Math.max(r.rootAntiHelpScoreMargin,0),c=a.filter(p=>B($(n,p).score,u)>=s);if(c.length>1){let p=new Map,d=l(m=>{let S=p.get(m);if(S!==void 0)return S;let h=BS($(n,m),m,o,r,i);return p.set(m,h),h},"allowsLoss");if(c.some(m=>{let S=$(n,m);return!S.manaHandoffToOpponent&&!S.hasRoundtrip&&!d(m)})){let m=new Set(c),S=a.filter(h=>{let y=$(n,h);return y.winsImmediately||!m.has(h)||!y.manaHandoffToOpponent&&!y.hasRoundtrip});S.length>0&&(a=S)}}}if(uo(r)){let s=wt(e,n,a,o,r),u=!1;for(let c of i.currentPro?.finalReentryIndices?.(s)??[])Ds(n,c,"CurrentPro final reentry callback"),a.includes(c)||(a.push(c),u=!0);u&&a.sort((c,p)=>re(n,c,p))}return a}l(Ua,"filteredRootCandidateIndices");function cT(e,n){let o=l((i,a,t)=>{if(i!==a)return i===t?-1:1},"preferBoolean"),r=o(e.winsImmediately,n.winsImmediately,!0);return r??(r=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0)),r??(r=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1)),r??(r=o(e.classes.immediateScore,n.classes.immediateScore,!0)),r??(r=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0)),r??(r=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0)),r??(r=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0)),r??(r=o(e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow,!0)),r!==void 0?r:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue?-1:1:(r=o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow,!0),r??(r=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow,!0)),r!==void 0?r:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?Ye(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?Ye(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Os(e.scorePathBestSteps,n.scorePathBestSteps)?-1:1:(r=o(e.supermanaProgress,n.supermanaProgress,!0),r!==void 0?r:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?Ye(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:(r=o(e.opponentManaProgress,n.opponentManaProgress,!0),r!==void 0?r:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?Ye(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:(r=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),r??(r=o(e.hasRoundtrip,n.hasRoundtrip,!1)),r??(r=o(e.spiritDevelopment,n.spiritDevelopment,!0)),r!==void 0?r:e.interviewSoftPriority!==n.interviewSoftPriority?e.interviewSoftPriority>n.interviewSoftPriority?-1:1:e.efficiency!==n.efficiency?e.efficiency>n.efficiency?-1:1:0))))}l(cT,"compareTacticalRootEvaluations");function re(e,n,o){let r=$(e,n),i=$(e,o);return r.score!==i.score?r.score>i.score?-1:1:cT(r,i)||n-o}l(re,"compareRankedRootEvaluationIndices");function pT(e,n){let o=n[0]??0;for(let r of n)re(e,r,o)<0&&(o=r);return o}l(pT,"bestScoredRootIndex");function dT(e,n){let o=G(e),r=G(n);if(o===r)return;let i=o?n:e,a=o?e:n,t=!o;if(!(A(i)||i.hasRoundtrip||i.score<R(a.score,tT)||i.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return t?1:-1}l(dT,"spiritScoreChallengeOrder");function Ec(e){if(e!==void 0)return e===0?0:e>0?1:-1}l(Ec,"currentProCallbackOrder");function ja(e,n,o,r,i,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let t=wt(e,n,o,r,i);if(i.enableRootReplyRiskGuard){let _=a.pickReplyRiskGuardedIndex?.(t);if(_!==void 0){if(Ds(n,_,"reply-risk guard"),!o.includes(_))throw new RangeError("reply-risk guard selected a root outside its shortlist");return a.cancelled?.()===!0?void 0:_}if(a.cancelled?.()===!0)return}let s=Vo(o.map(_=>$(n,_).score),-2147483648),u=Math.max(i.rootEfficiencyScoreMargin,0),c=pT(n,o),p=-2147483648,d=-2147483648,f=i.enableRootSpiritDevelopmentPref&&dt(e,r),m=uo(i)&&o.filter(_=>G($(n,_))).length>=2,S=$(n,c),h=S.spiritDevelopment,y=S.spiritSameTurnScoreSetupNow,M=S.spiritOwnManaSetupNow,C=S.supermanaProgress,k=S.opponentManaProgress,b=S.scorePathBestSteps,w=S.safeSupermanaProgressSteps,P=S.safeOpponentManaProgressSteps,O=S.sameTurnScoreWindowValue,I=S.spiritSetupGain,D=S.manaHandoffToOpponent,x=S.hasRoundtrip,W=S.interviewSoftPriority;for(let _ of o){if(a.checkpoint?.()===!0)return;let v=$(n,_);S=$(n,c);let j=uo(i)&&e.turnNumber<=3&&G(v)&&G(S)&&L(s,v.score)<=16,de=uo(i)?a.currentPro?.spiritSetupCompetesWithBest?.(t,_,c)??!0:!0;if(B(v.score,u)<s&&!j)continue;let he=f&&v.spiritDevelopment!==h?dT(v,S):void 0;he===void 0&&uo(i)&&f&&v.spiritDevelopment!==h&&Lc(K(v.score,S.score))<=320&&(he=Ec(a.currentPro?.spiritProjectionChallengeOrder?.(t,_,c)));let $e=he===void 0&&f&&v.spiritDevelopment&&!h&&de,ie=!f||v.spiritDevelopment===h||he!==void 0||uo(i)&&de&&(v.spiritOwnManaSetupNow||v.spiritSameTurnScoreSetupNow),Qe=v.spiritSameTurnScoreSetupNow&&!y&&de,ve=v.spiritSameTurnScoreSetupNow===y,ze=v.spiritOwnManaSetupNow&&!M&&de,vn=v.spiritOwnManaSetupNow===M,bn=f&&v.spiritDevelopment&&h&&v.spiritSetupGain>I,te=!f||!v.spiritDevelopment||!h||v.spiritSetupGain===I,Ko=m&&G(v)&&G(S),To=uo(i)&&(f||Ko)&&v.spiritDevelopment&&h?Ec(a.currentPro?.spiritProjectionOrder?.(t,_,c)):void 0,Hr=uo(i)?Ec(a.currentPro?.spiritFollowupFloorOrder?.(t,_,c)):void 0,Rt=v.spiritOwnManaSetupNow&&M&&v.supermanaProgress&&C&&Ye(v.safeSupermanaProgressSteps,w),Pt=!v.spiritOwnManaSetupNow||!M||!v.supermanaProgress||!C||v.safeSupermanaProgressSteps===w,Hs=v.spiritOwnManaSetupNow&&M&&v.opponentManaProgress&&k&&Ye(v.safeOpponentManaProgressSteps,P),Us=!v.spiritOwnManaSetupNow||!M||!v.opponentManaProgress||!k||v.safeOpponentManaProgressSteps===P,js=v.spiritOwnManaSetupNow&&M&&Os(v.scorePathBestSteps,b),Ks=!v.spiritOwnManaSetupNow||!M||v.scorePathBestSteps===b,qs=Ye(v.safeSupermanaProgressSteps,w),zs=v.safeSupermanaProgressSteps===w,$s=Ye(v.safeOpponentManaProgressSteps,P),Xs=v.safeOpponentManaProgressSteps===P,Ys=v.sameTurnScoreWindowValue>O,Qs=v.sameTurnScoreWindowValue===O,Zs=!v.manaHandoffToOpponent&&D,Za=v.manaHandoffToOpponent===D,Ja=!v.hasRoundtrip&&x,ei=v.hasRoundtrip===x,ni=v.interviewSoftPriority>R(W,DS),hr=R(v.interviewSoftPriority,DS)>=W,oi=v.efficiency>p||v.efficiency===p&&v.score>d,be;(he??0)>0?be=!0:(he??0)<0?be=!1:ni?be=!0:hr?Ys?be=!0:Qs?Qe?be=!0:ve?ze?be=!0:vn?bn?be=!0:te?(Hr??0)>0?be=!0:(Hr??0)<0?be=!1:(To??0)>0?be=!0:(To??0)<0?be=!1:Rt?be=!0:Pt?Hs?be=!0:Us?js?be=!0:Ks?qs?be=!0:zs?$s?be=!0:Xs?Zs?be=!0:Za?Ja?be=!0:ei?be=oi:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1:be=!1,($e||ie&&be)&&(c=_,p=v.efficiency,d=v.score,h=v.spiritDevelopment,y=v.spiritSameTurnScoreSetupNow,M=v.spiritOwnManaSetupNow,C=v.supermanaProgress,k=v.opponentManaProgress,b=v.scorePathBestSteps,w=v.safeSupermanaProgressSteps,P=v.safeOpponentManaProgressSteps,O=v.sameTurnScoreWindowValue,I=v.spiritSetupGain,D=v.manaHandoffToOpponent,x=v.hasRoundtrip,W=v.interviewSoftPriority)}return c}l(ja,"pickBaselineRootIndexFromCandidateIndices");function fT(e,n,o,r,i={}){if(i.checkpoint?.()===!0||n.length===0)return;if(uo(r)){let t=n.map((u,c)=>c),s=i.currentPro?.pickRootIndex?.(wt(e,n,t,o,r));if(s!==void 0)return Ds(n,s,"CurrentPro callback"),i.cancelled?.()===!0?void 0:s}let a=Ua(e,n,o,r,i);return a.length===0&&(a=n.map((t,s)=>s)),ja(e,n,a,o,r,i)}l(fT,"pickBaselineRootIndex");function WS(e,n,o,r,i={}){let a=fT(e,n,o,r,i);return a===void 0?[]:Be($(n,a).inputs)}l(WS,"pickBaselineRootInputs");var LS=(d=>(d[d.RankedRoot=0]="RankedRoot",d[d.ReplyRiskShortlist=1]="ReplyRiskShortlist",d[d.PreserveSpiritRepresentative=2]="PreserveSpiritRepresentative",d[d.PreserveSafeProgressRepresentative=3]="PreserveSafeProgressRepresentative",d[d.PreserveManaTempoRepresentative=4]="PreserveManaTempoRepresentative",d[d.OmittedRootReentry=5]="OmittedRootReentry",d[d.AdmitInjectedMacroRoot=6]="AdmitInjectedMacroRoot",d[d.RejectInjectedMacroRoot=7]="RejectInjectedMacroRoot",d[d.ApprovedReplyRiskGuard=8]="ApprovedReplyRiskGuard",d[d.ApprovedBaselineSelector=9]="ApprovedBaselineSelector",d[d.ApprovedFamilyCompetition=10]="ApprovedFamilyCompetition",d))(LS||{});Object.freeze(LS);var LE=Object.freeze({currentPro:!0,turnEngineMode:_e.CurrentPro,advisorRepresentativeHeuristicMargin:520});function mn(e,n){let o=e[0],r=n[0];return o!==void 0&&r!==void 0&&zo(o,r)}l(mn,"sameFirstInput");function xs(e,n,o){let r=e[o],i=n[o];return r!==void 0&&i!==void 0&&zo(r,i)}l(xs,"sameInputAt");function sn(e){return!A(e)&&!e.hasRoundtrip}l(sn,"advisorRootIsSafe");function pn(e,n,o,r){return le.turnEngineRootUtility(e,n,o,r,E(n))}l(pn,"rootUtility");function fr(e,n,o,r){return le.turnEngineRootPlanUtility(e,n,o,r,E(n))}l(fr,"rootMoveUtility");function Gr(e,n){return oe(e,n)>=0||e.supportsFamilyFallback(n)}l(Gr,"utilityCompetes");function mT(e,n){return e.winState===n.winState&&e.avoidImmediateLoss===n.avoidImmediateLoss&&e.scoreDelta===n.scoreDelta&&e.denyGain===n.denyGain&&e.drainerAttack===n.drainerAttack&&e.drainerSafety===n.drainerSafety&&e.evalScore===n.evalScore}l(mT,"utilitiesEqual");function mr(e,n){return{inputs:Be(e.inputs),family:E(e),rootRank:e.rootRank,reason:n}}l(mr,"entry");function lo(e,n){e.some(o=>ae(o.inputs,n.inputs))||e.push(n)}l(lo,"pushUnique");function HS(e,n,o){return Es(e,[n,0],[o,0])}l(HS,"compareRankedRootMoveIndices");function ST(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:nc(e,n)||Bn(e.inputs,n.inputs)}l(ST,"compareRootMoveSearchPriority");function yT(e,n,o,r,i){let a=n[0];if(a===void 0||i(a)&&sn(a))return;let t=fr(e,a,o,r);return n.map((s,u)=>u).filter(s=>{let u=n[s];return u!==void 0&&i(u)&&sn(u)&&Gr(fr(e,u,o,r),t)}).sort((s,u)=>HS(n,s,u))[0]}l(yT,"findRootMoveRepresentative");function hT(e,n){let o=e[0];if(!(o===void 0||!N(n)||!G(o)||!sn(o)))return e.map((r,i)=>i).filter(r=>{let i=e[r];return i!==void 0&&E(i)===6&&!G(i)&&mn(i.inputs,o.inputs)&&i.efficiency===o.efficiency&&sn(i)&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0}).sort((r,i)=>HS(e,r,i))[0]}l(hT,"sameOpeningSetupRepresentative");function US(e,n,o,r){return N(r)&&e.activeColor===1&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&E(n)===6&&E(o)===6&&G(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&mn(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!Q(n)&&!Q(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(US,"isBlackTurnSixPlainSpiritSetupPair");function bT(e,n){let o=e.cloneForSimulation(),r=[];for(let i of n.compiledChunks){let a=Je(o,i);if(a===void 0)return;o=a.game,r.push(...a.events)}return{game:o,events:r}}l(bT,"projectedPlanState");function MT(e,n,o,r,i,a,t){let s=n[0];if(s===void 0||s.winsImmediately&&!o.winsImmediately)return!1;let u=A(s),c=A(o),p=fr(e,s,i,a),d=bT(e,t),f=d!==void 0&&(d.game.winnerColor()!==void 0||d.game.activeColor!==i||!d.game.playerCanMoveMon()&&!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),m=d!==void 0&&(f||t.compiledChunks.length>=4||!d.game.playerCanMoveMon()||!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),S=d!==void 0&&Aa(d.events,i,Math.max(a.rootManaHandoffPenalty??1,1))>0,h=d!==void 0&&Br(d.events),y=d!==void 0&&d.game.winnerColor()!==i&&wn(d.game,i),M=m&&!S&&!h&&!y&&t.compiledChunks.length>1&&t.goalFamily!==7&&(oe(t.utility,p)>=0||t.utility.passesOverrideGuard(p)||t.utility.supportsPrimaryAxesEvalTolerance(p,160)||t.goalFamily===0&&t.utility.improvesNonScoreOverrideAxes(p)),C=t.headFamily===3||t.headFamily===4,k=C&&t.goalFamily===0&&t.compiledChunks.length>1,b=!r&&k&&!c&&n.slice(0,3).some(j=>{let de=j.spiritDevelopment||j.spiritSameTurnScoreSetupNow||j.spiritOwnManaSetupNow||j.safeSupermanaPickupNow||j.safeOpponentManaPickupNow||j.winsImmediately||j.scoresSupermanaThisTurn||j.scoresOpponentManaThisTurn;return!A(j)&&de&&oe(t.headUtility,fr(e,j,i,a))<0}),w=!r&&k&&n.slice(0,3).some(j=>j.spiritSameTurnScoreSetupNow||j.spiritOwnManaSetupNow||j.sameTurnScoreWindowValue>0),P=!r&&k&&n.slice(0,3).some(j=>!A(j)&&z(j)),O=!r&&k&&!u&&!Q(s)&&!s.attacksOpponentDrainer&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!z(s),I=!r&&k&&!o.winsImmediately&&!o.attacksOpponentDrainer&&!o.safeSupermanaPickupNow&&!o.safeOpponentManaPickupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&o.sameTurnScoreWindowValue>0&&!o.supermanaProgress&&!o.opponentManaProgress&&n.slice(0,6).filter(j=>z(j)&&j.sameTurnScoreWindowValue===0&&!j.spiritSameTurnScoreSetupNow&&!j.spiritOwnManaSetupNow).length>=3,D=r&&t.headFamily===6&&t.goalFamily===0&&G(o)&&!o.attacksOpponentDrainer&&!Q(o)&&n.slice(0,3).some(j=>ae(j.inputs,o.inputs)||!G(j)||j.attacksOpponentDrainer||Q(j)?!1:j.spiritSetupGain>=o.spiritSetupGain&&j.safeSupermanaProgressSteps<=o.safeSupermanaProgressSteps&&j.safeOpponentManaProgressSteps<=o.safeOpponentManaProgressSteps&&oe(fr(e,j,i,a),t.headUtility)>=0);M=M&&!b&&!w&&!P&&!O;let x=n.slice(0,3).every(j=>{let de=fr(e,j,i,a);return t.utility.passesOverrideGuard(de)&&(!c||A(j))})||M,W=o.spiritSameTurnScoreSetupNow||o.sameTurnScoreWindowValue>0||o.attacksOpponentDrainer||Q(o),_=t.headFamily===6&&n.slice(0,4).filter(j=>US(e,o,j,a)).length>=2;if(I||D||t.headFamily===2&&!o.attacksOpponentDrainer||C&&!z(o)&&!M||!x&&t.headFamily===6&&!W&&!o.spiritOwnManaSetupNow&&!_)return!1;let v=n.slice(0,3).some(j=>j.spiritDevelopment||j.spiritSameTurnScoreSetupNow||j.spiritOwnManaSetupNow);return t.headFamily===6&&!v&&!W&&!o.spiritOwnManaSetupNow&&!x&&!_?!1:!c||u||x}l(MT,"injectedCandidatePassesRootGate");function kT(e,n,o,r,i,a){let t=i.compiledChunks[0];if(t===void 0)return;let s=Be(t),u=r.find(y=>ae(y.inputs,s)),c=u??a.buildInjectedRootCandidate?.(e,n,o,s,i),p=l(()=>({inputs:s,family:i.headFamily,admitted:!1,reason:7}),"rejected");if(c===void 0||!MT(e,r,c,u!==void 0,n,o,i))return p();let d=u===void 0?[...r,c]:[...r];u===void 0&&d.sort(ST);let f=r[0],m=d.findIndex(y=>ae(y.inputs,s)),S=d[m];if(f===void 0||S===void 0)return p();let h=ae(S.inputs,f.inputs);if(!h){let y=fr(e,f,n,o),M=fr(e,S,n,o),C=oe(i.utility,y)>0||oe(i.headUtility,y)>0||oe(M,y)>0||i.utility.strictlyDominatesOverrideAxes(y)||M.strictlyDominatesOverrideAxes(y),k=S.winsImmediately&&!f.winsImmediately||S.attacksOpponentDrainer&&!f.attacksOpponentDrainer||(S.scoresSupermanaThisTurn||S.scoresOpponentManaThisTurn)&&!(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn)||S.sameTurnScoreWindowValue>f.sameTurnScoreWindowValue&&S.sameTurnScoreWindowValue>0||!A(S)&&A(f)||S.classes.drainerSafetyRecover&&f.ownDrainerVulnerable&&!f.classes.drainerSafetyRecover||z(S)&&!z(f)&&!A(S),b=i.headFamily===6&&i.goalFamily===6&&r.slice(0,4).filter(w=>US(e,S,w,o)).length>=2&&oe(M,y)>=0&&L(f.heuristic,S.heuristic)<=8;h=C||k||b}return h&&u===void 0&&r.splice(0,r.length,...d),{inputs:s,family:E(S),admitted:h,reason:h?6:7}}l(kT,"evaluateInjectedRoot");function jS(e,n,o,r,i,a={}){if(!N(o)||r.length===0||T()||e.activeColor===1&&e.turnNumber===2&&e.monsMovesCount<=1&&e.playerCanUseAction()&&e.playerCanMoveMana())return;let t=[],s=[],u=r[0];if(u===void 0)return;lo(t,mr(u,0));let c=[[2,m=>m.spiritSameTurnScoreSetupNow||m.spiritOwnManaSetupNow],[2,m=>G(m)],[3,m=>E(m)===3],[3,m=>E(m)===4],[4,m=>E(m)===7]];for(let[m,S]of c){if(T())return;let h=yT(e,r,n,o,S),y=h===void 0?void 0:r[h];if(y===void 0)continue;let M=mr(y,m);lo(s,M),lo(t,M)}let p=hT(r,o),d=p===void 0?void 0:r[p];if(d!==void 0){let m=mr(d,2);lo(s,m),lo(t,m)}let f=i===void 0?void 0:kT(e,n,o,r,i,a);if(f?.admitted){let m=r.find(S=>ae(S.inputs,f.inputs));m!==void 0&&lo(t,mr(m,6))}return T()?void 0:{orderedShortlist:t,preservedFamilyRepresentatives:s,approvedRoot:void 0,injectedRoot:f}}l(jS,"currentProRootAdvisorPresearch");function Ka(e){let n=[];e.injectedRoot?.admitted&&n.push(Be(e.injectedRoot.inputs));for(let o of e.preservedFamilyRepresentatives)n.some(r=>ae(r,o.inputs))||n.push(Be(o.inputs));return n}l(Ka,"currentProRootAdvisorPriorityInputs");function KS(e,n){let o=Object.create(e);return Object.defineProperty(o,"turnEngineMode",{value:n}),o}l(KS,"selectorTurnEngineModeView");function FS(e,n){let o=KS(e,n);return Object.defineProperties(o,{enableRootReplyRiskGuard:{value:!1}}),o}l(FS,"selectorConfigView");function CT(e,n,o,r,i,a){let t=o[0];if(t===void 0||o.some(c=>{let p=n[c];return p!==void 0&&a(p)&&sn(p)}))return;let s=n[t];if(s===void 0)return;let u=pn(e,s,r,i);return n.map((c,p)=>p).filter(c=>{let p=n[c];return p!==void 0&&a(p)&&sn(p)&&Gr(pn(e,p,r,i),u)}).sort((c,p)=>re(n,c,p))[0]}l(CT,"findScoredRepresentative");function TT(e,n,o,r){if(o.length!==0)return n.map((i,a)=>a).filter(i=>{let a=n[i];return a!==void 0&&!o.includes(i)&&a.spiritOwnManaSetupNow&&a.opponentManaProgress&&!G(a)&&sn(a)&&o.some(t=>le.whiteSpiritFollowupSetupCompetition(e,n,[i,t],r))}).sort((i,a)=>re(n,i,a))[0]}l(TT,"whiteFollowupRepresentative");function qS(e,n,o,r){if(!N(r)||!r.enableTurnEngineSelector||!r.enableTurnEngineSecondaryAnalysis||n.length<2||!n.every(f=>{let m=e[f];return m!==void 0&&G(m)&&sn(m)}))return;let i=n.map(f=>e[f]).filter(f=>f!==void 0),a=Math.max(...i.map(f=>f.score)),t=Math.min(...i.map(f=>f.rootRank)),s=new Map,u=l(f=>{let m=s.get(f);if(m!==void 0)return m;let S=e[f],h=S===void 0?-2147483648:le.spiritFollowupFloorScore(S.game,o,r);return s.set(f,h),h},"followup"),c=Math.max(...n.map(u)),p=e.map((f,m)=>m).filter(f=>!n.includes(f)),d=p.filter(f=>{let m=e[f];return m!==void 0&&sn(m)&&!m.ownDrainerVulnerable&&!m.ownDrainerWalkVulnerable&&!m.spiritDevelopment&&!m.spiritSameTurnScoreSetupNow&&!m.spiritOwnManaSetupNow&&R(m.score,32)>=a&&u(f)>=R(c,32)}).sort((f,m)=>u(m)-u(f)||re(e,f,m))[0];return d!==void 0?d:p.filter(f=>{let m=e[f];return m!==void 0&&sn(m)&&!m.ownDrainerVulnerable&&!m.ownDrainerWalkVulnerable&&!m.spiritDevelopment&&!m.spiritSameTurnScoreSetupNow&&!m.spiritOwnManaSetupNow&&z(m)&&m.interviewSoftPriority>0&&m.score>=a&&m.rootRank+2<=t}).sort((f,m)=>re(e,f,m))[0]}l(qS,"plainSpiritClusterProgressReentry");function zS(e,n,o,r,i){if(!N(i)||!i.enableTurnEngineSelector)return;let a=o.find(c=>{let p=n[c];return p!==void 0&&sn(p)&&z(p)&&p.interviewSoftPriority>0}),t=a===void 0?void 0:n[a];if(t===void 0)return;let s,u;return n.forEach((c,p)=>{if(o.includes(p)||!A(c)||c.ownDrainerWalkVulnerable||c.manaHandoffToOpponent||c.hasRoundtrip||!le.sameNonTacticalProgressLane(c,t)||B(c.score,32)<t.score||c.game.activeColor!==r||c.game.winnerColor()!==void 0)return;let d=pn(e,c,r,i);d.supportsTemporaryRiskRecovery()&&(u===void 0||oe(d,u)>0||mT(d,u)&&s!==void 0&&re(n,p,s)<0)&&(s=p,u=d)}),s}l(zS,"riskyRecoveryReentry");function wT(e,n,o,r){if(!N(r)||e.activeColor!==1||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(t=>{let s=n[t];return s!==void 0&&E(s)===7&&A(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!Q(s)&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip}))return;let i=Math.min(...o.map(t=>n[t]?.rootRank??Number.MAX_SAFE_INTEGER)),a=Math.max(...o.map(t=>n[t]?.score??-2147483648));return n.map((t,s)=>s).filter(t=>{let s=n[t];return s!==void 0&&!o.includes(t)&&E(s)===6&&G(s)&&!Q(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=i&&L(a,s.score)<=1024}).sort((t,s)=>re(n,t,s))[0]}l(wT,"blackTurnSixSpiritReentry");function RT(e,n,o,r){if(!N(r))return;let i=o[0],a=i===void 0?void 0:e[i];if(!(a===void 0||!A(a)||!z(a)))return n.filter(t=>{let s=e[t];return s!==void 0&&!o.includes(t)&&sn(s)&&le.sameNonTacticalProgressLane(s,a)&&L(a.score,s.score)<=320}).sort((t,s)=>re(e,t,s))[0]}l(RT,"safeProgressSiblingReentry");function PT(e,n,o,r){if(!N(r)||e.activeColor!==1||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.length===0)return;let i=qe(e,e.activeColor).delta;if(!(i.sameTurnScoreWindowValue>1||i.opponentWindowDenyGain>1||i.sameTurnScoreWindowValue===0&&i.opponentWindowDenyGain===0||o.some(a=>{let t=n[a];return t!==void 0&&(E(t)===3||E(t)===4)&&sn(t)})))return n.map((a,t)=>t).filter(a=>{let t=n[a],s=t===void 0?void 0:E(t);return t!==void 0&&!o.includes(a)&&(s===3||s===4)&&!t.manaHandoffToOpponent&&!t.hasRoundtrip&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!Q(t)&&t.sameTurnScoreWindowValue===0&&t.score>=0}).sort((a,t)=>{let s=n[a],u=n[t];return s?.score!==u?.score?(u?.score??-2147483648)-(s?.score??-2147483648):re(n,a,t)})[0]}l(PT,"blackNoActionSafeProgressReentry");function OT(e,n,o,r){if(!N(r)||e.activeColor!==1||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let i=[...o].filter(s=>{let u=n[s];return u!==void 0&&E(u)===7&&sn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!Q(u)}).sort((s,u)=>re(n,s,u))[0],a=i===void 0?void 0:n[i];if(a===void 0)return;let t=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(a.rootRank<6&&!t))return n.map((s,u)=>u).filter(s=>{let u=n[s];return u===void 0||o.includes(s)||E(u)!==7||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||Q(u)||!(u.rootRank+4<=a.rootRank||t&&u.rootRank<a.rootRank)||u.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue?!1:a.score>=0?u.score>=0:t&&u.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&u.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===a.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable?!0:L(a.score,u.score)<=192}).sort((s,u)=>re(n,s,u))[0]}l(OT,"blackNoActionManaSiblingReentry");function ET(e,n,o,r,i,a){let t=[],s=l(u=>{u!==void 0&&!t.includes(u)&&t.push(u)},"add");return s(qS(n,o,i,a)),s(zS(e,n,o,i,a)),s(wT(e,n,r,a)),s(RT(n,o,r,a)),s(PT(e,n,r,a)),s(OT(e,n,r,a)),s(le.currentProWhiteTurnFourManaSiblingReentry(e,n,r,i,a)),t}l(ET,"collectAdvisorReentries");function $S(e,n,o,r,i){return o.spiritDevelopment||!(n.spiritOwnManaSetupNow||n.spiritSameTurnScoreSetupNow)||n.sameTurnScoreWindowValue>o.sameTurnScoreWindowValue||n.score>=o.score||e.activeColor===1&&e.turnNumber<=2&&n.spiritOwnManaSetupNow&&!n.spiritSameTurnScoreSetupNow&&E(o)===7&&!Q(n)&&!Q(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&sn(n)&&sn(o)&&R(n.score,64)>=o.score&&n.spiritSetupGain>=R(o.spiritSetupGain,48)&&n.rootRank<=o.rootRank?!0:oe(pn(e,n,r,i),pn(e,o,r,i))>=0}l($S,"spiritSetupCompetes");function gT(e,n,o){let r=e.roots[n],i=e.roots[o];return r!==void 0&&i!==void 0&&$S(e.game,r,i,e.perspective,e.config)}l(gT,"spiritSetupCompetesWithRoot");function vT(e){let n=e.candidateIndices.map(r=>e.roots[r]).filter(r=>r!==void 0&&(r.spiritDevelopment||r.spiritSameTurnScoreSetupNow||r.spiritOwnManaSetupNow)).map(r=>r.score);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(r=>{let i=e.roots[r];return i!==void 0&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&(Q(i)||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0)&&i.score>=o})}l(vT,"riskyScoreCompetition");function XS(e){return N(e)&&e.enableTurnEngineSelector&&e.enableTurnEngineSecondaryAnalysis}l(XS,"currentProSecondaryAnalysisLive");function AT(e,n){return io(e,n)&&!G(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!A(e)&&!e.hasRoundtrip}l(AT,"canChallengeSpiritPreferenceRoot");function vc(e,n){return io(e,n)&&!G(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(vc,"canChallengeSpiritPreferenceRootWithRecovery");function YS(e,n,o,r){if(!r.enableTurnEngineSelector||!N(r)||!n.ownDrainerVulnerable||!vc(n,o))return;let i=pn(e,n,o,r);return i.supportsTemporaryRiskRecovery()?i:void 0}l(YS,"projectedRiskyRecoveryUtility");function QS(e,n){return e.supportsTemporaryRiskRecovery()&&oe(e,n)>=0&&e.supportsFamilyFallback(n)}l(QS,"projectedRecoveryUtilityCompetes");function IT(e){if(!N(e.config))return!1;let n=e.candidateIndices.map(r=>e.roots[r]).filter(r=>r!==void 0&&r.spiritDevelopment&&!r.manaHandoffToOpponent).map(r=>r.efficiency);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(r=>{let i=e.roots[r];return i!==void 0&&!i.ownDrainerVulnerable&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&(i.supermanaProgress||i.opponentManaProgress)&&i.interviewSoftPriority>0&&i.efficiency>=o})}l(IT,"safeProgressCompetition");function NT(e){if(!XS(e.config)||e.candidateIndices.length<2)return!1;let n=e.candidateIndices.filter(s=>{let u=e.roots[s];return u!==void 0&&G(u)&&!A(u)&&!u.manaHandoffToOpponent&&!u.hasRoundtrip}).sort((s,u)=>re(e.roots,s,u)).slice(0,3);if(n.length===0)return!1;let o=Math.min(...n.map(s=>e.roots[s]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...n.map(s=>e.roots[s]?.score??-2147483648)),i=new Map,a=l(s=>{let u=i.get(s);if(u!==void 0)return u;let c=e.roots[s],p=c===void 0?-2147483648:le.spiritFollowupFloorScore(c.game,e.perspective,e.config);return i.set(s,p),p},"followup"),t=Math.max(...n.map(a));return e.candidateIndices.some(s=>{if(n.includes(s))return!1;let u=e.roots[s];return u!==void 0&&!A(u)&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.rootRank<=o+2&&R(u.score,32)>=r&&u.interviewSoftPriority>0&&a(s)>=R(t,32)})}l(NT,"followupProgressCompetition");function DT(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}l(DT,"hasNonSpiritScoreCompetitionSurface");function xT(e,n){let o=G(e),r=G(n);if(o===r)return;let i=o?n:e,a=o?e:n;if(!(A(i)||i.hasRoundtrip||i.score<R(a.score,40)||i.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return o?-1:1}l(xT,"spiritScoreChallengeOrder");function BT(e){if(!N(e.config))return!1;let n=e.candidateIndices.filter(o=>{let r=e.roots[o];return r!==void 0&&G(r)}).sort((o,r)=>re(e.roots,o,r)).slice(0,3);return n.length===0?!1:e.candidateIndices.some(o=>{if(n.includes(o))return!1;let r=e.roots[o];return r!==void 0&&DT(r)&&n.every(i=>{let a=e.roots[i];return a!==void 0&&(xT(r,a)??0)>0})})}l(BT,"scoreCompetition");function ZS(e,n){return e.candidateIndices.filter(o=>{let r=e.roots[o];return r!==void 0&&G(r)&&n.has(o)}).sort((o,r)=>re(e.roots,o,r))}l(ZS,"projectedSpiritIndices");function WT(e,n){if(!e.config.enableTurnEngineSelector||!N(e.config)||n.size<2)return!1;let o=ZS(e,n)[0],r=o===void 0?void 0:e.roots[o],i=o===void 0?void 0:n.get(o);return o===void 0||r===void 0||i===void 0?!1:e.candidateIndices.some(a=>{if(a===o)return!1;let t=e.roots[a],s=n.get(a);if(t===void 0||s===void 0)return!1;let u=AT(t,e.perspective),c=vc(t,e.perspective)&&s.plan.headFamily===5;return(u||c)&&Math.abs(t.score-r.score)<=320&&(le.spiritProjectionChallengeOrder(t,s,r,i)??0)>0})}l(WT,"projectionCompetition");function FT(e,n){if(!e.config.enableTurnEngineSelector||!N(e.config))return!1;let o=ZS(e,n).slice(0,3);if(o.length===0||o.some(i=>n.get(i)?.plan.utility.hasNonnegativeDenyGain()===!0))return!1;let r=Math.max(...o.map(i=>e.roots[i]?.score??-2147483648));return e.candidateIndices.some(i=>{if(o.includes(i))return!1;let a=e.roots[i];return a!==void 0&&!a.spiritDevelopment&&!a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&!a.ownDrainerVulnerable&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&a.score>=r})}l(FT,"negativeDenyCompetition");function _T(e){if(!e.config.enableTurnEngineSelector||!N(e.config))return!1;let n=e.candidateIndices.filter(i=>{let a=e.roots[i];return a!==void 0&&(a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow)}).sort((i,a)=>re(e.roots,i,a)).slice(0,3);if(n.length===0)return!1;let o=Math.max(...n.map(i=>e.roots[i]?.score??-2147483648)),r=n.map(i=>e.roots[i]).filter(i=>i!==void 0).map(i=>pn(e.game,i,e.perspective,e.config));return r.length===0?!1:e.candidateIndices.some(i=>{let a=e.roots[i];if(a===void 0||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||!a.ownDrainerVulnerable||a.manaHandoffToOpponent||a.hasRoundtrip||a.score<o)return!1;let t=YS(e.game,a,e.perspective,e.config);return t!==void 0&&r.every(s=>QS(t,s))})}l(_T,"riskyRecoveryCompetition");function GT(e,n){if(!XS(e.config)||n.length===0||!n.every(s=>{let u=e.roots[s];return u!==void 0&&G(u)&&!A(u)&&!u.manaHandoffToOpponent&&!u.hasRoundtrip}))return;let o=Math.min(...n.map(s=>e.roots[s]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...n.map(s=>e.roots[s]?.score??-2147483648)),i=new Map,a=l(s=>{let u=i.get(s);if(u!==void 0)return u;let c=e.roots[s],p=c===void 0?-2147483648:le.spiritFollowupFloorScore(c.game,e.perspective,e.config);return i.set(s,p),p},"followup"),t=Math.max(...n.map(a));return e.candidateIndices.filter(s=>!n.includes(s)).filter(s=>{let u=e.roots[s];return u!==void 0&&!A(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.interviewSoftPriority>0&&u.rootRank<=o+2&&R(u.score,32)>=r&&a(s)>=R(t,32)}).sort((s,u)=>{let c=a(s),p=a(u);return c!==p?c>p?-1:1:re(e.roots,s,u)})[0]}l(GT,"safeProgressReentryAfterSafetyPrefilter");function JS(e,n){let o=new Map,r=new Map,i=l(s=>{let u=`${s.perspective}:${s.candidateIndices.join(",")}`,c=o.get(u);if(c!==void 0)return c;let p=le.buildSpiritRootProjections(s.roots,s.candidateIndices,s.perspective,s.config);return o.set(u,p),p},"projections"),t={competition:l((s,u)=>{switch(s){case"safe-progress":return IT(u);case"followup-progress":return NT(u);case"risky-score":return vT(u);case"negative-deny":return FT(u,i(u));case"score":return BT(u);case"projection":return WT(u,i(u));case"risky-recovery":return _T(u)}},"competition"),safetyReentryIndices(s,u){let c=Math.max(...s.candidateIndices.map(y=>s.roots[y]?.score??-2147483648)),p=Math.max(s.config.rootDrainerSafetyScoreMargin,0),d=s.config.enableTurnEngineSelector&&N(s.config)?s.candidateIndices.filter(y=>{let M=s.roots[y];return M!==void 0&&M.ownDrainerVulnerable&&!M.manaHandoffToOpponent&&!M.hasRoundtrip&&B(M.score,p)>=c&&vc(M,s.perspective)}):[],f=N(s.config)&&u.length>0&&d.length>0?u.map(y=>s.roots[y]).filter(y=>y!==void 0).map(y=>pn(s.game,y,s.perspective,s.config)).sort((y,M)=>Wn(M,y))[0]:void 0,m=Math.max(...u.map(y=>s.roots[y]?.score??-2147483648)),S=[...u];for(let y of d){let M=s.roots[y];if(M===void 0)continue;let C=M.attacksOpponentDrainer||M.classes.drainerSafetyRecover||M.sameTurnScoreWindowValue>0||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow||z(M);if(L(m,M.score)>(C?48:24))continue;let b=YS(s.game,M,s.perspective,s.config);b===void 0||f!==void 0&&!QS(b,f)||S.includes(y)||S.push(y)}let h=GT(s,S);return h!==void 0&&!S.includes(h)&&(S.push(h),S.sort((y,M)=>re(s.roots,y,M))),S.filter(y=>!u.includes(y))},finalReentryIndices(s){let u=[],c=qS(s.roots,s.candidateIndices,s.perspective,s.config),p=zS(s.game,s.roots,s.candidateIndices,s.perspective,s.config);return c!==void 0&&u.push(c),p!==void 0&&p!==c&&u.push(p),u},spiritSetupCompetesWithBest:gT,spiritProjectionChallengeOrder(s,u,c){let p=s.roots[u],d=s.roots[c];if(p===void 0||d===void 0)return;let f=i(s);return le.spiritProjectionChallengeOrder(p,f.get(u),d,f.get(c))},spiritProjectionOrder(s,u,c){let p=i(s),d=p.get(u),f=p.get(c);if(d===void 0&&f===void 0)return;if(d===void 0)return-1;if(f===void 0)return 1;let m=s.roots[u],S=s.roots[c];return le.compareSpiritProjectionPlans(d,f,m!==void 0&&S!==void 0&&Math.abs(m.score-S.score)<=192)},spiritFollowupFloorOrder(s,u,c){return le.spiritFollowupFloorOrder(s.game,s.roots,u,c,s.perspective,s.config,r)}};return n?{...t,pickRootIndex(s){return Nw(s.game,s.roots,s.perspective,e)?.index}}:t}l(JS,"buildRootPolicyCallbacks");function ey(e){return JS(e,!0)}l(ey,"currentProRootPolicyCallbacks");function VT(e,n,o,r,i,a,t){let s=n[r];if(s===void 0||!G(s))return!1;let u=l(p=>{let d=t.get(p);if(d!==void 0)return d;let f=n[p],m=f===void 0?-2147483648:le.spiritFollowupFloorScore(f.game,i,a);return t.set(p,m),m},"followup"),c=!1;for(let p of o){let d=n[p];if(d===void 0||e.activeColor!==1||e.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!mn(s.inputs,d.inputs)||s.ownDrainerVulnerable!==d.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!sn(s)||!sn(d)||Q(s)||Q(d)||s.attacksOpponentDrainer||d.attacksOpponentDrainer||s.sameTurnScoreWindowValue!==0||d.sameTurnScoreWindowValue!==0||s.supermanaProgress||d.supermanaProgress||s.opponentManaProgress||d.opponentManaProgress)continue;if(d.rootRank<=s.rootRank&&R(d.score,64)>=s.score&&d.spiritSetupGain>=R(s.spiritSetupGain,32))return!1;let m=u(r),S=u(p);c||(c=m>=R(S,32)||s.score>=d.score&&m>=S)}return c}l(VT,"blackPlainSpiritRepresentativeCompetes");function LT(e,n,o,r,i,a,t,s){let u=n[r];return u===void 0?!1:i!==2?!0:u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||VT(e,n,o,r,a,t,s)}l(LT,"representativeCompetesInApproval");function Ee(e,n,o,r){return n.filter(i=>{let a=e[i];return a!==void 0&&o(a,i)}).sort(r)[0]}l(Ee,"bestOverrideIndex");function Rn(e,n,o){let r=e[n],i=e[o];return r===void 0||i===void 0?n-o:r.rootRank!==i.rootRank?r.rootRank<i.rootRank?-1:1:re(e,n,o)}l(Rn,"compareRootRankThenRanked");function ny(e,n,o){let r=e[n],i=e[o];return r===void 0||i===void 0?n-o:r.rootRank!==i.rootRank?r.rootRank<i.rootRank?-1:1:r.score!==i.score?r.score>i.score?-1:1:re(e,n,o)}l(ny,"compareRootRankThenScoreThenRanked");function Lo(e){let n=qe(e,e.activeColor);return n.delta.sameTurnScoreWindowValue===0&&n.delta.opponentWindowDenyGain===0&&!n.delta.drainerAttackAvailable}l(Lo,"exactContextIsQuiet");function HT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[r];if(!(a===void 0||E(a)!==6||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||A(a)||a.inputs.length<2))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.scoresSupermanaThisTurn&&!t.scoresOpponentManaThisTurn&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&t.sameTurnScoreWindowValue===0&&!t.manaHandoffToOpponent&&!t.hasRoundtrip&&!A(t)&&t.inputs.length>=2&&xs(t.inputs,a.inputs,0)&&xs(t.inputs,a.inputs,1)&&t.spiritSetupGain===a.spiritSetupGain&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&t.rootRank<a.rootRank,(t,s)=>Rn(n,t,s))}l(HT,"blackOpeningSetupSiblingOverride");function UT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==2||e.monsMovesCount<2||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0||!Lo(e))return;let a=n[r];if(!(a===void 0||E(a)!==6||!G(a)||z(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.sameTurnScoreWindowValue>0||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||A(a)))return Ee(n,o,(t,s)=>s!==r&&E(t)===7&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!z(t)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&t.sameTurnScoreWindowValue===0&&!t.scoresSupermanaThisTurn&&!t.scoresOpponentManaThisTurn&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.manaHandoffToOpponent&&!t.hasRoundtrip&&!A(t)&&t.rootRank<a.rootRank&&t.score>=R(a.score,48)&&t.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&t.scorePathBestSteps<=a.scorePathBestSteps&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable,(t,s)=>ny(n,t,s))}l(UT,"blackEarlySafeManaFollowupOverride");function jT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==2||e.monsMovesCount>1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0||!Lo(e))return;let a=n[r];if(!(a===void 0||E(a)!==7||z(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.sameTurnScoreWindowValue>0||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||A(a)))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&G(t)&&!z(t)&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&t.sameTurnScoreWindowValue===0&&!t.scoresSupermanaThisTurn&&!t.scoresOpponentManaThisTurn&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.manaHandoffToOpponent&&!t.hasRoundtrip&&!A(t)&&t.rootRank>a.rootRank&&t.rootRank<=a.rootRank+4&&t.score>=L(a.score,32)&&t.spiritSetupGain>=R(a.spiritSetupGain,16)&&t.scorePathBestSteps>=a.scorePathBestSteps&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable,(t,s)=>{let u=n[t],c=n[s];return u===void 0||c===void 0?t-s:u.score!==c.score?u.score>c.score?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain>c.spiritSetupGain?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:re(n,t,s)})}l(jT,"blackEarlyPlainSpiritFollowupOverride");function KT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==4||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0||!Lo(e))return;let a=n[r];if(!(a===void 0||![7,3,4].includes(E(a))||!a.ownDrainerVulnerable||a.winsImmediately||a.attacksOpponentDrainer||a.sameTurnScoreWindowValue>0||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip))return Ee(n,o,(t,s)=>s!==r&&E(t)===7&&!t.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&!t.scoresSupermanaThisTurn&&!t.scoresOpponentManaThisTurn&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.manaHandoffToOpponent&&!t.hasRoundtrip,(t,s)=>ny(n,t,s))}l(KT,"blackTurnFourVulnerableProgressManaOverride");function qT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==6||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=qe(e,e.activeColor);if(a.delta.sameTurnScoreWindowValue>1||a.delta.opponentWindowDenyGain>1||!a.delta.drainerAttackAvailable)return;let t=n[r];if(!(t===void 0||![3,4].includes(E(t))||!t.ownDrainerVulnerable||t.ownDrainerWalkVulnerable||t.spiritDevelopment||t.spiritSameTurnScoreSetupNow||t.spiritOwnManaSetupNow||t.sameTurnScoreWindowValue>0||t.winsImmediately||t.attacksOpponentDrainer||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.manaHandoffToOpponent||t.hasRoundtrip))return Ee(n,o,(s,u)=>u!==r&&E(s)===7&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===R(t.safeOpponentManaProgressSteps,1)&&s.scorePathBestSteps===t.scorePathBestSteps&&L(t.score,s.score)<=160&&s.rootRank<=t.rootRank+4,(s,u)=>Rn(n,s,u))}l(qT,"blackTurnSixAttackVulnerableProgressManaOverride");function zT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==4||e.monsMovesCount===0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0||!Lo(e))return;let a=n[r];if(!(a===void 0||E(a)!==6||!G(a)||a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.sameTurnScoreWindowValue>0||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&t.sameTurnScoreWindowValue===0&&!t.scoresSupermanaThisTurn&&!t.scoresOpponentManaThisTurn&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.manaHandoffToOpponent&&!t.hasRoundtrip&&mn(t.inputs,a.inputs)&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&t.spiritSetupGain>=R(a.spiritSetupGain,32)&&t.rootRank<a.rootRank,(t,s)=>Rn(n,t,s))}l(zT,"blackTurnFourSetupClusterOverride");function _S(e,n,o,r,i){let a=e.activeColor===1&&e.turnNumber===2||e.activeColor===0&&e.turnNumber===3;if(!N(i)||!e.playerCanMoveMana()||n.length===0||!a||!Lo(e))return;let t=n[r];if(t===void 0)return;let s=E(t);if(!(![7,6].includes(s)||t.winsImmediately||t.attacksOpponentDrainer||t.sameTurnScoreWindowValue>0||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.manaHandoffToOpponent||t.hasRoundtrip||A(t)))return Ee(n,o,(u,c)=>c!==r&&E(u)===s&&mn(u.inputs,t.inputs)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&u.sameTurnScoreWindowValue===0&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&!A(u)&&u.spiritDevelopment===t.spiritDevelopment&&u.spiritSameTurnScoreSetupNow===t.spiritSameTurnScoreSetupNow&&u.spiritOwnManaSetupNow===t.spiritOwnManaSetupNow&&u.supermanaProgress===t.supermanaProgress&&u.opponentManaProgress===t.opponentManaProgress&&u.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps&&u.scorePathBestSteps===t.scorePathBestSteps&&u.spiritSetupGain===t.spiritSetupGain&&u.ownDrainerVulnerable===t.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&u.score>=R(t.score,8)&&u.rootRank<=t.rootRank+8,(u,c)=>{let p=n[u],d=n[c];return p===void 0||d===void 0?u-c:p.score!==d.score?p.score>d.score?-1:1:p.rootRank!==d.rootRank?p.rootRank>d.rootRank?-1:1:-re(n,u,c)})}l(_S,"earlySameLaneHigherScoreOverride");function $T(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=qe(e,e.activeColor);if(!(a.delta.sameTurnScoreWindowValue<=1&&a.delta.opponentWindowDenyGain<=1&&!a.delta.drainerAttackAvailable&&(a.delta.sameTurnScoreWindowValue>0||a.delta.opponentWindowDenyGain>0)))return;let s=n[r];if(!(s===void 0||![3,4].includes(E(s))||A(s)||s.winsImmediately||s.attacksOpponentDrainer||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip))return Ee(n,o,(u,c)=>c!==r&&E(u)===6&&u.spiritOwnManaSetupNow&&!u.spiritSameTurnScoreSetupNow&&z(u)&&!A(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&u.sameTurnScoreWindowValue===0&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&u.manaHandoffToOpponent===s.manaHandoffToOpponent&&u.hasRoundtrip===s.hasRoundtrip&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&L(s.score,u.score)<=96&&u.spiritSetupGain>=R(s.spiritSetupGain,48)&&u.safeSupermanaProgressSteps<=R(s.safeSupermanaProgressSteps,1)&&u.safeOpponentManaProgressSteps<=R(s.safeOpponentManaProgressSteps,1)&&u.rootRank<=s.rootRank+4,(u,c)=>Rn(n,u,c))}l($T,"whiteTurnFiveWeakWindowSetupOverride");function Bs(e,n){let o=Math.max(e,1),r=Math.max(Math.trunc(n.maxVisitedNodes*Math.max(n.rootReplyRiskNodeShareBp,0)/1e4),o,1);return Math.min(Math.max(Math.trunc(r/o),1),Math.max(n.rootReplyRiskReplyLimit,1))}l(Bs,"replyLimitForRoots");function XT(e,n,o,r,i,a){if(!N(a)||e.activeColor!==1||e.turnNumber<6||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let t=n[r];if(t===void 0||E(t)!==6||!G(t)||!z(t)||t.winsImmediately||t.attacksOpponentDrainer||t.sameTurnScoreWindowValue>0||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.manaHandoffToOpponent||t.hasRoundtrip||A(t))return;let s=Bs(o.length,a),u=hn(t.game,i,a,s);if(u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint)return;let c=new Map,p=new Map([[r,u]]),d=new Map,f=l(b=>{let w=c.get(b);if(w!==void 0)return w;let P=n[b],O=P===void 0?pn(e,t,i,a):pn(e,P,i,a);return c.set(b,O),O},"utility"),m=l(b=>{let w=p.get(b);if(w!==void 0)return w;let P=n[b],O=hn(P?.game??t.game,i,a,s);return p.set(b,O),O},"snapshot"),S=l(b=>{let w=d.get(b);if(w!==void 0)return w;let P=n[b],O=le.spiritFollowupFloorScore(P?.game??t.game,i,a);return d.set(b,O),O},"followup"),h=f(r),y=S(r),M=qe(e,e.activeColor),C=M.delta.sameTurnScoreWindowValue<=1&&M.delta.opponentWindowDenyGain<=1,k;for(let b of o){if(b===r)continue;let w=n[b];if(w===void 0||E(w)!==6||!w.spiritOwnManaSetupNow||w.spiritSameTurnScoreSetupNow||!z(w)||w.winsImmediately||w.attacksOpponentDrainer||w.sameTurnScoreWindowValue>0||w.scoresSupermanaThisTurn||w.scoresOpponentManaThisTurn||w.safeSupermanaPickupNow||w.safeOpponentManaPickupNow||w.manaHandoffToOpponent||w.hasRoundtrip||A(w)||!mn(w.inputs,t.inputs)||w.supermanaProgress!==t.supermanaProgress||w.opponentManaProgress!==t.opponentManaProgress||w.ownDrainerVulnerable!==t.ownDrainerVulnerable||w.ownDrainerWalkVulnerable!==t.ownDrainerWalkVulnerable)continue;let P=f(b),O=m(b),I=S(b),D=Gr(P,h)||le.rootProgressOrSetupBetter(w,t),x=C&&w.spiritSetupGain>t.spiritSetupGain&&w.score>=L(t.score,512);if(!x&&!D||O.allowsImmediateOpponentWin||O.opponentReachesMatchPoint||!x&&R(O.worstReplyScore,320)<u.worstReplyScore||!x&&R(I,32)<y)continue;if(k===void 0){k=b;continue}let W=n[k];if(W===void 0){k=b;continue}let _;if(C)_=w.score>W.score||w.score===W.score&&(w.spiritSetupGain>W.spiritSetupGain||w.spiritSetupGain===W.spiritSetupGain&&re(n,b,k)<0);else{let v=oe(P,f(k)),j=m(k),de=S(k);v>0?_=!0:v!==0?_=!1:O.worstReplyScore!==j.worstReplyScore?_=O.worstReplyScore>j.worstReplyScore:I!==de?_=I>de:w.spiritSetupGain!==W.spiritSetupGain?_=w.spiritSetupGain>W.spiritSetupGain:w.score!==W.score?_=w.score>W.score:_=re(n,b,k)<0}_&&(k=b)}return k}l(XT,"blackSetupProgressCompetitionOverride");function YT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber<6||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0||!Lo(e))return;let a=n[r];if(!(a===void 0||E(a)!==6||!G(a)||z(a)||a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.sameTurnScoreWindowValue>0||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!z(t)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&t.sameTurnScoreWindowValue===0&&!t.scoresSupermanaThisTurn&&!t.scoresOpponentManaThisTurn&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&t.manaHandoffToOpponent===a.manaHandoffToOpponent&&t.hasRoundtrip===a.hasRoundtrip&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&mn(t.inputs,a.inputs)&&t.spiritSetupGain>=R(a.spiritSetupGain,32)&&t.score>=L(a.score,96)&&t.rootRank<=a.rootRank+4,(t,s)=>{let u=n[t],c=n[s];return u===void 0||c===void 0?t-s:u.score!==c.score?u.score>c.score?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain>c.spiritSetupGain?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:re(n,t,s)})}l(YT,"blackPlainSpiritSetupCompetitionOverride");function QT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=qe(e,e.activeColor);if(a.delta.sameTurnScoreWindowValue>1||a.delta.opponentWindowDenyGain>1||a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let t=n[r];if(!(t===void 0||E(t)!==7||t.winsImmediately||t.attacksOpponentDrainer||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.sameTurnScoreWindowValue>0||t.manaHandoffToOpponent||t.hasRoundtrip||t.score<0))return Ee(n,o,(s,u)=>u!==r&&[3,4].includes(E(s))&&s.score>=0&&s.rootRank<t.rootRank&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip,(s,u)=>{let c=n[s],p=n[u];return c===void 0||p===void 0?s-u:c.score!==p.score?c.score>p.score?-1:1:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:re(n,s,u)})}l(QT,"blackNoActionProgressOverride");function ZT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[r];if(a===void 0)return;let t=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(E(a)!==7||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||a.sameTurnScoreWindowValue>0&&!t||a.rootRank<3&&!t))return Ee(n,o,(s,u)=>u===r||E(s)!==7||s.rootRank>=a.rootRank||s.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip?!1:a.score>=0?s.score>=0:t&&s.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&s.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&s.ownDrainerVulnerable===a.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===a.manaHandoffToOpponent&&s.hasRoundtrip===a.hasRoundtrip?!0:L(a.score,s.score)<=192,(s,u)=>Rn(n,s,u))}l(ZT,"blackNoActionManaSiblingOverride");function ne(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(ne,"rootIsNonTactical");function JT(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==4||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=qe(e,e.activeColor);if(a.delta.sameTurnScoreWindowValue>1||a.delta.opponentWindowDenyGain>1||a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let t=n[r];if(!(t===void 0||E(t)!==7||t.rootRank!==0||!t.ownDrainerVulnerable||!ne(t)))return Ee(n,o,(s,u)=>u!==r&&E(s)===7&&s.rootRank>t.rootRank&&s.rootRank<=t.rootRank+2&&s.sameTurnScoreWindowValue===t.sameTurnScoreWindowValue&&s.ownDrainerVulnerable===t.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&ne(s)&&s.score>=L(t.score,96)&&s.scorePathBestSteps>t.scorePathBestSteps,(s,u)=>Rn(n,s,u))}l(JT,"blackTurnFourWindowManaSiblingOverride");function ew(e,n,o,r,i,a){if(!N(a)||e.activeColor!==1||r===i||!o.includes(i))return;let t=n[r],s=n[i];if(t===void 0||s===void 0)return;let u=E(t),c=E(s),p=qe(e,e.activeColor),d=ne(t),f=ne(s);return e.turnNumber>=6&&e.monsMovesCount>=2&&e.playerCanUseAction()&&e.playerCanMoveMana()&&p.delta.sameTurnScoreWindowValue===0&&p.delta.opponentWindowDenyGain===0&&!p.delta.drainerAttackAvailable&&u===6&&c===7&&G(t)&&!z(t)&&d&&f&&t.ownDrainerVulnerable&&s.ownDrainerVulnerable&&s.score>=t.score||e.turnNumber===2&&e.monsMovesCount>=2&&e.playerCanUseAction()&&e.playerCanMoveMana()&&p.delta.sameTurnScoreWindowValue===0&&p.delta.opponentWindowDenyGain===0&&!p.delta.drainerAttackAvailable&&u===6&&c===6&&d&&f&&t.spiritOwnManaSetupNow&&s.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!A(t)&&!A(s)&&mn(t.inputs,s.inputs)&&t.spiritSetupGain===s.spiritSetupGain&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.score===s.score&&s.rootRank<t.rootRank&&Math.abs(t.rootRank-s.rootRank)<=2||e.turnNumber>=4&&e.monsMovesCount===0&&!e.playerCanUseAction()&&e.playerCanMoveMana()&&p.delta.sameTurnScoreWindowValue<=1&&p.delta.opponentWindowDenyGain<=1&&(p.delta.sameTurnScoreWindowValue>0||p.delta.opponentWindowDenyGain>0)&&u===7&&c===7&&d&&f&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.rootRank<s.rootRank&&t.score>=s.score&&s.scorePathBestSteps>t.scorePathBestSteps?i:void 0}l(ew,"blackBaselineAlignmentOverride");function nw(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber!==6||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||o.length===0)return;let a=n[r];if(a===void 0)return;let t=qe(e,e.activeColor);if(t.delta.sameTurnScoreWindowValue!==0||t.delta.opponentWindowDenyGain!==0||t.delta.drainerAttackAvailable||E(a)!==6||!G(a)||z(a)||!ne(a)||!a.ownDrainerVulnerable)return;let s=KS(i,_e.ProV1),u;if(s.enableRootReplyRiskGuard&&(u=La(e,n,o,e.activeColor,s)),u??(u=ja(e,n,o,e.activeColor,s)),u===void 0||u===r||!o.includes(u))return;let c=n[u];if(c===void 0||E(c)!==7||!ne(c)||!c.ownDrainerVulnerable||a.ownDrainerWalkVulnerable!==c.ownDrainerWalkVulnerable||a.safeSupermanaProgressSteps!==c.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps!==c.safeOpponentManaProgressSteps||a.scorePathBestSteps!==c.scorePathBestSteps||c.score<R(a.score,256))return;let p=Math.min(Math.max(i.rootReplyRiskReplyLimit,1),24),d=hn(a.game,e.activeColor,i,p),f=hn(c.game,e.activeColor,i,p);if(!(d.allowsImmediateOpponentWin||f.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||f.opponentReachesMatchPoint||f.worstReplyScore<R(d.worstReplyScore,32)))return u}l(nw,"blackTurnStartGuardedBaselineManaOverride");function ow(e,n,o,r,i,a){if(!N(a)||e.activeColor!==0||e.turnNumber!==3||r===i)return;let t=n[r],s=n[i];if(t===void 0||s===void 0)return;let u=qe(e,e.activeColor);return e.monsMovesCount>=3&&!e.playerCanUseAction()&&e.playerCanMoveMana()&&o.includes(i)&&u.delta.sameTurnScoreWindowValue===0&&u.delta.opponentWindowDenyGain===0&&!u.delta.drainerAttackAvailable&&E(t)===7&&E(s)===7&&ne(t)&&ne(s)&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!t.ownDrainerVulnerable&&!s.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&!s.ownDrainerWalkVulnerable&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.scorePathBestSteps===s.scorePathBestSteps&&t.spiritSetupGain===s.spiritSetupGain&&s.score>=R(t.score,16)&&s.rootRank>=t.rootRank+2&&s.rootRank<=t.rootRank+4?i:void 0}l(ow,"whiteTurnThreeBaselineAlignmentOverride");function rw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||o.length!==1||o[0]!==r||n.length===0)return;let a=n[r];if(a===void 0)return;let t=qe(e,e.activeColor);if(!t.delta.drainerAttackAvailable||t.delta.sameTurnScoreWindowValue!==0||t.delta.opponentWindowDenyGain!==0||e.monsMovesCount<2||!e.playerCanUseAction()||!e.playerCanMoveMana()||E(a)!==6||!a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||!a.spiritOwnManaSetupNow||!ne(a)||A(a)||a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let s=n.map((u,c)=>c);return Ee(n,s,(u,c)=>c!==r&&!o.includes(c)&&E(u)===7&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&ne(u)&&!A(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&u.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&u.scorePathBestSteps===a.scorePathBestSteps&&u.inputs.length>=3&&u.rootRank<=a.rootRank+2,(u,c)=>Rn(n,u,c))}l(rw,"whiteTurnThreeAttackBridgeEscape");function GS(e,n,o){return N(o)&&E(e)===7&&E(n)===7&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!A(e)&&!A(n)&&le.sameNonTacticalProgressLane(e,n)}l(GS,"isCurrentProWhiteManaSiblingPair");function tw(e,n,o,r,i,a){if(!N(a)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount<3||n.length===0)return;let t=n[r];if(t===void 0||E(t)!==7||t.ownDrainerVulnerable||t.ownDrainerWalkVulnerable||t.manaHandoffToOpponent||t.hasRoundtrip||t.winsImmediately||t.attacksOpponentDrainer||t.sameTurnScoreWindowValue>0||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||A(t))return;let s=le.turnEngineRootPlanUtility(e,t,i,a,7),u=new Map,c,p=s,d=!1;for(let f of o){if(f===r)continue;let m=n[f];if(m===void 0)continue;let S=GS(m,t,a)&&L(t.score,m.score)<=24&&Math.abs(t.rootRank-m.rootRank)<=4&&m.rootRank<t.rootRank;if(E(m)!==7||m.ownDrainerVulnerable||m.ownDrainerWalkVulnerable||m.manaHandoffToOpponent||m.hasRoundtrip||m.winsImmediately||m.attacksOpponentDrainer||m.sameTurnScoreWindowValue>0||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow||!S&&m.score<L(t.score,96)||A(m)||m.rootRank>=t.rootRank&&!S)continue;let h=u.get(f);h===void 0&&(h=le.turnEngineRootPlanUtility(e,m,i,a,7),u.set(f,h));let M=oe(h,s)>0||h.strictlyDominatesOverrideAxes(s);if(!M&&!S)continue;let C=c===void 0;if(c!==void 0){let k=n[c];if(k===void 0)C=!0;else{let b=GS(k,t,a)&&L(t.score,k.score)<=24&&Math.abs(t.rootRank-k.rootRank)<=4&&k.rootRank<t.rootRank;if(M!==d)C=M;else if(M){let w=oe(h,p);C=w>0||w===0&&re(n,f,c)<0}else S&&b?C=m.rootRank<k.rootRank||m.rootRank===k.rootRank&&re(n,f,c)<0:C=S}}C&&(c=f,p=h,d=M)}return c}l(tw,"whiteManaCompetitionOverride");function aw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||!Lo(e))return;let a=n[r];if(!(a===void 0||![3,4].includes(E(a))||!a.ownDrainerVulnerable||!ne(a)||a.sameTurnScoreWindowValue>0))return Ee(n,o,(t,s)=>s!==r&&E(t)===7&&!A(t)&&!t.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&ne(t)&&t.sameTurnScoreWindowValue===0&&t.safeSupermanaProgressSteps<=R(a.safeSupermanaProgressSteps,1)&&t.safeOpponentManaProgressSteps<=R(a.safeOpponentManaProgressSteps,1)&&R(t.score,448)>=a.score,(t,s)=>Rn(n,t,s))}l(aw,"whiteNoActionSafeProgressManaOverride");function Vr(e){return E(e)===7&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Vr,"isNonConcreteManaWindowRoot");function iw(e,n,o,r){return N(r)&&e.activeColor===0&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&E(n)===6&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&z(n)&&ne(n)&&n.sameTurnScoreWindowValue===0&&Vr(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}l(iw,"isWhiteSpiritProgressWindowPair");function sw(e,n,o,r,i,a){if(!N(a)||e.activeColor!==0||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let t=n[r];if(t===void 0||!Vr(t))return;let s=qe(e,e.activeColor),u=s.delta.sameTurnScoreWindowValue<=1&&s.delta.opponentWindowDenyGain<=1,c=Bs(o.length,a),p=hn(t.game,i,a,c);if(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint)return;let d=pn(e,t,i,a),f=le.spiritFollowupFloorScore(t.game,i,a),m=new Map([[r,p]]),S=new Map([[r,f]]),h=l(C=>{let k=m.get(C),b=n[C];return k===void 0&&b!==void 0&&(k=hn(b.game,i,a,c),m.set(C,k)),k},"snapshot"),y=l(C=>{let k=S.get(C),b=n[C];return k===void 0&&b!==void 0&&(k=le.spiritFollowupFloorScore(b.game,i,a),S.set(C,k)),k},"followup"),M;for(let C of o){if(C===r)continue;let k=n[C];if(k===void 0||!iw(e,k,t,a)||k.rootRank>t.rootRank+8)continue;let b=h(C),w=y(C);if(b===void 0||w===void 0)continue;let P=le.rootProgressOrSetupBetter(k,t),O=u&&P&&k.score>=L(t.score,32),I=Gr(pn(e,k,i,a),d)||P;if(!(b.allowsImmediateOpponentWin||b.opponentReachesMatchPoint||!O&&!I||!O&&R(b.worstReplyScore,192)<p.worstReplyScore||!O&&R(w,32)<f))if(M===void 0)M=C;else{let D=h(M),x=y(M);(D===void 0||x===void 0||w>x||w===x&&b.worstReplyScore>D.worstReplyScore||w===x&&b.worstReplyScore===D.worstReplyScore&&re(n,C,M)<0)&&(M=C)}}return M}l(sw,"whiteWindowProgressCompetitionOverride");function uw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||E(a)!==6||!G(a)||!z(a)||!ne(a)||a.sameTurnScoreWindowValue>0||A(a)))return Ee(n,o,(t,s)=>s!==r&&E(t)===7&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&ne(t)&&t.sameTurnScoreWindowValue===0&&!A(t)&&mn(t.inputs,a.inputs)&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&t.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&t.score>=a.score,(t,s)=>{let u=n[t],c=n[s];return u===void 0||c===void 0?t-s:u.score!==c.score?u.score>c.score?-1:1:re(n,t,s)})}l(uw,"whiteActionManaClusterOverride");function lw(e,n,o,r,i,a){if(!N(a)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount<2||!e.playerCanUseAction()||!e.playerCanMoveMana()||o.length!==1||n.length===0)return;let t=n[r];if(t===void 0||E(t)!==6||!t.spiritOwnManaSetupNow||t.spiritSameTurnScoreSetupNow||!ne(t)||t.sameTurnScoreWindowValue>0||A(t))return;let s=pn(e,t,i,a);return Ee(n,n.map((u,c)=>c),(u,c)=>c===r||E(u)!==7||u.spiritDevelopment||u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||u.ownDrainerVulnerable||u.ownDrainerWalkVulnerable||!ne(u)||u.sameTurnScoreWindowValue!==0||A(u)||u.rootRank>t.rootRank+2||u.safeSupermanaProgressSteps>t.safeSupermanaProgressSteps||u.safeOpponentManaProgressSteps>t.safeOpponentManaProgressSteps||u.scorePathBestSteps>t.scorePathBestSteps?!1:oe(pn(e,u,i,a),s)>0||u.score>=R(t.score,512),(u,c)=>re(n,u,c))}l(lw,"whiteFollowupManaOverride");function cw(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(a===void 0||E(a)!==7||!Vr(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let t=z(a);return Ee(n,o,(s,u)=>{let c=z(s),p=le.rootProgressOrSetupBetter(s,a)||c&&!t;return u!==r&&E(s)===7&&mn(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ne(s)&&!A(s)&&(a.rootRank>0||p)&&L(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>Rn(n,s,u))}l(cw,"blackLateWindowManaSafetyOverride");function pw(e,n,o,r){if(!N(r)||e.activeColor!==1||e.turnNumber<8||e.monsMovesCount<3||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let i=qe(e,e.activeColor);if(i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let a=n[o];if(!(a===void 0||E(a)!==7||a.sameTurnScoreWindowValue!==0||!ne(a)||A(a)))return Ee(n,n.map((t,s)=>s),(t,s)=>s!==o&&E(t)===7&&Vr(t)&&t.rootRank===0&&t.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&L(a.score,t.score)<=256,(t,s)=>re(n,t,s))}l(pw,"blackLateWindowCompetitionOverride");function dw(e,n,o,r,i){if(!N(i)||e.activeColor!==1||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||E(a)!==5||!a.spiritDevelopment||!z(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!ne(a)||A(a)||a.inputs.length<3))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&z(t)&&ne(t)&&t.sameTurnScoreWindowValue===0&&t.inputs.length>=3&&xs(t.inputs,a.inputs,0)&&xs(t.inputs,a.inputs,1)&&L(a.score,t.score)<=1024&&t.rootRank<=a.rootRank+2&&le.rootProgressOrSetupBetter(t,a),(t,s)=>re(n,t,s))}l(dw,"blackLateRecoveryProgressCompetitionOverride");function fw(e,n,o,r,i,a){if(!N(a)||e.activeColor!==0||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let t=n[r];if(t===void 0||E(t)!==6||!G(t)||!z(t)||!ne(t)||t.sameTurnScoreWindowValue>0||A(t))return;let s=Bs(o.length,a),u=hn(t.game,i,a,s);if(u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint)return;let c=new Map,p=new Map([[r,u]]),d=new Map,f=l(C=>{let k=c.get(C),b=n[C];return k===void 0&&b!==void 0&&(k=pn(e,b,i,a),c.set(C,k)),k},"utility"),m=l(C=>{let k=p.get(C),b=n[C];return k===void 0&&b!==void 0&&(k=hn(b.game,i,a,s),p.set(C,k)),k},"snapshot"),S=l(C=>{let k=d.get(C),b=n[C];return k===void 0&&b!==void 0&&(k=le.spiritFollowupFloorScore(b.game,i,a),d.set(C,k)),k},"followup"),h=f(r),y=S(r);if(h===void 0||y===void 0)return;let M;for(let C of o){if(C===r)continue;let k=n[C];if(k===void 0||E(k)!==6||!k.spiritOwnManaSetupNow||k.spiritSameTurnScoreSetupNow||!z(k)||!sn(k)||!ne(k)||k.sameTurnScoreWindowValue>0||!mn(k.inputs,t.inputs)||k.ownDrainerVulnerable!==t.ownDrainerVulnerable||k.ownDrainerWalkVulnerable!==t.ownDrainerWalkVulnerable)continue;let b=k.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&k.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps&&k.manaHandoffToOpponent===t.manaHandoffToOpponent&&k.hasRoundtrip===t.hasRoundtrip&&L(t.score,k.score)<=64&&k.spiritSetupGain>=R(t.spiritSetupGain,32)&&k.rootRank<=t.rootRank+2,w=f(C),P=m(C),O=S(C);if(w===void 0||P===void 0||O===void 0)continue;let I=!P.allowsImmediateOpponentWin&&!P.opponentReachesMatchPoint&&L(t.score,k.score)<=128&&R(P.worstReplyScore,320)>=u.worstReplyScore&&R(O,32)>=y&&k.rootRank<=t.rootRank+4&&(Gr(w,h)||le.rootProgressOrSetupBetter(k,t));if(!b&&!I)continue;if(M===void 0){M=C;continue}let D=n[M],x=f(M),W=m(M),_=S(M);if(D===void 0||x===void 0||W===void 0||_===void 0){M=C;continue}let v=oe(w,x);(v>0||v>=0&&O>_||v>=0&&O===_&&P.worstReplyScore>W.worstReplyScore||O===_&&P.worstReplyScore===W.worstReplyScore&&k.spiritSetupGain>D.spiritSetupGain||O===_&&P.worstReplyScore===W.worstReplyScore&&k.spiritSetupGain===D.spiritSetupGain&&re(n,C,M)<0)&&(M=C)}return M}l(fw,"whiteSetupProgressCompetitionOverride");function mw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||E(a)!==6||!G(a)||!z(a)||!ne(a)||a.sameTurnScoreWindowValue>0||A(a)))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&z(t)&&ne(t)&&t.sameTurnScoreWindowValue===0&&!A(t)&&mn(t.inputs,a.inputs)&&t.supermanaProgress===a.supermanaProgress&&t.opponentManaProgress===a.opponentManaProgress&&t.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&L(a.score,t.score)<=64&&t.spiritSetupGain>=R(a.spiritSetupGain,32)&&t.rootRank<=a.rootRank+4,(t,s)=>{let u=n[t],c=n[s];return u===void 0||c===void 0?t-s:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:re(n,t,s)})}l(mw,"whiteEarlyFollowupSetupCompetitionOverride");function Sw(e,n,o,r){if(!N(r)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0||!Lo(e))return;let i=n[o];if(!(i===void 0||E(i)!==6||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!z(i)||!ne(i)||i.sameTurnScoreWindowValue>0||A(i)))return Ee(n,n.map((a,t)=>t),(a,t)=>{let s=a.safeSupermanaProgressSteps<i.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<i.safeOpponentManaProgressSteps||a.spiritSetupGain>i.spiritSetupGain;return t!==o&&E(a)===6&&a.spiritOwnManaSetupNow&&!a.spiritSameTurnScoreSetupNow&&z(a)&&ne(a)&&a.sameTurnScoreWindowValue===0&&!A(a)&&mn(a.inputs,i.inputs)&&a.supermanaProgress===i.supermanaProgress&&a.opponentManaProgress===i.opponentManaProgress&&a.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps&&a.scorePathBestSteps<=i.scorePathBestSteps&&a.ownDrainerVulnerable===i.ownDrainerVulnerable&&a.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&a.score>=L(i.score,64)&&a.rootRank<=i.rootRank+8&&s},(a,t)=>{let s=n[a],u=n[t];if(s===void 0||u===void 0)return a-t;let c=L(i.safeSupermanaProgressSteps,s.safeSupermanaProgressSteps),p=L(i.safeSupermanaProgressSteps,u.safeSupermanaProgressSteps);if(c!==p)return c>p?-1:1;let d=L(i.spiritSetupGain,s.spiritSetupGain),f=L(i.spiritSetupGain,u.spiritSetupGain);return d!==f?d>f?-1:1:s.score!==u.score?s.score>u.score?-1:1:s.rootRank!==u.rootRank?s.rootRank<u.rootRank?-1:1:re(n,a,t)})}l(Sw,"whiteEarlySetupSiblingProgressOverride");function yw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||![3,4].includes(E(a))||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ne(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ee(n,o,(t,s)=>s!==r&&[3,4].includes(E(t))&&!t.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&ne(t)&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&t.supermanaProgress===a.supermanaProgress&&t.opponentManaProgress===a.opponentManaProgress&&t.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&t.score>=L(a.score,32),(t,s)=>Rn(n,t,s))}l(yw,"whiteEarlyNoActionProgressCompetitionOverride");function hw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||![3,4].includes(E(a))||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ne(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ee(n,o,(t,s)=>s!==r&&E(t)===7&&!t.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&ne(t)&&!A(t)&&L(a.score,t.score)<=64&&Math.abs(a.rootRank-t.rootRank)<=6,(t,s)=>Rn(n,t,s))}l(hw,"whiteManaOnlyCompetitionOverride");function bw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||![3,4].includes(E(a))||A(a)||!ne(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ee(n,o,(t,s)=>s!==r&&[3,4].includes(E(t))&&!A(t)&&ne(t)&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===a.manaHandoffToOpponent&&t.hasRoundtrip===a.hasRoundtrip&&t.rootRank<a.rootRank&&t.score>=L(a.score,32)&&le.rootProgressOrSetupBetter(t,a),(t,s)=>Rn(n,t,s))}l(bw,"whiteTurnThreeSafeProgressSurfaceOverride");function oy(e,n,o,r,i){if(!N(i)||e.activeColor!==r.color||e.turnNumber!==r.turnNumber||(r.monsMoves.kind==="exact"?e.monsMovesCount!==r.monsMoves.count:e.monsMovesCount<r.monsMoves.count)||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=qe(e,e.activeColor);if(a.delta.sameTurnScoreWindowValue>1||a.delta.opponentWindowDenyGain>1||a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0||r.rejectDrainerAttack&&a.delta.drainerAttackAvailable||a.delta.drainerSafety>=0)return;let t=n[o];if(!(t===void 0||!Vr(t)||!t.ownDrainerVulnerable||t.ownDrainerWalkVulnerable||t.spiritDevelopment||t.spiritSameTurnScoreSetupNow||t.spiritOwnManaSetupNow))return Ee(n,n.map((s,u)=>u),(s,u)=>u!==o&&E(s)===5&&s.classes.drainerSafetyRecover&&!A(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&ne(s)&&s.sameTurnScoreWindowValue===0&&mn(s.inputs,t.inputs)&&(!r.requireSameProgressSteps||s.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps)&&s.rootRank<=t.rootRank&&s.scorePathBestSteps>t.scorePathBestSteps,(s,u)=>Rn(n,s,u))}l(oy,"noActionRecoveryOverride");function Mw(e,n,o,r){return oy(e,n,o,{color:0,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}l(Mw,"whiteTurnThreeNoActionRecoveryOverride");function kw(e,n,o,r){return oy(e,n,o,{color:1,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}l(kw,"blackTurnFourWeakWindowRecoveryOverride");function Cw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[r];if(!(a===void 0||![3,4].includes(E(a))||A(a)||!ne(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ee(n,o,(t,s)=>{let u=L(a.score,t.score)<=160&&t.spiritSetupGain>=R(a.spiritSetupGain,64)&&t.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&t.rootRank+6<=a.rootRank;return s!==r&&E(t)===6&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&z(t)&&!A(t)&&ne(t)&&t.sameTurnScoreWindowValue===0&&t.manaHandoffToOpponent===a.manaHandoffToOpponent&&t.hasRoundtrip===a.hasRoundtrip&&t.ownDrainerVulnerable===a.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(L(a.score,t.score)<=32||u)&&t.spiritSetupGain>=R(a.spiritSetupGain,64)&&t.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&t.rootRank<=a.rootRank+4},(t,s)=>{let u=n[t],c=n[s];return u===void 0||c===void 0?t-s:u.score!==c.score?u.score>c.score?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain<c.spiritSetupGain?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:re(n,t,s)})}l(Cw,"whiteEarlySafeProgressSetupCompetitionOverride");function Tw(e,n,o,r,i){if(!N(i)||e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||o.length!==1||n.length===0)return;let a=n[r];if(!(a===void 0||E(a)!==6||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!ne(a)||a.sameTurnScoreWindowValue>0||A(a)||qe(e,e.activeColor).delta.sameTurnScoreWindowValue===0))return Ee(n,n.map((s,u)=>u),(s,u)=>u!==r&&E(s)===7&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.sameTurnScoreWindowValue===0&&ne(s)&&!A(s),(s,u)=>re(n,s,u))}l(Tw,"whiteEarlySetupCompetitionOverride");function ww(e,n,o,r){return N(r)&&e.activeColor===0&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&E(n)===6&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&ne(n)&&!A(n)&&[3,7].includes(E(o))&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&ne(o)&&!A(o)&&mn(n.inputs,o.inputs)}l(ww,"isLateWhiteSpiritFollowupSafeProgressPair");function Rw(e,n,o,r){if(!N(r)||e.activeColor!==0||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let i=n[o];if(i===void 0||![3,7].includes(E(i)))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&ww(e,u,i,r)&&L(i.score,u.score)<=512&&Math.abs(i.rootRank-u.rootRank)<=10}),t=a.some(s=>n[s]?.spiritOwnManaSetupNow===!0);return a.sort((s,u)=>{let c=n[s],p=n[u];return c===void 0||p===void 0?s-u:t&&c.spiritOwnManaSetupNow!==p.spiritOwnManaSetupNow?c.spiritOwnManaSetupNow?-1:1:t&&c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:Rn(n,s,u)})[0]}l(Rw,"whiteLateFollowupCompetitionOverride");function Ws(e){return e.activeColor===1&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}l(Ws,"isLateBlackActionManaTurnStart");function Pw(e,n,o,r){return N(r)&&Ws(e)&&E(n)===6&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&ne(n)&&!A(n)&&E(o)===7&&o.sameTurnScoreWindowValue===0&&ne(o)&&!A(o)&&mn(n.inputs,o.inputs)}l(Pw,"isLateBlackSpiritFollowupManaPair");function Ow(e,n,o,r,i){if(!N(i)||!Ws(e)||n.length===0)return;let a=n[r];if(!(a===void 0||E(a)!==7))return Ee(n,o,(t,s)=>s!==r&&Pw(e,t,a,i)&&L(a.score,t.score)<=512&&t.rootRank<a.rootRank&&Math.abs(a.rootRank-t.rootRank)<=16,(t,s)=>Rn(n,t,s))}l(Ow,"blackLateFollowupCompetitionOverride");function Ew(e,n,o,r,i){if(!N(i)||!Ws(e)||o.length===0||n.length===0||!Lo(e))return;let a=n[r];if(!(a===void 0||E(a)!==7||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||z(a)||!ne(a)||a.sameTurnScoreWindowValue>0||A(a)||a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable))return Ee(n,o,(t,s)=>s!==r&&E(t)===6&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!z(t)&&ne(t)&&t.sameTurnScoreWindowValue===0&&!A(t)&&!t.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&t.spiritSetupGain>=R(a.spiritSetupGain,64)&&L(a.score,t.score)<=2048&&t.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&t.scorePathBestSteps===a.scorePathBestSteps&&t.rootRank<a.rootRank&&Math.abs(a.rootRank-t.rootRank)<=4,(t,s)=>{let u=n[t],c=n[s];return u===void 0||c===void 0?t-s:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain>c.spiritSetupGain?-1:1:re(n,t,s)})}l(Ew,"blackLateReplyRiskSetupOverride");function gw(e,n,o,r,i,a){if(!N(a)||!Ws(e)||o.length===0||n.length===0)return;let t=qe(e,e.activeColor);if(!(t.delta.sameTurnScoreWindowValue<=1&&t.delta.opponentWindowDenyGain<=1&&!t.delta.drainerAttackAvailable&&(t.delta.sameTurnScoreWindowValue>0||t.delta.opponentWindowDenyGain>0)))return;let u=n[r];if(u===void 0)return;let c=E(u);if(![3,4].includes(c)||!z(u)||u.spiritDevelopment||u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||!ne(u)||u.sameTurnScoreWindowValue>0||A(u)||u.ownDrainerVulnerable||u.ownDrainerWalkVulnerable)return;let p=pn(e,u,i,a);return Ee(n,o,(d,f)=>f!==r&&E(d)===6&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&z(d)&&ne(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===u.manaHandoffToOpponent&&d.hasRoundtrip===u.hasRoundtrip&&!A(d)&&d.ownDrainerVulnerable===u.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&d.supermanaProgress===u.supermanaProgress&&d.opponentManaProgress===u.opponentManaProgress&&Gr(pn(e,d,i,a),p)&&L(u.score,d.score)<=32&&d.spiritSetupGain>=R(u.spiritSetupGain,64)&&d.rootRank<=u.rootRank+4,(d,f)=>{let m=n[d],S=n[f];return m===void 0||S===void 0?d-f:m.score!==S.score?m.score>S.score?-1:1:m.spiritSetupGain!==S.spiritSetupGain?m.spiritSetupGain>S.spiritSetupGain?-1:1:m.rootRank!==S.rootRank?m.rootRank<S.rootRank?-1:1:re(n,d,f)})}l(gw,"blackLateWeakWindowSafeProgressSetupOverride");function vw(e,n,o,r){return N(r)&&e.activeColor===1&&e.turnNumber<=4&&G(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&mn(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(vw,"isBlackPlainSpiritFollowupSetupPair");function Aw(e,n,o,r){return N(r)&&e.activeColor===1&&e.turnNumber<=4&&E(n)===6&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&z(n)&&!n.winsImmediately&&!n.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&Vr(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}l(Aw,"isBlackSpiritProgressWindowPair");function Iw(e,n,o,r,i,a,t){if(!N(t)||e.activeColor!==1||n.length===0)return;let s=n[i];if(s===void 0||E(s)!==7||i>1&&!(e.turnNumber<=2&&e.playerCanUseAction()&&e.playerCanMoveMana()))return;let u=Vr(s);if(s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0&&!u||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow)return;let c=le.turnEngineRootPlanUtility(e,s,a,t,7),p=A(s),d=z(s),f=Bs(o.length,t),m=new Map,S=new Map,h=l(k=>{let b=m.get(k),w=n[k];return b===void 0&&w!==void 0&&(b=hn(w.game,a,t,f),m.set(k,b)),b},"snapshot"),y=l(k=>{let b=S.get(k),w=n[k];return b===void 0&&w!==void 0&&(b=le.spiritFollowupFloorScore(w.game,a,t),S.set(k,b)),b},"followup"),M=[];for(let k of r){if(k===i)continue;let b=n[k];if(b===void 0)continue;let w=E(b),P=b.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow,O=w===6&&!P&&z(b),D=[3,4].includes(w)&&!u,x=P&&!u&&e.turnNumber<=4;if(!x&&!D&&!O)continue;let W=pn(e,b,a,t),_=z(b),v=le.rootProgressOrSetupBetter(b,s)||_&&!d;if(w===6&&!p&&!A(b)&&E(s)===7&&!d&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&b.spiritDevelopment&&!b.spiritSameTurnScoreSetupNow&&!b.spiritOwnManaSetupNow&&_&&!b.winsImmediately&&!b.attacksOpponentDrainer&&!b.scoresSupermanaThisTurn&&!b.scoresOpponentManaThisTurn&&!b.safeSupermanaPickupNow&&!b.safeOpponentManaPickupNow&&!b.manaHandoffToOpponent&&!b.hasRoundtrip&&b.sameTurnScoreWindowValue===0&&b.score<=s.score)continue;let de=D&&e.turnNumber<=6&&s.score<0&&b.score>=0&&v,he=!1;if(O&&u&&Aw(e,b,s,t)&&b.rootRank<=s.rootRank+8){let Qe=h(k),ve=h(i),ze=y(k),vn=y(i);he=Qe!==void 0&&ve!==void 0&&ze!==void 0&&vn!==void 0&&!Qe.allowsImmediateOpponentWin&&!ve.allowsImmediateOpponentWin&&!Qe.opponentReachesMatchPoint&&!ve.opponentReachesMatchPoint&&le.rootProgressOrSetupBetter(b,s)&&R(Qe.worstReplyScore,192)>=ve.worstReplyScore&&R(ze,32)>=vn}if(!Gr(W,c)&&!de&&!he||A(b)&&!p&&!x&&!de&&!he)continue;let ie=x&&$S(e,b,s,a,t);(v||ie||he)&&M.push(k)}return M.map(k=>{let b=n[k];if(b===void 0||!b.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow)return k;let w=h(k);return w===void 0?k:o.filter(O=>{let I=n[O];if(O===k||I===void 0||!vw(e,I,b,t))return!1;let D=h(O);return D!==void 0&&(le.blackPlainSpiritFollowupReplyOrder(e,n,O,D,k,w,a,t,S)??0)>0}).sort((O,I)=>{let D=n[O],x=n[I],W=h(O),_=h(I);if(D===void 0||x===void 0||W===void 0||_===void 0)return O-I;if(W.worstReplyScore!==_.worstReplyScore)return W.worstReplyScore>_.worstReplyScore?-1:1;let v=y(O)??-2147483648,j=y(I)??-2147483648;return v!==j?v>j?-1:1:D.score!==x.score?D.score>x.score?-1:1:re(n,O,I)})[0]??k}).sort((k,b)=>re(n,k,b))[0]}l(Iw,"blackFamilyCompetitionOverride");function VS(e,n,o,r,i,a,t,s=5){let u=e[t];if(u===void 0)return;let c=mr(u,s);lo(o,c),r.includes(t)||r.push(t),i.includes(t)||i.push(t),a.includes(t)||a.push(t),lo(n,c)}l(VS,"addAdvisorReentry");function Nw(e,n,o,r){if(!N(r)||n.length===0||T())return;let i=JS(r,!1),a=Ua(e,n,o,r,{rootReplyRiskSnapshot:l((D,x,W,_)=>hn(D,x,r,_),"rootReplyRiskSnapshot"),currentPro:i});a.length===0&&(a=n.map((D,x)=>x));let t=r.enableRootReplyRiskGuard?_a(n,a,r):[...a];t.length===0&&(t=[...a]);let s=[...t],u=[...t],c=[...a],p=[],d=[];for(let D of t){let x=n[D];x!==void 0&&lo(p,mr(x,1))}let f=new Map,m=[[2,D=>D.spiritSameTurnScoreSetupNow||D.spiritOwnManaSetupNow],[2,G],[3,D=>E(D)===3],[3,D=>E(D)===4],[4,D=>E(D)===7]];for(let[D,x]of m){if(T())return;let W=CT(e,n,t,o,r,x),_=W===void 0?void 0:n[W];if(W===void 0||_===void 0)continue;let v=mr(_,D);lo(d,v),t.includes(W)||t.push(W),c.includes(W)||c.push(W),lo(p,v),LT(e,n,t,W,D,o,r,f)&&!u.includes(W)&&u.push(W)}let S=TT(e,n,t,r);S!==void 0&&VS(n,p,d,t,c,u,S,2);for(let D of ET(e,n,a,t,o,r))VS(n,p,d,t,c,u,D);c.sort((D,x)=>re(n,D,x));let h=FS(r,_e.ProV1),y=ja(e,n,a,o,h),M=FS(r,r.turnEngineMode),C,k;r.enableRootReplyRiskGuard&&(C=La(e,n,u,o,r,c)),C!==void 0?k=8:(C=ja(e,n,c,o,M,{currentPro:i}),k=9);let b=C??t[0]??a[0]??0,w=l(D=>{D!==void 0&&(b=D,k=10)},"approveFamily"),P=l(D=>{D!==void 0&&(b=D,k=9)},"approveBaseline");w(Iw(e,n,s,c,b,o,r)),w(HT(e,n,c,b,r)),w(UT(e,n,c,b,r)),w(jT(e,n,c,b,r)),w(KT(e,n,c,b,r)),w(qT(e,n,c,b,r)),w(zT(e,n,c,b,r)),w(_S(e,n,c,b,r)),w(XT(e,n,c,b,o,r)),w(YT(e,n,c,b,r)),w(QT(e,n,c,b,r)),w(ZT(e,n,c,b,r)),w(JT(e,n,c,b,r)),w(kw(e,n,b,r)),P(y===void 0?void 0:ew(e,n,c,b,y,r)),P(nw(e,n,a,b,r)),w(cw(e,n,c,b,r)),w(pw(e,n,b,r)),w(dw(e,n,c,b,r)),w(lw(e,n,c,b,o,r)),w(tw(e,n,c,b,o,r)),w(aw(e,n,c,b,r)),w(sw(e,n,c,b,o,r)),w(uw(e,n,c,b,r)),w(fw(e,n,c,b,o,r)),w(mw(e,n,c,b,r)),w(_S(e,n,c,b,r)),w(Sw(e,n,b,r)),w(Cw(e,n,c,b,r)),w(yw(e,n,c,b,r)),w(bw(e,n,c,b,r)),P(y===void 0?void 0:ow(e,n,c,b,y,r)),w(rw(e,n,c,b,r)),w(Mw(e,n,b,r)),w(hw(e,n,c,b,r)),w($T(e,n,c,b,r)),w(Tw(e,n,c,b,r)),w(Rw(e,n,b,r)),w(Ow(e,n,c,b,r)),w(Ew(e,n,s,b,r)),w(gw(e,n,s,b,o,r));let O=n[b];if(O===void 0||T())return;let I=mr(O,k);return{index:b,decision:{orderedShortlist:p,preservedFamilyRepresentatives:d,approvedRoot:I,injectedRoot:void 0}}}l(Nw,"currentProRootAdvisorPostsearch");function Lr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`shipping selector index ${n} is out of bounds`);return o}l(Lr,"valueAt");function Sr(e,n){let o=e[0],r=n[0];return o!==void 0&&r!==void 0&&_n(o)===_n(r)}l(Sr,"firstInputsEqual");function za(e){return e.turnEngineMode===_e.CurrentPro?1:0}l(za,"modeFromConfig");function _s(e){return e===1}l(_s,"turnEngineModeUsesMacroPlans");function Ho(e){return Math.max(Math.trunc(e),1)}l(Ho,"positiveCap");function Ya(e){return{mode:za(e),ownSeedCap:Ho(e.turnEngineSeedCap),ownBeam:Ho(e.turnEngineBeamWidth),perNodeFamilyCap:Ho(e.turnEnginePerNodeFamilyCap),stepCap:Ho(e.turnEngineStepCap),opponentSeedCap:Ho(e.turnEngineOpponentSeedCap),opponentBeam:Ho(e.turnEngineOpponentBeamWidth),replySeedCap:Ho(e.turnEngineReplySeedCap),replyBeam:Ho(e.turnEngineReplyBeamWidth),expansionCap:Ho(e.turnEngineExpansionCap),enableSpiritFamily:e.turnEngineEnableSpiritFamily,scoringWeights:e.scoringWeights,enableLazyOracleScoreWindowProjection:!1}}l(Ya,"turnEngineConfigFromSearchConfig");function Qa(e){return e.enableTurnEngineSelector&&e.turnEngineMode===_e.CurrentPro}l(Qa,"currentProTurnEngineLive");function Ac(e){return Qa(e)&&e.enableTurnEngineLowBudgetGuard}l(Ac,"currentProLowBudgetGuardLive");function Dw(e){return Qa(e)&&e.enableTurnEngineMidTurnTacticalGuard}l(Dw,"currentProMidTurnTacticalGuardLive");function iy(e){return Qa(e)&&e.enableTurnEngineSecondaryAnalysis}l(iy,"currentProSecondaryAnalysisLive");function xw(e){return e.activeColor===0&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}l(xw,"currentProIsWhiteTurnOneManaOnlyFollowup");function Bw(e,n){return Qa(n)&&e.activeColor===0&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}l(Bw,"currentProUseFreshLiveHeadPlan");function Ic(e){if(e.activeColor!==1||e.turnNumber!==2||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let n=qe(e,e.activeColor);return!n.opponentCanWinImmediately&&n.delta.sameTurnScoreWindowValue<=0&&n.delta.opponentWindowDenyGain<=0&&!n.delta.drainerAttackAvailable&&n.delta.drainerSafety>=2}l(Ic,"currentProIsSafeEarlyBlackOpeningState");function Ww(e){if(ao(e)||e.playerCanUseAction()||e.playerCanMoveMana())return!1;let n=qe(e,e.activeColor);return!n.opponentCanWinImmediately&&n.delta.sameTurnScoreWindowValue<=0&&n.delta.opponentWindowDenyGain<=0&&!n.delta.drainerAttackAvailable&&n.delta.safeSupermanaProgressSteps===void 0&&n.delta.safeOpponentManaProgressSteps===void 0&&n.delta.drainerSafety>=0}l(Ww,"shouldSkipCurrentProLowBudgetState");function Fw(e){if(e.activeColor!==0||e.turnNumber!==3||e.monsMovesCount===0||e.monsMovesCount>2||!e.playerCanUseAction()||!e.playerCanMoveMana()||ao(e))return!1;let n=qe(e,e.activeColor);return!n.opponentCanWinImmediately&&n.delta.drainerSafety<0&&n.delta.sameTurnScoreWindowValue<=0&&n.delta.safeSupermanaProgressSteps===void 0&&n.delta.safeOpponentManaProgressSteps===void 0}l(Fw,"shouldDisableCurrentProMidTurnTacticalEngine");function _w(e,n){return!Ac(n)||e.activeColor!==1||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:{...n,maxVisitedNodes:Math.min(n.maxVisitedNodes,6e3),rootBranchLimit:Math.min(Math.max(n.rootBranchLimit,1),12),rootReplyRiskReplyLimit:Math.min(Math.max(n.rootReplyRiskReplyLimit,1),12),rootReplyRiskNodeShareBp:Math.min(n.rootReplyRiskNodeShareBp,1200)}}l(_w,"applyCurrentProLowBudgetSearchClamp");function $a(e,n){let o=Ya(n);return!_s(o.mode)||!n.enableTurnEngineLowBudgetGuard||!ao(e)?o:vs(o)}l($a,"turnEngineConfigForGame");function xc(e){return As(Ya(e))}l(xc,"turnEngineRerankConfig");function Nc(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}l(Nc,"hasPickupUpgrade");function Dc(e){return z(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}l(Dc,"rootHasProgressSurface");function Fs(e){return E(e)===7&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!Q(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Fs,"isCurrentProNonConcreteManaWindowRoot");function sy(e,n){for(let[o,r]of e.board.occupied()){let i=H(r);if(!(i?.kind!==1||i.color!==n))return V(i)?!0:e.isFirstTurn()?!1:!ea(e.board,n,o)}return!1}l(sy,"ownDrainerVulnerableNextTurn");function Gw(e,n){let o=l((i,a,t=!0)=>i===a?void 0:i===t,"preferBoolean"),r=o(e.winsImmediately,n.winsImmediately);return r??(r=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer)),r??(r=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1)),r??(r=o(e.classes.immediateScore,n.classes.immediateScore)),r??(r=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn)),r??(r=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn)),r??(r=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow)),r??(r=o(e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow)),r!==void 0?r:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue:(r=o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),r??(r=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow)),r!==void 0?r:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?Ye(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?Ye(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):(r=o(e.supermanaProgress,n.supermanaProgress),r!==void 0?r:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?Ye(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):(r=o(e.opponentManaProgress,n.opponentManaProgress),r!==void 0?r:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?Ye(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):(r=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),r??(r=o(e.hasRoundtrip,n.hasRoundtrip,!1)),r??(r=o(e.spiritDevelopment,n.spiritDevelopment)),r!==void 0?r:e.efficiency!==n.efficiency?e.efficiency>n.efficiency:e.heuristic>n.heuristic))))}l(Gw,"isBetterTacticalRootCandidate");function Vw(e,n){let o;return e.forEach((r,i)=>{n(r)&&(o===void 0||Gw(r,Lr(e,o)))&&(o=i)}),o}l(Vw,"bestTacticalRootIndex");function ry(e,n,o,r){if(!r.enableForcedTacticalPrepass||o.length===0)return;let i=l(d=>{let f=Vw(o,d);return f===void 0?void 0:Be(Lr(o,f).inputs)},"choose"),a=i(d=>d.winsImmediately);if(a!==void 0)return a;let t=r.enableSupermanaPrepassException&&o.some(d=>d.scoresSupermanaThisTurn),s=l(d=>d.safeSupermanaPickupNow&&!d.ownDrainerVulnerable&&!d.manaHandoffToOpponent&&!d.winsImmediately&&!d.attacksOpponentDrainer,"safeSupermanaPickup"),u=r.enableSupermanaPrepassException&&o.some(s),c=t||u;if(r.enableSupermanaPrepassException&&(a=i(d=>d.scoresSupermanaThisTurn),a!==void 0||(a=i(s),a!==void 0))||!c&&(a=i(d=>d.attacksOpponentDrainer),a!==void 0)||!c&&sy(e,n)&&(a=i(d=>!d.ownDrainerVulnerable),a!==void 0))return a;let p=n===0?e.blackScore:e.whiteScore;if(Ae-p<=1)return i(d=>d.classes.immediateScore)}l(ry,"forcedTacticalPrepassChoice");function uy(e,n,o){let r=e.findIndex(c=>ae(c.inputs,n));if(r<0)return!1;if(r===0)return!0;let i=e[0];if(i===void 0||i.winsImmediately)return!1;let a=Lr(e,r),t=L(i.heuristic,a.heuristic);if(o===0)return r<=2&&t<=96&&!A(a);let s=a.winsImmediately||a.attacksOpponentDrainer||a.classes.drainerSafetyRecover||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.spiritDevelopment||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||Ye(a.safeSupermanaProgressSteps,i.safeSupermanaProgressSteps)||Ye(a.safeOpponentManaProgressSteps,i.safeOpponentManaProgressSteps),u=A(a);return!u&&r<=4&&t<=128||!u&&s&&r<=8&&t<=224||!u&&A(i)&&r<=10&&t<=256}l(uy,"acceptTurnEngineCachedStep");function ly(e,n,o){return _s(o)&&uy(e,n,o)&&ae(e[0]?.inputs??[],n)}l(ly,"shouldResumeTurnEngineCachedStep");function Lw(e,n,o){return o.turnEngineMode!==_e.CurrentPro||!o.enableTurnEngineLowBudgetGuard||n.length===0||ao(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===1&&e.turnNumber===2&&e.monsMovesCount<=1}l(Lw,"shouldSkipCurrentProHeadPlanForRootContext");function Hw(e,n,o,r){if(r.turnEngineMode!==_e.CurrentPro||!r.enableTurnEngineLowBudgetGuard||n.length===0||!(ao(e)||Ic(e)))return;let a=o.compiledChunks[0];if(a===void 0)return;let t=n.findIndex(m=>ae(m.inputs,a));if(t<0)return;let s=Lr(n,t);if(A(s))return;let u=n[0];if(u===void 0||u.winsImmediately||u.attacksOpponentDrainer||u.classes.drainerSafetyRecover)return;let c=L(u.heuristic,s.heuristic),p=o.headFamily===3||o.headFamily===4||o.headFamily===5,d=G(u),f=Dc(s);if(t===0&&p)return Be(s.inputs);if(ao(e)&&d&&!A(u)&&f&&t<=2&&c<=96)return Be(s.inputs);if(Ic(e)&&t<=1&&c<=96&&(f||s.spiritDevelopment))return Be(s.inputs)}l(Hw,"forcedLowBudgetTurnEnginePrepassChoice");function cy(e){let n=l(o=>o.winsImmediately||o.attacksOpponentDrainer||o.sameTurnScoreWindowValue>=2||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.supermanaProgress||o.opponentManaProgress||o.spiritSameTurnScoreSetupNow||o.spiritDevelopment||o.classes.drainerSafetyRecover,"tactical");return e[0]!==void 0&&(n(e[0])||e.slice(0,3).some(n))}l(cy,"shouldInvokeTurnHeadRerank");function py(e,n){let o=e.findIndex(h=>ae(h.inputs,n)),r=e[0];if(o<0||r===void 0)return!1;let i=A(r);if(o===0)return(r.winsImmediately||r.attacksOpponentDrainer||r.scoresSupermanaThisTurn||r.scoresOpponentManaThisTurn||r.safeSupermanaPickupNow||r.safeOpponentManaPickupNow||r.supermanaProgress||r.opponentManaProgress||r.sameTurnScoreWindowValue>0||r.spiritSameTurnScoreSetupNow||r.spiritDevelopment||r.classes.drainerSafetyRecover)&&!i;let a=Lr(e,o);if(a.winsImmediately)return!0;if(r.winsImmediately||A(a))return!1;let t=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=L(r.heuristic,a.heuristic),c=a.attacksOpponentDrainer&&!r.attacksOpponentDrainer||(a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn)&&!(r.scoresSupermanaThisTurn||r.scoresOpponentManaThisTurn)||(a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow)&&!(r.safeSupermanaPickupNow||r.safeOpponentManaPickupNow)||a.classes.drainerSafetyRecover&&!r.classes.drainerSafetyRecover&&r.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.sameTurnScoreWindowValue>R(r.sameTurnScoreWindowValue,1),p=a.safeSupermanaProgressSteps<r.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<r.safeOpponentManaProgressSteps,d=!a.ownDrainerVulnerable&&r.ownDrainerVulnerable||!a.manaHandoffToOpponent&&r.manaHandoffToOpponent,f=a.supermanaProgress||a.opponentManaProgress||p;if(f&&!t&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(d||i)&&o<=4&&u<=180;let S=d&&p&&o<=5&&u<=220;return t||s||a.classes.drainerSafetyRecover||f?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(c||p&&(d||i)||a.classes.drainerSafetyRecover&&r.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>r.sameTurnScoreWindowValue)&&o<=6&&u<=520||c&&o<=8&&u<=640:S}l(py,"classifyTurnEngineRerankOverride");function dy(e,n){let o=e.find(r=>ae(r.inputs,n));return o!==void 0&&(o.winsImmediately||o.attacksOpponentDrainer||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.classes.drainerSafetyRecover||o.sameTurnScoreWindowValue>0||o.spiritSameTurnScoreSetupNow)}l(dy,"allowedRerankOverrideCandidate");function Xa(e,n,o,r,i){return jS(e,n,o,r,i,{buildInjectedRootCandidate:l((a,t,s,u)=>xm(a,t,o,u),"buildInjectedRootCandidate")})}l(Xa,"shippingRootAdvisorPresearch");function fy(e,n,o,r,i,a){let s=Xa(e,n,o,[...r],i)?.approvedRoot?.inputs;return s!==void 0&&!ae(s,a)}l(fy,"advisorConflictsWithChoice");function Uw(e,n,o,r,i){if(!_s(r)||i.compiledChunks.length<2)return;let a=i.compiledChunks[0],t=i.compiledChunks[1];if(a===void 0||t===void 0)return;let s=Ar(e,a);if(s?.activeColor!==n)return;let u=$a(s,o),c=Wo(s,n,o);ly(c,t,r)&&Ef(s,r,u,t)}l(Uw,"seedTurnEngineFollowupCacheIfSafe");function qa(e,n,o,r,i,a){If(e,n,r,i,a),Uw(e,n,o,r,i)}l(qa,"commitPlanAndSeedFollowup");function jw(e,n,o,r){return r.turnEngineMode===_e.CurrentPro&&e.activeColor===1&&e.turnNumber<=4&&G(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&Sr(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(jw,"isCurrentProBlackPlainSpiritFollowupSetupPair");function ty(e,n,o,r){return le.turnEngineRootUtility(e,n,o,Fa(r),E(n))}l(ty,"turnEngineSelectedUtility");function Kw(e,n,o,r){let i=e.cloneForSimulation(),a=[];for(let p of r.compiledChunks){let d=Je(i,p);if(d===void 0)return!1;a.push(...d.events),i=d.game}let s=i.winnerColor()!==void 0||i.activeColor!==n||!i.playerCanMoveMon()&&!i.playerCanUseAction()&&!i.playerCanMoveMana()||r.compiledChunks.length>=4||!i.playerCanMoveMon()||!i.playerCanUseAction()&&!i.playerCanMoveMana(),u=Aa(a,n,Math.max(o.rootManaHandoffPenalty,1))>0,c=i.winnerColor()!==n&&sy(i,n);return s&&!u&&!Br(a)&&!c}l(Kw,"projectedPlanIsSafelyCompleted");function qw(e){let{game:n,plan:o,candidate:r,macroMode:i,selectedProgress:a,candidateFamily:t,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:c,blackTurnSixRouteChangePlainSpirit:p,whiteSpiritSetupGain:d}=e;if(!i)return!0;let f=u(),m=c();if(n.activeColor===1&&n.turnNumber<=6&&(o.headFamily===3||o.headFamily===4)&&o.goalFamily===0&&t===7&&s===6&&Fs(r)&&a&&oe(o.headUtility,f)<0)return!1;let h=oe(o.utility,f)>0&&(o.utility.strictlyDominatesOverrideAxes(f)||o.headUtility.strictlyDominatesOverrideAxes(f)),y=oe(m,f)>0&&m.strictlyDominatesOverrideAxes(f);return p||d||h||y}l(qw,"passesTurnEngineMacroDominanceGuard");function zw(e,n,o,r,i,a){let t=a.compiledChunks[0];if(t===void 0)return!1;let s=r.findIndex(ze=>ae(ze.inputs,t)),u=r.findIndex(ze=>ae(ze.inputs,i));if(s<0||u<0)return!1;if(s===u)return!0;let c=Lr(r,s),p=Lr(r,u);if(p.winsImmediately&&!c.winsImmediately)return!1;let d=_s(za(o)),f=A(c),m=A(p),S=Dc(c),h=Dc(p),y=qe(e,e.activeColor),M=L(p.score,c.score),C=c.sameTurnScoreWindowValue>p.sameTurnScoreWindowValue,k=c.attacksOpponentDrainer&&!p.attacksOpponentDrainer,b=(c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn)&&!(p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn),w=c.classes.drainerSafetyRecover&&!p.classes.drainerSafetyRecover&&p.ownDrainerVulnerable&&!c.ownDrainerVulnerable,P=c.spiritSameTurnScoreSetupNow&&!p.spiritSameTurnScoreSetupNow&&c.sameTurnScoreWindowValue>=p.sameTurnScoreWindowValue,O=c.spiritDevelopment&&!p.spiritDevelopment,I=c.spiritSameTurnScoreSetupNow||c.sameTurnScoreWindowValue>0||c.attacksOpponentDrainer||c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow,D=(Ye(c.safeSupermanaProgressSteps,p.safeSupermanaProgressSteps)||Ye(c.safeOpponentManaProgressSteps,p.safeOpponentManaProgressSteps))&&!p.winsImmediately&&!p.attacksOpponentDrainer&&!p.spiritSameTurnScoreSetupNow,x=p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow,W=E(c),_=E(p),v=null,j=l(()=>(v??(v=ty(e,p,n,o)),v),"selectedUtilityValue"),de=null,he=l(()=>(de??(de=ty(e,c,n,o)),de),"candidateUtilityValue"),$e=d&&a.headFamily===6&&jw(e,c,p,o)&&c.score>p.score,ie=d&&e.activeColor===0&&a.headFamily===6&&!m&&!f&&c.spiritOwnManaSetupNow&&!c.spiritSameTurnScoreSetupNow&&!p.spiritOwnManaSetupNow&&!p.spiritSameTurnScoreSetupNow&&p.spiritDevelopment&&c.spiritDevelopment&&c.spiritSetupGain>=R(p.spiritSetupGain,32)&&c.safeSupermanaProgressSteps<=p.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps<=p.safeOpponentManaProgressSteps&&c.ownDrainerVulnerable===p.ownDrainerVulnerable&&c.manaHandoffToOpponent===p.manaHandoffToOpponent&&c.hasRoundtrip===p.hasRoundtrip&&!b&&!k&&M<=96,Qe=d&&e.activeColor===1&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&a.headFamily===6&&a.goalFamily===6&&s<=1&&f===m&&G(c)&&!S&&!I&&_===7&&m&&!p.spiritDevelopment&&!p.spiritSameTurnScoreSetupNow&&!p.spiritOwnManaSetupNow&&!h&&!Q(p)&&p.sameTurnScoreWindowValue===0&&!Sr(c.inputs,p.inputs)&&c.ownDrainerVulnerable===p.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===p.ownDrainerWalkVulnerable&&c.manaHandoffToOpponent===p.manaHandoffToOpponent&&c.hasRoundtrip===p.hasRoundtrip&&M<=1024&&he().supportsPrimaryAxesEvalTolerance(j(),64),ve={game:e,perspective:n,config:o,plan:a,candidateIndex:s,candidate:c,selected:p,macroMode:d,candidateUnsafe:f,selectedUnsafe:m,candidateProgress:S,selectedProgress:h,exactContext:y,scoreGap:M,sameTurnWindowBetter:C,drainerAttackBetter:k,scoresNowBetter:b,safetyRecoverBetter:w,spiritWindowBetter:P,spiritDevelopmentBetter:O,candidateSpiritTactical:I,progressBetter:D,selectedSpiritPhase:x,candidateFamily:W,selectedFamily:_,selectedUtilityValue:j,candidateUtilityValue:he,blackSpiritPair:$e,whiteSpiritSetupGain:ie,blackTurnSixRouteChangePlainSpirit:Qe};return qw(ve)?$w(ve):!1}l(zw,"acceptTurnEngineHeadAfterSearch");function $w(e){let{game:n,perspective:o,config:r,plan:i,candidateIndex:a,candidate:t,selected:s,macroMode:u,candidateUnsafe:c,selectedUnsafe:p,candidateProgress:d,selectedProgress:f,exactContext:m,scoreGap:S,sameTurnWindowBetter:h,drainerAttackBetter:y,scoresNowBetter:M,candidateSpiritTactical:C,progressBetter:k,selectedSpiritPhase:b,candidateFamily:w,selectedFamily:P,selectedUtilityValue:O,whiteSpiritSetupGain:I}=e,D=u&&i.headFamily===0&&n.activeColor===1&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&c&&!p&&!t.winsImmediately&&!M&&!y&&t.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue,x=u&&n.activeColor===0&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===6&&P===7&&!p&&!c&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!Q(t)&&t.sameTurnScoreWindowValue===0,W=u&&n.activeColor===1&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===6&&P===7&&!b&&G(t)&&!d&&!C&&Sr(t.inputs,s.inputs)&&c===p&&t.safeSupermanaProgressSteps>=s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!M&&!y&&!h&&S>96,_=u&&n.activeColor===0&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===6&&P===7&&!p&&!c&&!b&&G(t)&&d&&!C&&Sr(t.inputs,s.inputs)&&t.safeSupermanaProgressSteps>=s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&t.score<=s.score&&!M&&!y&&!h,v=u&&n.activeColor===0&&n.turnNumber>=5&&n.monsMovesCount>=1&&i.headFamily===6&&P===7&&!b&&G(t)&&!d&&!C&&t.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&t.score<=s.score&&!M&&!y&&!h,j=u&&n.activeColor===1&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(w===3||w===4)&&P===7&&!b&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&s.sameTurnScoreWindowValue===0&&!Q(t)&&!Q(s)&&t.ownDrainerVulnerable&&!s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!M&&!y&&!h,de=u&&n.activeColor===1&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&w===7&&P===7&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!Q(t)&&!Q(s)&&!M&&!y,he=u&&n.activeColor===1&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&w===7&&P===7&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable&&!s.ownDrainerVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!Q(t)&&!Q(s)&&!M&&!y,$e=u&&n.activeColor===1&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&w===7&&P===7&&Sr(t.inputs,s.inputs)&&t.sameTurnScoreWindowValue>0&&s.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!s.ownDrainerVulnerable&&!Q(t)&&!Q(s)&&L(t.score,s.score)<=32&&!M&&!y;if(x||W||_||v||j||de||he||$e)return!1;let ie=Nc(t,s),Qe=u&&n.activeColor===1&&n.turnNumber<=4&&w===7&&(P===7||P===3||P===4)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!ie&&S>0&&(le.rootProgressOrSetupBetter(s,t)||f&&!d),ve=u&&n.activeColor===1&&n.turnNumber<=4&&(i.headFamily===3||i.headFamily===4)&&w===7&&P===7&&t.sameTurnScoreWindowValue>0&&s.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!M&&!y&&!ie&&s.ownDrainerVulnerable===t.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===t.manaHandoffToOpponent&&s.hasRoundtrip===t.hasRoundtrip&&le.rootProgressOrSetupBetter(s,t)&&S>=-192&&!i.utility.improvesNonScoreOverrideAxes(O());if(Qe||ve)return!1;let ze=t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.efficiency===s.efficiency&&t.supermanaProgress===s.supermanaProgress&&t.opponentManaProgress===s.opponentManaProgress,vn=oe(i.utility,O()),bn=i.utility.improvesNonScoreOverrideAxes(O()),te=O(),Ko=u&&n.activeColor===1&&n.turnNumber<=4&&n.monsMovesCount>=1&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===7&&i.goalFamily===6&&w===7&&P===7&&!c&&!p&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&!d&&!f&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&s.score>R(t.score,128)&&!M&&!y&&!h&&!ie,To=u&&n.activeColor===1&&n.turnNumber<=6&&n.monsMovesCount>=1&&n.playerCanMoveMana()&&(i.headFamily===7||i.headFamily===3||i.headFamily===4)&&w===7&&P===7&&c===p&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue===0&&s.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&s.score>R(t.score,48)&&s.safeSupermanaProgressSteps<=R(t.safeSupermanaProgressSteps,1)&&s.safeOpponentManaProgressSteps<=R(t.safeOpponentManaProgressSteps,1)&&!M&&!y&&!h&&!ie,Hr=u&&n.activeColor===0&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanMoveMana()&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===0&&w===7&&P===7&&c===p&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&!d&&!f&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&Sr(t.inputs,s.inputs)&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&s.score>t.score&&!M&&!y&&!h&&!ie,Rt=u&&n.activeColor===0&&n.turnNumber===5&&n.monsMovesCount>=1&&n.playerCanMoveMana()&&(i.headFamily===0||i.headFamily===3||i.headFamily===4)&&i.goalFamily===0&&w===7&&P===7&&c===p&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&!d&&!f&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&s.scorePathBestSteps>=t.scorePathBestSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&s.score>t.score&&!M&&!y&&!h&&!ie,Pt=u&&n.activeColor===0&&n.turnNumber===5&&n.monsMovesCount>=1&&n.playerCanUseAction()&&n.playerCanMoveMana()&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===0&&w===7&&P===6&&c===p&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&s.spiritDevelopment&&s.spiritSameTurnScoreSetupNow&&s.spiritOwnManaSetupNow&&s.spiritSetupGain>=R(t.spiritSetupGain,64)&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&!d&&!f&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&s.scorePathBestSteps>t.scorePathBestSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&t.score<=R(s.score,64)&&!M&&!y&&!h&&!ie,Hs=u&&n.activeColor===0&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===0&&Fs(t)&&P===6&&c&&!p&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&s.spiritDevelopment&&s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.spiritSetupGain>=R(t.spiritSetupGain,96)&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&!d&&!f&&t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&s.scorePathBestSteps>t.scorePathBestSteps&&t.ownDrainerVulnerable&&!s.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!M&&!y&&!h&&!ie,Us=u&&n.activeColor===0&&n.turnNumber===5&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===5&&w===7&&P===7&&!c&&!p&&!d&&!f&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue===0&&s.sameTurnScoreWindowValue===0&&t.safeSupermanaProgressSteps<=s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps<=s.safeOpponentManaProgressSteps&&t.scorePathBestSteps===s.scorePathBestSteps&&t.spiritSetupGain<=R(s.spiritSetupGain,16)&&!t.ownDrainerVulnerable&&!s.ownDrainerVulnerable&&!t.ownDrainerWalkVulnerable&&!s.ownDrainerWalkVulnerable&&!t.manaHandoffToOpponent&&!s.manaHandoffToOpponent&&!t.hasRoundtrip&&!s.hasRoundtrip&&t.rootRank>=R(s.rootRank,8)&&L(t.score,s.score)<=128&&!M&&!y&&!h&&!ie&&!i.headUtility.supportsPrimaryAxesEvalTolerance(te,192),js=u&&n.activeColor===1&&n.turnNumber===6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&i.headFamily===7&&i.goalFamily===0&&w===7&&(P===3||P===4)&&!c&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue===0&&s.sameTurnScoreWindowValue===0&&!d&&f&&s.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps&&s.scorePathBestSteps===t.scorePathBestSteps&&s.ownDrainerVulnerable&&!t.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===t.manaHandoffToOpponent&&s.hasRoundtrip===t.hasRoundtrip&&!M&&!y&&!h&&!ie,Ks=u&&n.activeColor===1&&n.turnNumber===4&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&m.delta.drainerSafety<0&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&i.headFamily===0&&i.goalFamily===0&&Fs(t)&&P===5&&s.classes.drainerSafetyRecover&&!p&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!Q(s)&&!s.attacksOpponentDrainer&&!b&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&Sr(t.inputs,s.inputs)&&t.ownDrainerVulnerable&&!t.classes.drainerSafetyRecover&&s.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&s.scorePathBestSteps>t.scorePathBestSteps&&!M&&!y&&!ie,qs=u&&n.activeColor===0&&n.turnNumber===3&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===0&&Fs(t)&&P===5&&s.classes.drainerSafetyRecover&&!p&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!Q(s)&&!s.attacksOpponentDrainer&&!b&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&Sr(t.inputs,s.inputs)&&t.ownDrainerVulnerable&&!t.classes.drainerSafetyRecover&&s.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&s.scorePathBestSteps>t.scorePathBestSteps&&!M&&!y&&!ie,zs=u&&n.activeColor===0&&n.turnNumber===3&&n.monsMovesCount>=1&&n.playerCanMoveMana()&&(i.headFamily===7||i.headFamily===3||i.headFamily===4)&&i.goalFamily===5&&w===7&&P===7&&c&&!p&&!t.spiritDevelopment&&!s.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!s.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&!Q(t)&&!Q(s)&&t.sameTurnScoreWindowValue===0&&s.sameTurnScoreWindowValue===0&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!M&&!y&&!h&&!ie;if(Ko||To||Hr||Rt||Pt||Hs||Us||zs||js||Ks||qs)return!1;let $s=u&&Kw(n,o,r,i),Xs=oe(i.utility,te)>=0,Ys=oe(i.headUtility,te)>=0,Qs=u&&(i.headFamily===3||i.headFamily===4)&&n.activeColor===0&&n.turnNumber>=5&&n.monsMovesCount<=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&!c&&!p&&d&&f&&!b&&ze&&S>48&&vn===0&&!ie&&!bn,Zs=!p&&(s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow)&&(i.headFamily===3||i.headFamily===4)&&!ie&&!Ys,Za=p&&c&&!b&&!f&&d&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===5&&!t.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!ie&&!M&&!y&&!h&&S>48,Ja=n.activeColor===1&&i.headFamily===6&&!p&&!c&&!f&&!b&&!d&&!C&&!t.spiritOwnManaSetupNow&&S>96&&!bn,ei=n.activeColor===1&&i.headFamily===6&&!p&&!c&&!f&&!b&&G(t)&&d&&!C&&!k&&t.safeSupermanaProgressSteps>=s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!M&&!y&&S>64&&!bn,ni=i.headFamily===6&&!p&&!c&&G(s)&&G(t)&&S>=0&&!k&&t.spiritSetupGain<=s.spiritSetupGain&&t.safeSupermanaProgressSteps>=s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.manaHandoffToOpponent===s.manaHandoffToOpponent&&t.hasRoundtrip===s.hasRoundtrip&&!M&&!y&&!C,hr=$s&&!s.winsImmediately&&i.goalFamily!==7&&a<=(i.compiledChunks.length>1?16:10)&&Xs&&(i.utility.passesOverrideGuard(te)||i.utility.supportsPrimaryAxesEvalTolerance(te,96))&&(c||i.compiledChunks.length>1||i.utility.improvesNonScoreOverrideAxes(te))&&!Ja&&!ei&&!ni&&!Zs&&!Za&&!D&&!Qs;if(c&&!p&&!hr||u&&oe(te,i.utility)>0&&!I)return!1;let oi=u&&(i.headFamily===3||i.headFamily===4)&&!d&&ao(n)&&G(s)&&!p&&(!c||hr)&&a<=3&&t.score>=s.score&&i.utility.supportsPrimaryAxesEvalTolerance(te,64);if(I)return!0;if(u&&(i.headFamily===3||i.headFamily===4)&&!d&&!hr&&!oi||u&&i.headFamily===2&&!t.attacksOpponentDrainer)return!1;let be=u&&n.activeColor===0&&i.headFamily===5&&s.spiritOwnManaSetupNow&&!t.spiritOwnManaSetupNow&&!p&&!c&&s.sameTurnScoreWindowValue===0&&t.sameTurnScoreWindowValue===0&&s.spiritSetupGain>=R(t.spiritSetupGain,48)&&!M&&!y&&!h;if(u&&n.activeColor===0&&(i.headFamily===3||i.headFamily===4)&&i.goalFamily===0&&P===7&&!f&&d&&s.ownDrainerVulnerable&&t.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===t.manaHandoffToOpponent&&s.hasRoundtrip===t.hasRoundtrip&&!s.spiritDevelopment&&!t.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!t.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!t.spiritOwnManaSetupNow&&!M&&!y&&!h&&!ie&&!t.classes.drainerSafetyRecover&&R(t.safeSupermanaProgressSteps,1)>=s.safeSupermanaProgressSteps&&R(t.safeOpponentManaProgressSteps,1)>=s.safeOpponentManaProgressSteps&&t.score<=R(s.score,16)&&!bn)return!1;let gy=i.headFamily===0||i.headFamily===1||i.headFamily===2||i.headFamily===5&&iy(r);return u&&!s.winsImmediately&&gy&&i.utility.passesOverrideGuard(te)&&!be&&(!c||p)?!0:i.headFamily===6&&!C&&!t.spiritDevelopment&&!t.spiritOwnManaSetupNow&&!hr?!1:hr?!0:Xw(e,{selectedUtility:te,pickupUpgrade:ie,strategicAxesBetter:bn,projectedDeferredRecoveryWithoutConcreteGain:Za,safeRootBlocksPlainSpirit:Ja,safeRootBlocksPlainSpiritProgress:ei,plainSpiritSiblingRegresses:ni,allowNonConcreteWhiteProgress:oi,whiteSetupRecoveryBlocksUtilityOverride:be})}l($w,"acceptTurnEngineHeadAfterOrderedGuards");function Xw(e,n){let{game:o,config:r,plan:i,candidateIndex:a,candidate:t,selected:s,candidateUnsafe:u,selectedUnsafe:c,candidateProgress:p,selectedProgress:d,scoreGap:f,sameTurnWindowBetter:m,drainerAttackBetter:S,scoresNowBetter:h,safetyRecoverBetter:y,spiritWindowBetter:M,spiritDevelopmentBetter:C,progressBetter:k,selectedSpiritPhase:b,selectedFamily:w,blackSpiritPair:P,blackTurnSixRouteChangePlainSpirit:O}=e,{selectedUtility:I,pickupUpgrade:D,strategicAxesBetter:x,projectedDeferredRecoveryWithoutConcreteGain:W,safeRootBlocksPlainSpirit:_,safeRootBlocksPlainSpiritProgress:v,plainSpiritSiblingRegresses:j,allowNonConcreteWhiteProgress:de,whiteSetupRecoveryBlocksUtilityOverride:he}=n;switch(za(r)){case 0:switch(i.headFamily){case 0:return(t.winsImmediately||h||m)&&f<=280;case 1:return m||y||S;case 2:return S&&f<=180;case 5:return y&&Wn(i.utility,I)>=0&&f<=140;case 6:return a<=(i.compiledChunks.length>1?12:6)&&f<=120&&(M||C||b&&Wn(i.utility,I)>=0);case 3:case 4:return!b&&a<=(i.compiledChunks.length>1?3:1)&&f<=80&&(k||Wn(i.utility,I)>=0||t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.efficiency===s.efficiency&&t.supermanaProgress===s.supermanaProgress&&t.opponentManaProgress===s.opponentManaProgress&&f<=32);case 7:return!1;default:return!1}case 1:switch(i.headFamily){case 0:return(t.winsImmediately||h||m||a<=16&&i.utility.passesOverrideGuard(I)&&(!u||c))&&f<=360;case 1:return m||y||S||a<=16&&f<=220&&!u&&i.utility.passesOverrideGuard(I);case 2:return t.attacksOpponentDrainer&&a<=16&&f<=260&&(S||Wn(i.utility,I)>=0);case 5:return t.classes.drainerSafetyRecover&&a<=16&&f<=240&&(y||s.ownDrainerVulnerable&&!t.ownDrainerVulnerable||iy(r)&&i.utility.supportsFamilyFallback(I)&&(c||!u)&&!he);case 6:{let $e=i.utility.supportsFamilyFallback(I),ie=i.utility.passesOverrideGuard(I);if(_||v||j||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!P&&!c&&!u&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&t.spiritSetupGain<=s.spiritSetupGain&&!h&&!S)return!1;let ve=O||f<=220&&(M||C||t.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&$e||ie||b&&$e);return a<=(i.compiledChunks.length>1?16:10)&&ve}case 3:case 4:{let $e=oe(i.utility,I),ie=(p||c)&&i.utility.supportsFamilyFallback(I),Qe=!c&&!b&&!d,ve=!c&&d,ze=w===3||w===4,vn=x||i.utility.hasScoreDeltaForce(I,220);if(c&&u&&!b&&!d&&p&&f>0&&!D&&!y&&!h&&!S&&!m&&!vn||W)return!1;let bn=de||ao(o)&&G(s)&&!c&&!u&&p&&a<=2&&f<=96&&($e>0||$e>=0&&i.utility.supportsPrimaryAxesEvalTolerance(I,64)),te=!b||c||bn,Ko=f>48&&!c&&!u,To=!ve&&!Qe||!Ko||x||D,Hr=!u&&ie&&(c||!b&&!d)&&(!Qe||f<=32||x||D),Rt=ie&&i.utility.strictlyDominatesOverrideAxes(I)&&(!Qe||x),Pt=t.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===s.ownDrainerVulnerable&&t.efficiency===s.efficiency&&t.supermanaProgress===s.supermanaProgress&&t.opponentManaProgress===s.opponentManaProgress;return a<=(i.compiledChunks.length>1?12:6)&&f<=220&&(te&&k&&To||bn||D||Rt&&(!Ko||x||Nc(t,s))&&(!ve||x||Nc(t,s)||k&&!b)||Hr||te&&Pt&&f<=(ze?32:64)&&To)}case 7:return!1}}}l(Xw,"acceptTurnEngineHeadByModeAndFamily");function Bc(e,n,o){let r=o.length===0?{}:{priorityInputs:o};if(!Qa(n))return r;let i=xc(n),a=Ya(n);return{...r,qualifiesPlainSpiritPlan:l(t=>{let s=ro(t.game,e,i);return s?.headFamily===6&&s.utility.hasNonnegativeDenyGain()},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:l(t=>ro(t.game,e,a)?.headFamily===5,"qualifiesDrainerSafetyRecoveryPlan")}}l(Bc,"searchRootOptions");function Yw(e){return{...e,inputs:Be(e.inputs),game:e.game.cloneForSimulation(),classes:{...e.classes}}}l(Yw,"cloneFlatRootEvaluation");function my(e,n,o=!0){let r=e.fen(),i={...n,useTranspositionTable:o},a=e.activeColor,t=Wo(e,a,i);if(Y()||t.length===0)return[];let s=i.enableTurnEngineSelector?ro(e,a,$a(e,i)):void 0,u=Xa(e,a,i,t,s),c=u===void 0?[]:Ka(u),p=uc(e,a,i,t,Bc(a,i,c));if(e.fen()!==r)throw new Error("runtime root focus mutated its source game");return tc(p.evaluations).map(Yw)}l(my,"focusedScoredRootsForRuntime");function Sy(e,n,o){let r=e.fen(),i=e.activeColor,a=Wo(e,i,n),t=n.enableTurnEngineSelector?ro(e,i,$a(e,n)):void 0,s=Xa(e,i,n,a,t),u=s===void 0?[]:Ka(s),c=sc(e,i,n,a,Bc(i,n,u),!0);if(e.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let p=c.candidates.findIndex(d=>ae(d.inputs,o));return p<0?void 0:p}l(Sy,"focusedCandidateRankForRuntimeInputs");function Wc(e){let n=Fa(e);return{checkpoint:T,cancelled:Y,rootReplyRiskSnapshot:l((o,r,i,a)=>hn(o,r,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:l(o=>La(o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),currentPro:ey(e)}}l(Wc,"rootSelectorOptions");function ay(e,n,o,r,i){let a=uc(e,n,o,r,Bc(n,o,i));if(Y())return{inputs:[],evaluations:[]};let t=tc(a.evaluations);return t.length===0?{inputs:[],evaluations:t}:{inputs:WS(e,t,n,o,Wc(o)),evaluations:t}}l(ay,"searchAndSelectRoot");function Qw(e,n,o,r,i){if(r.length<=1||!o.enableTurnHeadRerank||!cy(r))return;let a=r.map(s=>s.inputs),t=i?.compiledChunks[0];return i!==void 0&&t!==void 0&&a.some(s=>ae(s,t))?i:Nl(e,n,xc(o),a)}l(Qw,"tryTurnHeadRerank");function Zw(e,n,o,r,i,a){let t=i?.compiledChunks[0];if(!(t===void 0||!py(r,t)||!dy(r,t)||fy(e,n,o,r,a,t)))return Be(t)}l(Zw,"acceptedRerankInputs");function yy(e,n,o){if(T())return[];lc(),kc();let r={...n,useTranspositionTable:o},i=e.activeColor,a=$a(e,r),t;if(Ac(r)&&(t=Ss(e,a),t===void 0&&Ww(e)&&(r={...r,enableTurnEngineSelector:!1})),Dw(r)&&Fw(e)&&(t=void 0,r={...r,enableTurnEngineSelector:!1}),Ac(r)&&Ic(e)&&(r={...r,enableTurnEngineSecondaryAnalysis:!1,enableTurnEngineSelectedFollowupProjection:!1}),r=_w(e,r),!r.enableTurnEngineSelector&&r.turnEngineMode===_e.CurrentPro&&xw(e))return yy(e,{...r,turnEngineMode:_e.ProV1},o);let s=Wo(e,i,r);if(Y()||s.length===0)return[];if(r.enableTurnEngineSelector){let d=za(r),f=t??Ss(e,a),m=f!==void 0&&uy(s,f,d)?f:void 0,S=$a(e,r),y=Lw(e,s,r)?void 0:Bw(e,r)?gf(e,i,S):ro(e,i,S);if(T())return[];if(d===1&&m!==void 0){if(ly(s,m,d))return Be(m);if(y?.compiledChunks[0]!==void 0&&ae(y.compiledChunks[0],m))return qa(e,i,r,d,y,S),Be(m)}let M=Qw(e,i,r,s,y),C=Zw(e,i,r,s,M,y);if(C!==void 0&&M!==void 0)return qa(e,i,r,d,M,S),C;let k=ry(e,i,s,r);if(k!==void 0)return y?.compiledChunks[0]!==void 0&&ae(y.compiledChunks[0],k)&&qa(e,i,r,d,y,S),k;if(y!==void 0){let I=Hw(e,s,y,r);if(I!==void 0)return qa(e,i,r,d,y,S),I}let b=Xa(e,i,r,s,y),w=b===void 0?[]:Ka(b),P=ay(e,i,r,s,w);if(P.inputs.length===0)return[];let O=P.inputs;return y!==void 0&&zw(e,i,r,P.evaluations,O,y)&&(O=Be(y.compiledChunks[0]??O)),m!==void 0&&ae(m,O)?Be(O):(y?.compiledChunks[0]!==void 0&&ae(y.compiledChunks[0],O)&&qa(e,i,r,d,y,S),Be(O))}if(s.length>1&&r.enableTurnHeadRerank&&cy(s)){let d=s.map(m=>m.inputs),f=Af(e,i,za(r),xc(r),d);if(f!==void 0&&py(s,f)&&dy(s,f)&&!fy(e,i,r,s,void 0,f))return Be(f)}let u=ry(e,i,s,r);if(u!==void 0)return u;let c=Xa(e,i,r,s,void 0),p=c===void 0?[]:Ka(c);return ay(e,i,r,s,p).inputs}l(yy,"smartSearchBestInputsInternal");function hy(){Ki(),lc(),kc(),ms()}l(hy,"clearShippingSelectorCaches");function by(e,n,o=!0){let r=e.fen(),i=yy(e,n,o);if(e.fen()!==r)throw new Error("smart search mutated its source game");return Be(i)}l(by,"smartSearchBestInputs");var My=8,eR=200,nR=100,oR=550;function rR(e,n){return wn(e,n)||gm(e,n)}l(rR,"defaultOwnDrainerUnsafe");function tR(e,n,o,r){let i=Ya(r),a=Ta(n.game,e,o,i),t=E(n),s={actions:[],compiledChunks:[n.inputs],endGame:n.game.cloneForSimulation(),utility:a,headUtility:a,headFamily:t,goalFamily:t,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ys(e,s,o,i)}l(tR,"evaluateSelectedUtility");var aR=Object.freeze({selector:l((e,n)=>by(e,n,!0),"selector"),clearTimeoutCaches:hy,clearFreshProCache:ms,opportunityContext:qe,ownDrainerUnsafe:rR,rankedRoots:l((e,n,o)=>Wo(e,n,o),"rankedRoots"),focusedRoots:l((e,n)=>my(e,n,!0),"focusedRoots"),focusedCandidateRank:Sy,selectedUtility:tR});function iR(e){if(!Number.isSafeInteger(e)||e<=0||e>4294967296)throw new RangeError("random index requires a non-empty uint32-sized collection");let n=4294967296,o=n-n%e,r=new Uint32Array(1);for(;;){globalThis.crypto.getRandomValues(r);let i=r[0]??0;if(i<o)return i%e}}l(iR,"randomIndex");function ky(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:{i:n.i,j:n.j}}));case"next-input-options":return e.nextInputs.map(n=>on(n.input))}}l(ky,"nextInputsForPrompt");function Cy(e){let n=[];for(;;){if(n.length>My)return{output:{kind:"invalid-input"},inputFen:""};let o=e.processInputWithStartOptions(n,!1,!1,kn);if(o.kind==="invalid-input")return{output:o,inputFen:""};if(o.kind==="events")return{output:o,inputFen:Tr(n)};let r=ky(o);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};let i=r[iR(r.length)];if(i===void 0)return{output:{kind:"invalid-input"},inputFen:""};n.push(i)}}l(Cy,"randomAutomove");function Gs(e){let n=e.cloneForSimulation(),o=[];for(;;){if(o.length>My)return[];let r=n.processInputWithStartOptions(o,!0,!1,kn);if(r.kind==="invalid-input")return[];if(r.kind==="events")return o.length===0?[]:o;let i=ky(r);if(i===void 0||i.length===0)return[];i.sort((t,s)=>Bn([t],[s]));let a=i[0];if(a===void 0)return[];o.push(a)}}l(Gs,"deterministicLegalFallbackInputs");function yr(e,n){return Ul(sm(e,n),n)}l(yr,"executionConfigForGame");function Uo(e,n){return Ul(n,e.preference,e)}l(Uo,"deriveExecutionConfig");function Fc(e,n,o){if(T())return[];let r=Be(o.selector(e,n));if(r.length>0)return r;if(T())return[];let i=Cy(e.cloneForSimulation());return i.output.kind==="events"?ui(i.inputFen):[]}l(Fc,"selectShippingSearchInputsInternal");function jo(e,n,o){return Fc(e,n,o)}l(jo,"selectShippingFallbackInputs");function Ty(e,n,o){return T()?[]:(n.enableTurnEngineSelector&&o.clearFreshProCache(),Fc(e,n,o))}l(Ty,"selectSearchInputsWithFreshProCache");function sR(e,n,o){let r=ju();return Pi(650,()=>{let i=Gs(e);if(r&&o.clearTimeoutCaches(),T())return i;let a=n();return a.length===0||T()?i:a})}l(sR,"selectWithSharedDeadline");function uR(e,n){let o=qp(eR,e);return o===void 0&&n.clearTimeoutCaches(),o}l(uR,"selectProFastBankInputs");function lR(e,n,o){let r=ju();return Pi(oR,()=>{let i=Gs(e);if(r&&o.clearTimeoutCaches(),T())return i;let a=yr(e,"fast"),t=uR(()=>Be(o.selector(e,a)),o)??[],s=t.length>0&&!T()?t:i;if(De(nR))return s;let u=n();return u.length===0||T()?s:u})}l(lR,"selectProWithSharedDeadline");function cR(e,n,o){return sR(e,()=>Fc(e,n,o),o)}l(cR,"selectShippingSearchInputs");function pR(e,n){if(e.activeColor===0&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)||e.activeColor===0&&e.turnNumber===1&&e.monsMovesCount===2&&!e.playerCanUseAction()&&!e.playerCanMoveMana()||e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()||e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount>=3&&e.playerCanUseAction()&&e.playerCanMoveMana())return jo(e,yr(e,"pro"),n);let r=e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount===1&&!e.playerCanUseAction()&&e.playerCanMoveMana();if(!(!(e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount>0&&!r&&(e.playerCanUseAction()||e.playerCanMoveMana()))||!n.ownDrainerUnsafe(e,e.activeColor)))return jo(e,yr(e,"fast"),n)}l(pR,"selectEarlyWhiteFallbackInputs");function dR(e,n,o){if(!(!(e.activeColor===0&&e.turnNumber===3&&(e.monsMovesCount===1||e.monsMovesCount===2)&&e.playerCanUseAction()&&e.playerCanMoveMana())||o.opportunityContext(e,e.activeColor).delta.sameTurnScoreWindowValue<=0))return Ty(e,Uo(n,xr(n)),o)}l(dR,"selectScoreWindowTacticalFallbackInputs");function Vs(e,n){return e.find(o=>ae(o.inputs,n))}l(Vs,"findRoot");function _c(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}l(_c,"whiteDenyFallbackContextEligible");function fR(e,n,o,r){if(!(e.activeColor===0&&e.turnNumber===5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&o.length>0))return;let a=r.opportunityContext(e,e.activeColor);if(!_c(a))return;let t=Uo(n,xr(n)),s=Vs(r.rankedRoots(e,e.activeColor,t),o);if(s===void 0||s.winsImmediately||s.attacksOpponentDrainer||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.supermanaProgress||s.opponentManaProgress||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.sameTurnScoreWindowValue!==1)return;let u=yr(e,"pro"),c=jo(e,u,r);if(c.length===0||ae(c,o))return;let p=Vs(r.rankedRoots(e,e.activeColor,u),c);if(!(p===void 0||!p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||!z(p)||p.winsImmediately||p.attacksOpponentDrainer||p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.manaHandoffToOpponent||p.hasRoundtrip||!p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable||p.sameTurnScoreWindowValue!==0))return c}l(fR,"selectWhiteEarlyEngineDisabledFallbackInputs");function mR(e){return{...e,score:e.heuristic}}l(mR,"rootEvaluationForCandidate");function wy(e,n,o,r){return r.selectedUtility(e,mR(n),e.activeColor,o)}l(wy,"selectedRootUtility");function SR(e,n,o,r){if(!(e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount===1&&!e.playerCanUseAction()&&e.playerCanMoveMana()&&o.length>0))return;let a=r.opportunityContext(e,e.activeColor);if(!_c(a))return;let t=Uo(n,xr(n)),s=Vs(r.rankedRoots(e,e.activeColor,t),o);if(s===void 0||!wy(e,s,t,r).hasNonnegativeDenyGain())return;let u=Uo(t,{...t,enableTurnEngineSelector:!1,enableTurnHeadRerank:!0,turnEngineMode:_e.ProV1}),c=jo(e,u,r);return c.length===0||ae(c,o)?void 0:c}l(SR,"selectWhiteNonnegativeDenyFallbackInputs");function yR(e,n,o,r){if(!(e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount===1&&!e.playerCanUseAction()&&e.playerCanMoveMana()&&o.length>0))return;let a=r.opportunityContext(e,e.activeColor);if(!_c(a))return;let t=Uo(n,xr(n)),s=Vs(r.rankedRoots(e,e.activeColor,t),o);if(s===void 0||wy(e,s,t,r).hasNonnegativeDenyGain())return;let u=yr(e,"pro"),c=Uo(t,{...t,enableTurnEngineSelector:!1,enableTurnHeadRerank:!0,turnEngineSeedCap:u.turnEngineSeedCap,turnEngineBeamWidth:u.turnEngineBeamWidth,turnEnginePerNodeFamilyCap:u.turnEnginePerNodeFamilyCap,turnEngineStepCap:u.turnEngineStepCap}),p=jo(e,c,r);if(!(p.length===0||ae(p,o)))return r.focusedCandidateRank(e,c,p)===0?p:void 0}l(yR,"selectWhiteNegativeDenyFallbackInputs");function Ls(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!e.classes.carrierProgress&&!e.classes.material&&e.classes.quiet&&E(e)===7}l(Ls,"safeQuietManaTempoRoot");function Ry(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===0&&e.delta.spiritGain===0&&e.delta.opponentWindowDenyGain===0&&!e.delta.drainerAttackAvailable&&e.delta.safeSupermanaProgressSteps===void 0&&e.delta.safeOpponentManaProgressSteps===void 0&&e.delta.drainerSafety>=0}l(Ry,"confirmProV1ContextEligible");function Py(e,n,o,r){let i=Uo(n,xr(n)),a=r.focusedRoots(e,i),t=a.findIndex(c=>ae(c.inputs,o));if(t<0)return;let s=Ua(e,a,e.activeColor,i,Wc(i));if(!s.includes(t))return;let u=_a(a,s,Fa(i));if(u.includes(t))return{config:i,roots:a,proIndex:t,candidateIndices:s,shortlist:u}}l(Py,"proRuntimeCompetition");function Oy(e){return Uo(e,{...e,enableTurnEngineSelector:!1,enableTurnHeadRerank:!0,turnEngineMode:_e.ProV1})}l(Oy,"searchOnlyProV1Config");function hR(e,n,o,r){if(!(e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount===2&&!e.playerCanUseAction()&&e.playerCanMoveMana()&&o.length>0)||!Ry(r.opportunityContext(e,e.activeColor)))return;let a=Py(e,n,o,r);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let t=jo(e,Oy(a.config),r);if(t.length===0||ae(t,o))return;let s=a.roots.findIndex(p=>ae(p.inputs,t));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.proIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return u.score===c.score&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&Ls(u)&&Ls(c)?t:void 0}l(hR,"selectWhiteConfirmProV1TiebreakInputs");function bR(e,n,o,r){if(!(e.activeColor===0&&e.turnNumber===3&&e.monsMovesCount>=3&&!e.playerCanUseAction()&&e.playerCanMoveMana()&&o.length>0)||!Ry(r.opportunityContext(e,e.activeColor)))return;let a=Py(e,n,o,r);if(a===void 0)return;let t=jo(e,Oy(a.config),r);if(t.length===0||ae(t,o))return;let s=a.roots.findIndex(p=>ae(p.inputs,t));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.proIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return c.score>=u.score&&c.rootRank<u.rootRank&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&Ls(u)&&Ls(c)?t:void 0}l(bR,"selectWhiteConfirmProV1BetterInputs");function MR(e,n){return e.activeColor===1&&e.turnNumber===2&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()||e.activeColor===1&&e.turnNumber===2&&e.monsMovesCount>0&&!e.playerCanUseAction()&&e.playerCanMoveMana()||e.activeColor===1&&e.turnNumber===4&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()?jo(e,yr(e,"pro"),n):void 0}l(MR,"selectUnconditionalBlackFallbackInputs");function kR(e,n,o){if(n.length===0)return;let r=e.activeColor===1&&e.turnNumber===4&&e.monsMovesCount===2&&e.playerCanUseAction()&&e.playerCanMoveMana(),i=e.activeColor===1&&e.turnNumber>=4&&e.monsMovesCount>=3&&e.playerCanUseAction()&&e.playerCanMoveMana();if(!r&&!i)return;let a=jo(e,yr(e,"pro"),o);if(!(a.length===0||ae(a,n)))return r&&a.length===3&&Tr(a).endsWith(";mb")||i?a:void 0}l(kR,"selectLateBlackFallbackInputs");function CR(e,n,o,r){if(T())return[];let i=pR(e,r);if(i!==void 0)return i;if(T())return[];let a=dR(e,n,r);if(a!==void 0)return a;if(T())return[];let t=MR(e,r);if(t!==void 0)return t;let s=Ty(e,o,r);if(T())return[];let u=[()=>fR(e,n,s,r),()=>SR(e,n,s,r),()=>yR(e,n,s,r),()=>hR(e,n,s,r),()=>bR(e,n,s,r),()=>kR(e,s,r)];for(let c of u){if(T())return[];let p=c();if(p!==void 0)return p}return s}l(CR,"selectProInputsWithRuntime");function TR(e,n,o){let r=Uo(n,xr(n));return lR(e,()=>CR(e,n,r,o),o)}l(TR,"selectProInputs");function wR(e,n){let o=e.fen(),r=aR,i=yr(e,n),a=n==="pro"?TR(e,i,r):cR(e,i,r),t=a.length===0?Gs(e):a,s=Je(e,t),u=t;if(s===void 0&&(u=Gs(e),s=Je(e,u)),e.fen()!==o)throw new Error("smart automove mutated its source game");return s===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:{kind:"events",events:s.events},inputFen:Tr(u)}}l(wR,"smartAutomove");function RR(){return{automove(e){return Cy(e)},smartAutomove(e,n){return wR(e,n)}}}l(RR,"createMonsGameAutomoveDelegate");function Ey(){Up(RR())}l(Ey,"installAutomoveRuntime");function PR(e,n,o,r){let i=Ze(e),a=Ze(n),t=Ze(o),s=Ze(r),u=t.split("-"),c=s.split("-"),p=ln.fromFen(i,!1),d=ln.fromFen(a,!1);if(p===void 0||d===void 0)return p===void 0&&d===void 0?"x":p===void 0?"b":"w";if(p.variant()!==d.variant())return"x";let f=p.fen(),m=d.fen();if(p.winnerColor()===void 0&&d.winnerColor()===void 0)return"";let S=new ln(!1,p.variant()),h;return wi(S,u,c,(y,{whiteMovesProcessed:M,blackMovesProcessed:C})=>{let k=y.winnerColor();if(k===void 0)return!0;let b=k===0?M===u.length:C===c.length,w=k===0?f:m;return h=b&&w===y.fen()?Nt(k):"x",!1}),h!==void 0?h:"x"}l(PR,"winner");Ey();export{Ot as AvailableMoveKind,Xe as Color,$n as Consumable,bi as EventModel,Tu as EventModelKind,ii as GameVariant,Kt as ItemModel,ku as ItemModelKind,Ht as Location,Cu as ManaKind,jt as ManaModel,br as Modifier,Ut as Mon,Sn as MonKind,Ri as MonsGameModel,jr as NextInputKind,hi as NextInputModel,ki as OutputModel,bu as OutputModelKind,Mi as SquareModel,Mu as SquareModelKind,Ci as VerboseTrackingEntityModel,PR as winner};
|