@betorigami/game-calculations 4.0.5 → 4.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- var Zt=Object.create;var{getPrototypeOf:Dt,defineProperty:J,getOwnPropertyNames:wr,getOwnPropertyDescriptor:Tt}=Object,yr=Object.prototype.hasOwnProperty;var z=(r,t,E)=>{E=r!=null?Zt(Dt(r)):{};let A=t||!r||!r.__esModule?J(E,"default",{value:r,enumerable:!0}):E;for(let o of wr(r))if(!yr.call(A,o))J(A,o,{get:()=>r[o],enumerable:!0});return A},_r=new WeakMap,Gt=(r)=>{var t=_r.get(r),E;if(t)return t;if(t=J({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")wr(r).map((A)=>!yr.call(t,A)&&J(t,A,{get:()=>r[A],enumerable:!(E=Tt(r,A))||E.enumerable}));return _r.set(r,t),t};var St=(r,t)=>{for(var E in t)J(r,E,{get:t[E],enumerable:!0,configurable:!0,set:(A)=>t[E]=()=>A})};var gt={};St(gt,{validateRouletteGameInputs:()=>Lt,validateAdvancedDiceInputs:()=>Mt,rtp99Multipliers:()=>Vr,rtp98Multipliers:()=>dr,rtp97Multipliers:()=>Rr,rtp96Multipliers:()=>Wr,rtp92Multipliers:()=>mr,plinkoMultipliers:()=>tr,kenoMultipliers:()=>s,isTileCount:()=>l,diamondsMultipliers:()=>Hr,calculateRouletteBetAmount:()=>mt,calculateBaccaratBetAmount:()=>qr,WheelSegments:()=>j,WheelRiskLevel:()=>$,Wheel:()=>xt,VALID_SUITS:()=>Yr,VALID_RANKS:()=>zr,VALID_EUROPEAN_STREETS:()=>Or,VALID_EUROPEAN_STRAIGHTS:()=>L,VALID_EUROPEAN_SPLITS:()=>Ar,VALID_EUROPEAN_DOUBLE_STREETS:()=>Zr,VALID_EUROPEAN_CORNERS:()=>cr,VALID_AMERICAN_STREETS:()=>fr,VALID_AMERICAN_STRAIGHTS:()=>Er,VALID_AMERICAN_SPLITS:()=>or,VALID_AMERICAN_DOUBLE_STREETS:()=>Dr,VALID_AMERICAN_CORNERS:()=>xr,TOP_COLUMN:()=>sr,TILE_COUNTS:()=>ir,RouletteType:()=>u,Roulette:()=>Nr,RollType:()=>Ur,RED_NUMBERS:()=>tt,RANDOM_MIN_VALUE:()=>R,RANDOM_MAX_VALUE:()=>W,PlinkoRiskLevel:()=>rr,Plinko:()=>kr,Parity:()=>p,PLINKO_ROW_COUNTS:()=>jt,PAYOUT_MULTIPLIERS:()=>lr,OrigamiGame:()=>N,Mines:()=>ar,MIN_WIN_CHANCE:()=>Mr,MIDDLE_COLUMN:()=>er,MAX_WIN_CHANCE:()=>pr,Limbo:()=>nr,KenoRiskLevel:()=>k,Keno:()=>ur,Half:()=>F,GameErrorCode:()=>Cr,GameError:()=>f,Game:()=>D,EuropeanRoulette:()=>Gr,EUROPEAN_HOUSE_EDGE:()=>At,EFFECTIVE_RANGE:()=>g,Dozen:()=>Y,DiceDirection:()=>hr,Dice:()=>br,DiamondsResultType:()=>Xr,Diamonds:()=>Ir,Column:()=>P,Color:()=>U,BaccaratOutcome:()=>$r,BaccaratBetType:()=>jr,Baccarat:()=>Jr,BOTTOM_COLUMN:()=>rt,BLACK_NUMBERS:()=>Et,AmericanRoulette:()=>Sr,AdvancedDice:()=>Pr,AMERICAN_HOUSE_EDGE:()=>ot,AMERICAN_BASKET:()=>Br});module.exports=Gt(gt);var N;((x)=>{x.DICE="DICE";x.MINES="MINES";x.KENO="KENO";x.LIMBO="LIMBO";x.ADVANCED_DICE="ADVANCED_DICE";x.BACCARAT="BACCARAT";x.DIAMONDS="DIAMONDS";x.PLINKO="PLINKO";x.ROULETTE="ROULETTE";x.WHEEL="WHEEL"})(N||={});class D{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}var d=require("big.js");var Cr;((t)=>t.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Cr||={});class f extends Error{static createValidationError(r){return new f("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof f}errorCode;constructor(r,t){super(t);this.errorCode=r}}var R=0,W=1e4,g=10001,Mr=0.01,pr=98,Nt=(r)=>{if(r<R)throw f.createValidationError(`Lower bound ${r} is below minimum allowed value ${R}`)},_t=(r)=>{if(r>W)throw f.createValidationError(`Upper bound ${r} is above maximum allowed value ${W}`)},V=(r)=>{if(Nt(r.lower),_t(r.upper),r.lower>=r.upper)throw f.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},wt=(r,t)=>{let[E,A]=r.lower<=t.lower?[r,t]:[t,r];if(E.upper>A.lower)throw f.createValidationError("Bounds must not overlap")},yt=(r,t)=>t>=r.lower&&t<=r.upper,Ct=(r)=>r.upper-r.lower+1,n=(r,t)=>t>r.lower&&t<r.upper,a=(r)=>r.upper-r.lower-1,Ur;((A)=>{A.ROLL_BETWEEN="ROLL_BETWEEN";A.ROLL_OUTSIDE="ROLL_OUTSIDE";A.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Ur||={});var Fr=(r)=>{let E=(()=>{switch(r.mode){case"ROLL_BETWEEN":return V(r.bounds),a(r.bounds);case"ROLL_OUTSIDE":return V(r.bounds),g-Ct(r.bounds);case"ROLL_BETWEEN_TWO":return V(r.firstBounds),V(r.secondBounds),wt(r.firstBounds,r.secondBounds),a(r.firstBounds)+a(r.secondBounds)}})(),A=d.Big(E).div(g).mul(100);if(A.lt(Mr))throw f.createValidationError("Win chance too low");if(A.gt(pr))throw f.createValidationError("Win chance too high");return A},Mt=(r)=>{Fr(r)};class Pr extends D{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=Fr(E),o=r.getRandomInt({min:R,max:W}),O=o.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(E.mode){case"ROLL_BETWEEN":return n(E.bounds,O);case"ROLL_OUTSIDE":return!yt(E.bounds,O);case"ROLL_BETWEEN_TWO":return n(E.firstBounds,O)||n(E.secondBounds,O)}})()?new d.Big(100-t).div(A):new d.Big(0),outputs:{result:o.values},randomValues:o}}}var C=z(require("big.js"));var Yr=["Clubs","Diamonds","Hearts","Spades"],zr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],$r;((A)=>{A.PLAYER_WIN="PLAYER_WIN";A.TIE="TIE";A.BANKER_WIN="BANKER_WIN"})($r||={});var jr;((A)=>{A.PLAYER="PLAYER";A.TIE="TIE";A.BANKER="BANKER"})(jr||={});var pt={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:9},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},qr=(r)=>{return new C.default(0).add(r.bets.reduce((E,A)=>E.add(A.amount),new C.default(0)))};class Jr extends D{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(E!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(t);let A=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),o=A.values,O=o.slice(0,3),c=o.slice(3,6),Z=[],B=0;for(let S of O.slice(0,2)){let _=this.mapRandomValueToCard(S),i=this.mapRandomValueToCardValue(S);Z.push(_),B=(B+i)%10}let T=[],x=0;for(let S of c.slice(0,2)){let _=this.mapRandomValueToCard(S),i=this.mapRandomValueToCardValue(S);T.push(_),x=(x+i)%10}if(!this.isNaturalWin(B,x)){let S=this.shouldDrawThirdPlayerCard(B),_=null;if(S)_=this.mapRandomValueToCardValue(O[2]),Z.push(this.mapRandomValueToCard(O[2])),B=(B+_)%10;if(this.shouldDrawThirdBankerCard(x,_))T.push(this.mapRandomValueToCard(c[2])),x=(x+this.mapRandomValueToCardValue(c[2]))%10}let G;if(B===x)G="TIE";else G=B>x?"PLAYER_WIN":"BANKER_WIN";let w=qr(t),{betType:b,multiplier:Bt}=pt[G],q=new C.default(0);if(q=q.add(t.bets.filter((S)=>S.type===b).reduce((S,_)=>S.add(_.amount.mul(Bt)),new C.default(0))),G==="TIE")q=q.add(t.bets.filter((S)=>S.type==="PLAYER"||S.type==="BANKER").reduce((S,_)=>S.add(_.amount),new C.default(0)));return{isFinished:!0,payoutMultiplier:w.gt(0)?q.div(w):new C.default(0),outputs:{playerCards:Z,playerHandValue:B,bankerCards:T,bankerHandValue:x,gameOutcome:G,result:A.values},randomValues:A}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((t)=>t.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let t=Yr[Math.floor(r/13)],E=zr[r%13];return{suit:t,rank:E}}isNaturalWin(r,t){let E=[8,9];return E.includes(r)||E.includes(t)}mapRandomValueToCardValue(r){let t=r%13;if(t===0)return 1;if(t>=10)return 10;return t+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,t){if(t===null)return r<=5;if(r<=2)return!0;if(r===3)return t!==8;if(r===4)return[2,3,4,5,6,7].includes(t);if(r===5)return[4,5,6,7].includes(t);if(r===6)return[6,7].includes(t);return!1}}var Qr=z(require("big.js"));class y{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let t=this.multipliers.get(r);if(t===void 0)throw new Error(`Multipliers for ${r} not found`);return t}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,t])=>({edge:r,multipliers:t}))}}var Xr;((c)=>{c.PAIR="PAIR";c.TWO_PAIR="TWO_PAIR";c.THREE_OF_A_KIND="THREE_OF_A_KIND";c.FULL_HOUSE="FULL_HOUSE";c.FOUR_OF_A_KIND="FOUR_OF_A_KIND";c.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Xr||={});var Ut={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},Ft={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},Pt={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},Yt={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},zt={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Hr=new y(new Map([[1,Ut],[2,Ft],[3,Pt],[4,Yt],[8,zt]])),$t={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Ir extends D{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:t}){let E=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),A=Hr.getMultipliers(t),o=E.values,O=this.calculatePayoutMultiplier(A,o);return{isFinished:!0,payoutMultiplier:Qr.default(O),outputs:{result:E.values},randomValues:E}}calculatePayoutMultiplier(r,t){let E=new Map;for(let O of t){let c=E.get(O)||0;E.set(O,c+1)}let A=[...E.values()].filter((O)=>O>1),o=this.classifyResult(A);return o===null?0:r[o]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[t,E]=r;if(t===void 0)return null;if(E===void 0){let A=$t[t];if(A===void 0)throw new Error(`Unexpected single diamond repeat count: ${t}`);return A}return t===3||E===3?"FULL_HOUSE":"TWO_PAIR"}}var m=z(require("big.js"));var hr;((E)=>{E.ABOVE="ABOVE";E.BELOW="BELOW"})(hr||={});class br extends D{constructor(){super("DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:0,max:1e4}),o=A.min,Z=A.max-o+1-1,B=E.direction==="ABOVE"?Z-E.selectedValue:E.selectedValue,T=new m.default(B).div(Z).mul(100);return{isFinished:!0,payoutMultiplier:(E.direction==="ABOVE"?A.value>E.selectedValue:A.value<E.selectedValue)?new m.default(100-t).div(T):new m.default(0),outputs:{result:A.values},randomValues:A}}}var Lr=z(require("big.js"));var Q=require("@betorigami/guard");var k;((o)=>{o.CLASSIC="CLASSIC";o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(k||={});var ir=[1,2,3,4,5,6,7,8,9,10],l=(r)=>{return ir.includes(r)};var Vr={[1]:{CLASSIC:[0,3.96],LOW_RISK:[0.7,1.85],MEDIUM_RISK:[0.4,2.75],HIGH_RISK:[0,3.96]},[2]:{CLASSIC:[0,1.9,4.5],LOW_RISK:[0,2,3.8],MEDIUM_RISK:[0,1.8,5.1],HIGH_RISK:[0,0,17.1]},[3]:{CLASSIC:[0,1,3.1,10.4],LOW_RISK:[0,1.1,1.38,26],MEDIUM_RISK:[0,0,2.8,50],HIGH_RISK:[0,0,0,81.5]},[4]:{CLASSIC:[0,0.8,1.8,5,22.5],LOW_RISK:[0,0,2.2,7.9,90],MEDIUM_RISK:[0,0,1.7,10,100],HIGH_RISK:[0,0,0,10,259]},[5]:{CLASSIC:[0,0.25,1.4,4.1,16.5,36],LOW_RISK:[0,0,1.5,4.2,13,300],MEDIUM_RISK:[0,0,1.4,4,14,390],HIGH_RISK:[0,0,0,4.5,48,450]},[6]:{CLASSIC:[0,0,1,3.68,7,16.5,40],LOW_RISK:[0,0,1.1,2,6.2,100,700],MEDIUM_RISK:[0,0,0,3,9,180,710],HIGH_RISK:[0,0,0,0,11,350,710]},[7]:{CLASSIC:[0,0,0.47,3,4.5,14,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,15,225,700],MEDIUM_RISK:[0,0,0,2,7,30,400,800],HIGH_RISK:[0,0,0,0,7,90,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,13,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,5.5,39,100,800],MEDIUM_RISK:[0,0,0,2,4,11,67,400,900],HIGH_RISK:[0,0,0,0,5,20,270,600,900]},[9]:{CLASSIC:[0,0,0,1.55,3,8,15,44,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,5,15,100,500,1000],HIGH_RISK:[0,0,0,0,4,11,56,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,4,7,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,8,13,63,500,800,1000]}},dr={[1]:{CLASSIC:[0,3.92],LOW_RISK:[0.7,1.82],MEDIUM_RISK:[0.4,2.72],HIGH_RISK:[0,3.92]},[2]:{CLASSIC:[0,1.9,4.32],LOW_RISK:[0,2,3.65],MEDIUM_RISK:[0,1.8,5],HIGH_RISK:[0,0,17]},[3]:{CLASSIC:[0,1,3,10.7],LOW_RISK:[0,1.1,1.3,26.2],MEDIUM_RISK:[0,0,2.7,50.3],HIGH_RISK:[0,0,0,80.7]},[4]:{CLASSIC:[0,0.8,1.8,4.75,22.5],LOW_RISK:[0,0,2.2,7.65,90],MEDIUM_RISK:[0,0,1.7,9.8,100],HIGH_RISK:[0,0,0,9.75,259]},[5]:{CLASSIC:[0,0.2,1.4,4.25,16.4,36],LOW_RISK:[0,0,1.5,4.1,12.9,300],MEDIUM_RISK:[0,0,1.4,3.9,13.9,390],HIGH_RISK:[0,0,0,4.5,47,450]},[6]:{CLASSIC:[0,0,1,3.6,7,17,40],LOW_RISK:[0,0,1.1,2,5.8,100,700],MEDIUM_RISK:[0,0,0,3,8.6,180,710],HIGH_RISK:[0,0,0,0,10.6,350,710]},[7]:{CLASSIC:[0,0,0.5,3,4.1,13.7,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,13.5,225,700],MEDIUM_RISK:[0,0,0,2,6.9,29.2,400,800],HIGH_RISK:[0,0,0,0,6.9,89.1,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,12.2,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,4.8,38,100,800],MEDIUM_RISK:[0,0,0,2,4,10.4,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.8,270,600,900]},[9]:{CLASSIC:[0,0,0,1.5,3,8.1,15,45,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.1,7.4,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,4.6,15.2,100,500,1000],HIGH_RISK:[0,0,0,0,4,10.7,55.4,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.5,7.6,16,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.6,3.7,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.8,6.8,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,7.8,12.8,63,500,800,1000]}},Rr={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.7,1.78],MEDIUM_RISK:[0.4,2.68],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,2,3.48],MEDIUM_RISK:[0,1.8,4.8],HIGH_RISK:[0,0,16.8]},[3]:{CLASSIC:[0,1,3,9.9],LOW_RISK:[0,1.1,1.2,26.5],MEDIUM_RISK:[0,0,2.65,50],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.7,5,23],LOW_RISK:[0,0,2.1,7.95,90],MEDIUM_RISK:[0,0,1.7,9.55,100],HIGH_RISK:[0,0,0,9.5,259]},[5]:{CLASSIC:[0,0.2,1.4,4.1,16.6,36],LOW_RISK:[0,0,1.5,4,12.7,300],MEDIUM_RISK:[0,0,1.4,3.8,13.7,390],HIGH_RISK:[0,0,0,4.4,46.9,450]},[6]:{CLASSIC:[0,0,1,3.6,6.6,16.5,40],LOW_RISK:[0,0,1.1,1.9,5.9,100,700],MEDIUM_RISK:[0,0,0,2.9,8.7,180,710],HIGH_RISK:[0,0,0,0,10.8,342,710]},[7]:{CLASSIC:[0,0,0.5,2.9,4.3,13.5,30.4,60],LOW_RISK:[0,0,1.1,1.6,3.1,14.8,225,700],MEDIUM_RISK:[0,0,0,2,6.7,29,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.2,3.8,12.7,21,54,70],LOW_RISK:[0,0,1.1,1.5,1.8,5.2,38,100,800],MEDIUM_RISK:[0,0,0,2,3.8,10.8,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.5,265,600,900]},[9]:{CLASSIC:[0,0,0,1.5,2.9,8.2,15,43,60,85],LOW_RISK:[0,0,1.1,1.3,1.6,2.1,7.7,49,250,1000],MEDIUM_RISK:[0,0,0,2,2.4,4.7,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.9,10.8,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.2,8,16.7,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.5,2.9,12,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.6,6.6,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.4,7.9,12.9,62,500,800,1000]}},Wr={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.68,1.84],MEDIUM_RISK:[0.38,2.74],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,1.96,3.75],MEDIUM_RISK:[0,1.77,5],HIGH_RISK:[0,0,16.82]},[3]:{CLASSIC:[0,1,3.05,9.35],LOW_RISK:[0,1.07,1.37,25.7],MEDIUM_RISK:[0,0,2.74,49],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.72,4.95,22.3],LOW_RISK:[0,0,2.15,7.86,87],MEDIUM_RISK:[0,0,1.67,9.7,100],HIGH_RISK:[0,0,0,9.7,256]},[5]:{CLASSIC:[0,0.24,1.38,4,16.3,35.5],LOW_RISK:[0,0,1.48,4.1,12.43,300],MEDIUM_RISK:[0,0,1.35,3.96,13.8,389],HIGH_RISK:[0,0,0,4.4,47,444]},[6]:{CLASSIC:[0,0,1,3.57,6.8,16.2,37],LOW_RISK:[0,0,1.06,1.96,6.16,99,700],MEDIUM_RISK:[0,0,0,2.9,8.9,178,709],HIGH_RISK:[0,0,0,0,10.4,347,709]},[7]:{CLASSIC:[0,0,0.45,2.95,4.44,13.85,30,60],LOW_RISK:[0,0,1.07,1.57,3.47,14.57,225,700],MEDIUM_RISK:[0,0,0,1.95,6.8,29.8,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.15,3.9,12.9,21.9,55,70],LOW_RISK:[0,0,1.08,1.45,1.98,5.48,38.8,100,800],MEDIUM_RISK:[0,0,0,1.95,3.96,10.6,66.9,396,896],HIGH_RISK:[0,0,0,0,4.9,19.2,269,599,896]},[9]:{CLASSIC:[0,0,0,1.5,2.95,7.96,14.96,44,60,85],LOW_RISK:[0,0,1.05,1.29,1.69,2.49,7.49,49,250,1000],MEDIUM_RISK:[0,0,0,1.95,2.47,4.9,14.9,99,500,1000],HIGH_RISK:[0,0,0,0,3.96,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.37,2.2,4.45,7.7,16.7,50,80,100],LOW_RISK:[0,0,1.08,1.18,1.28,1.76,3.4,12.9,50,250,1000],MEDIUM_RISK:[0,0,0,1.57,1.95,3.96,6.9,25.5,100,500,1000],HIGH_RISK:[0,0,0,0,3.43,7.9,12.5,60,500,800,1000]}},mr={[1]:{CLASSIC:[0,3.68],LOW_RISK:[0.7,1.58],MEDIUM_RISK:[0.4,2.48],HIGH_RISK:[0,3.68]},[2]:{CLASSIC:[0,1.72,4.48],LOW_RISK:[0,1.9,3.28],MEDIUM_RISK:[0,1.7,4.62],HIGH_RISK:[0,0,15.95]},[3]:{CLASSIC:[0,0.9,2.95,9.9],LOW_RISK:[0,1,1.2,26],MEDIUM_RISK:[0,0,2.29,50],HIGH_RISK:[0,0,0,75.7]},[4]:{CLASSIC:[0,0.8,1.6,4.4,21],LOW_RISK:[0,0,2,7.5,86],MEDIUM_RISK:[0,0,1.5,9.5,98],HIGH_RISK:[0,0,0,9,246]},[5]:{CLASSIC:[0,0.2,1.2,4.2,16.3,37],LOW_RISK:[0,0,1.4,3.8,12,300],MEDIUM_RISK:[0,0,1.3,3.5,14,385],HIGH_RISK:[0,0,0,4,45,450]},[6]:{CLASSIC:[0,0,1,3.3,6.2,15,40],LOW_RISK:[0,0,1.1,1.7,4.9,99,700],MEDIUM_RISK:[0,0,0,2.6,8.5,177,705],HIGH_RISK:[0,0,0,0,10,327,710]},[7]:{CLASSIC:[0,0,0.4,2.8,4.2,14.5,30,60],LOW_RISK:[0,0,1.1,1.4,3,14,210,700],MEDIUM_RISK:[0,0,0,1.8,6.4,29,400,800],HIGH_RISK:[0,0,0,0,6.1,85,400,800]},[8]:{CLASSIC:[0,0,0,2,3.7,13,20,50,70],LOW_RISK:[0,0,1.1,1.4,1.6,4.6,35,90,800],MEDIUM_RISK:[0,0,0,1.9,3.5,10.5,65,400,900],HIGH_RISK:[0,0,0,0,4.5,18,265,600,900]},[9]:{CLASSIC:[0,0,0,1.4,2.6,9,11.5,40,60,85],LOW_RISK:[0,0,1,1.3,1.5,2,7,45,250,1000],MEDIUM_RISK:[0,0,0,2,2.1,4,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.5,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.3,2,4.4,8,16.7,50,80,100],LOW_RISK:[0,0,1,1.2,1.25,1.4,2,10,50,250,1000],MEDIUM_RISK:[0,0,0,1.5,1.9,3.5,6.2,26,100,500,1000],HIGH_RISK:[0,0,0,0,3,8,14,57,500,800,1000]}},s=new y(new Map([[1,Vr],[2,dr],[3,Rr],[4,Wr],[8,mr]]));class ur extends D{constructor(){super("KENO")}determineGameResult({generator:r,edge:t,gameInputs:E}){Q.Guard.againstEmptyArray(E.selectedNumbers,()=>f.createValidationError("No numbers selected")),Q.Guard.against(E.selectedNumbers.length>10,()=>f.createValidationError("Maximum of 10 numbers can be selected"));for(let G of E.selectedNumbers)Q.Guard.againstNonInteger(G,()=>f.createValidationError("Only integers can be selected")),Q.Guard.against(G<0||G>39,()=>f.createValidationError("Invalid number selected"));let A=r.getUniqueRandomInts({min:0,max:39,count:10}),o=E.selectedNumbers.filter((G)=>A.values.includes(G)),O=E.selectedNumbers.length;if(!l(O))throw new Error(`Invalid tile count: ${O}`);let T=s.getMultipliers(t)[O][E.riskLevel][o.length];if(T===void 0)throw new Error(`No multiplier found for matching tile count ${o.length}`);return{isFinished:!0,payoutMultiplier:new Lr.default(T),outputs:{result:A.values},randomValues:A}}}var M=z(require("big.js"));var Kr=(r,t)=>{return r.gt(t)?r:t};var vr=(r,t)=>{return r.lt(t)?r:t};class nr extends D{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:1,max:4294967295}),o=A.max,O=new M.default(16777216),c=new M.default(1),Z=new M.default(1e6),B=A.value,T=new M.default(B-1).div(o),x=(100-t)/100,G=O.div(T.mul(O).plus(1)).mul(x),w=Kr(c,vr(G,Z));return{isFinished:!0,payoutMultiplier:w.gte(E.targetMultiplier)?new M.default(E.targetMultiplier):new M.default(0),outputs:{randomMultiplier:w,result:A.values},randomValues:A}}}var X=z(require("big.js"));var e=(r,t)=>{if(t<0||r<0||t>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(t>r-t)t=r-t;let E=1;for(let A=1;A<=t;A++)E=E*(r-A+1)/A;return E};class ar extends D{constructor(){super("MINES")}determineGameResult({generator:r,edge:t,gameInputs:E}){if(E.minesCount<=0||E.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(E.selectedTiles.length>25-E.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let c=r.getUniqueRandomInts({min:1,max:25,count:E.minesCount}),Z=c.values.some((b)=>E.selectedTiles.includes(b)),B=E.hasCashedOut||Z,T=(100-t)/100,x=new X.default(e(25-E.minesCount,E.selectedTiles.length)).div(new X.default(e(25,E.selectedTiles.length))),w=E.hasCashedOut&&!Z?new X.default(T).div(x):new X.default(0);return{isFinished:B,payoutMultiplier:w,outputs:{result:c.values},randomValues:c}}}var gr=require("big.js");var rr;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(rr||={});var jt=[8,9,10,11,12,13,14,15,16],qt={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Jt={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Qt={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},Xt={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Ht={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},tr=new y(new Map([[1,qt],[2,Jt],[3,Qt],[4,Xt],[8,Ht]]));class kr extends D{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(t.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(t.numberOfRows<8||t.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let A=t.numberOfRows,c=tr.getMultipliers(E)[t.riskLevel][A],Z=r.getRandomIntsWithReplacement({min:0,max:1,count:t.numberOfRows}),T=Z.values.reduce((G,w)=>G+w,0),x=c[T];if(x===void 0)throw new Error(`No payout found for end position ${T}`);return{isFinished:!0,payoutMultiplier:gr.Big(x),outputs:{result:Z.values},randomValues:Z}}}var h=require("big.js");var L=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],Er=[37,...L],Ar=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],or=[[0,1],[0,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],Or=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],fr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],cr=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],xr=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Br=[0,1,2,3,37],Zr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Dr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],p;((E)=>{E.EVEN="EVEN";E.ODD="ODD"})(p||={});var U;((E)=>{E.RED="RED";E.BLACK="BLACK"})(U||={});var F;((E)=>{E.LOW="LOW";E.HIGH="HIGH"})(F||={});var P;((A)=>{A.TOP="TOP";A.MIDDLE="MIDDLE";A.BOTTOM="BOTTOM"})(P||={});var Y;((A)=>{A.FIRST="FIRST";A.SECOND="SECOND";A.THIRD="THIRD"})(Y||={});var u;((E)=>{E.AMERICAN="AMERICAN";E.EUROPEAN="EUROPEAN"})(u||={});var K=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&H(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&It(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&ht(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&bt(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&it(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},H=(r)=>{return L.includes(r)},It=(r)=>{if(r.length!==2)return!1;if(!r.every(H))return!1;return Ar.some(([t,E])=>t===r[0]&&E===r[1])},ht=(r)=>{if(r.length!==3)return!1;if(!r.every(H))return!1;return Or.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},bt=(r)=>{if(r.length!==4)return!1;if(!r.every(H))return!1;return cr.some(([t,E,A,o])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3])},it=(r)=>{if(r.length!==6)return!1;if(!r.every(H))return!1;return Zr.some(([t,E,A,o,O,c])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3]&&O===r[4]&&c===r[5])};var v=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&I(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&Vt(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&dt(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&Rt(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.basketBets.every((t)=>t.amount.gte(0)))throw f.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&Wt(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},I=(r)=>{return Er.includes(r)};function Vt(r){if(r.length!==2)return!1;if(!r.every(I))return!1;return or.some(([t,E])=>t===r[0]&&E===r[1])}var dt=(r)=>{if(r.length!==3)return!1;if(!r.every(I))return!1;return fr.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},Rt=(r)=>{if(r.length!==4)return!1;if(!r.every(I))return!1;return xr.some(([t,E,A,o])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3])},Wt=(r)=>{if(r.length!==6)return!1;if(!r.every(I))return!1;return Dr.some(([t,E,A,o,O,c])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3]&&O===r[4]&&c===r[5])};var lr={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},sr=[3,6,9,12,15,18,21,24,27,30,33,36],er=[2,5,8,11,14,17,20,23,26,29,32,35],rt=[1,4,7,10,13,16,19,22,25,28,31,34],tt=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Et=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],At=2.7,ot=5.3;class Tr extends D{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:t}){this.validateInputs(t);let E=r.getRandomInt({min:0,max:this.maxNumber}),A=E.value,o=this.determineBetOutcomes(t,A),{payoutMultiplier:O}=this.getPayoutDetails(t,A);return{outputs:{betOutcomes:o,result:E.values},payoutMultiplier:O,isFinished:!0,randomValues:E}}getBetAmount(r){return this.calculateTotalBetAmount(this.getBetTotals(r))}getPayoutDetails(r,t){let E=this.determineBetOutcomes(r,t),A=this.getBetTotals(r),o=this.getBetTotals(E.winningBets),O=this.calculateTotalBetAmount(A),c=this.calculateTotalPayout(o);return{payoutMultiplier:O.gt(0)?c.div(O):new h.Big(0),payoutAmount:c}}determineBetOutcomes(r,t){let E={},A={};for(let o of Object.keys(r)){let O=r[o],c=this.betPredicates[o],{winning:Z,losing:B}=this.partitionBets(O,c,t);E[o]=Z,A[o]=B}return{winningBets:E,losingBets:A}}calculateTotalAmount(r){return r.reduce((t,E)=>t.plus(E.amount),new h.Big(0))}isWinningStraightBet(r,t){return r.value===t}isWinningSplitBet(r,t){return r.values.some((E)=>E===t)}isWinningStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningCornerBet(r,t){return r.values.some((E)=>E===t)}isWinningDoubleStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningColorBet(r,t){let E=r;return tt.includes(t)&&E.color==="RED"||Et.includes(t)&&E.color==="BLACK"}isWinningHalfBet(r,t){let E=r;if(t>0&&t<=18&&E.half==="LOW")return!0;if(t>18&&t<=36&&E.half==="HIGH")return!0;return!1}isWinningColumnBet(r,t){let E=r;return sr.includes(t)&&E.column==="TOP"||er.includes(t)&&E.column==="MIDDLE"||rt.includes(t)&&E.column==="BOTTOM"}isWinningDozenBet(r,t){let E=r;if(t>0&&t<=12&&E.dozen==="FIRST")return!0;if(t>12&&t<=24&&E.dozen==="SECOND")return!0;if(t>24&&t<=36&&E.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,t){let E=r;if(t===0||t===37)return!1;let A=t%2===0?"EVEN":"ODD";return E.parity===A}getBetTotals(r){let t={};for(let E of Object.keys(r))t[E]=this.calculateTotalAmount(r[E]);return t}calculateTotalBetAmount(r){return Object.values(r).reduce((t,E)=>t.plus(E),new h.Big(0))}partitionBets(r,t,E){return{winning:r.filter((A)=>t(A,E)),losing:r.filter((A)=>!t(A,E))}}calculateTotalPayout(r){return Object.entries(r).reduce((t,[E,A])=>{let O=lr[E];return t.plus(A.mul(O||0))},new h.Big(0))}}class Gr extends Tr{maxNumber=36;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){K(r)}}class Sr extends Tr{maxNumber=37;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){v(r)}isWinningBasketBet(r,t){return Br.some((E)=>E===t)}}class Nr extends D{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Gr,this.americanGame=new Sr}getBetAmount(r){switch(r.type){case"AMERICAN":return this.americanGame.getBetAmount(r.inputs);case"EUROPEAN":return this.europeanGame.getBetAmount(r.inputs);default:throw new Error("Unhandled roulette type")}}determineGameResult(r){let{gameInputs:t,...E}=r;if(r.edge===At&&t.type==="EUROPEAN"){let A=this.europeanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:o}=A.outputs;return{...A,outputs:{type:"european",betOutcomes:o,result:A.outputs.result}}}if(r.edge===ot&&t.type==="AMERICAN"){let A=this.americanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:o}=A.outputs;return{...A,outputs:{type:"american",betOutcomes:o,result:A.outputs.result}}}throw f.createValidationError(`Attempted to play ${t.type} roulette on edge ${r.edge}`)}}var mt=(r)=>{return new Nr().getBetAmount(r)};var Lt=(r)=>{if(r.type==="EUROPEAN")K(r.inputs);else v(r.inputs)};var ct=require("big.js");var $;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})($||={});var j;((O)=>{O[O.TEN=10]="TEN";O[O.TWENTY=20]="TWENTY";O[O.THIRTY=30]="THIRTY";O[O.FORTY=40]="FORTY";O[O.FIFTY=50]="FIFTY"})(j||={});var ut={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},Kt={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},vt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},nt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},at={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},Ot=new y(new Map([[1,ut],[2,Kt],[3,vt],[4,nt],[8,at]]));var ft={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class xt extends D{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(!Object.values(j).includes(t.segments))throw new Error("Invalid segments value");if(!Object.values($).includes(t.riskLevel))throw new Error("Invalid risk level");let o=Ot.getMultipliers(E)[t.riskLevel];if(o===void 0)throw new Error(`No multipliers found for risk level ${t.riskLevel}`);let O=o[t.segments];if(O===void 0)throw new Error(`No multipliers found for segment ${t.segments}`);let c=ft[t.riskLevel];if(c===void 0)throw new Error(`No patterns found for risk level ${t.riskLevel}`);let Z=c[t.segments];if(Z===void 0)throw new Error(`No patterns found for segment ${t.segments}`);let B=r.getRandomInt({min:0,max:Z.length-1}),T=Z[B.value];if(T===void 0)throw new Error(`No pattern found for segment ${t.segments} and value ${B.value}`);let x=O[T];if(x===void 0)throw new Error(`No payout found for picked segment ${T}`);return{isFinished:!0,payoutMultiplier:new ct.Big(x),outputs:{result:B.values},randomValues:B}}}
1
+ var Zt=Object.create;var{getPrototypeOf:Dt,defineProperty:J,getOwnPropertyNames:wr,getOwnPropertyDescriptor:Tt}=Object,Cr=Object.prototype.hasOwnProperty;var z=(r,t,E)=>{E=r!=null?Zt(Dt(r)):{};let A=t||!r||!r.__esModule?J(E,"default",{value:r,enumerable:!0}):E;for(let o of wr(r))if(!Cr.call(A,o))J(A,o,{get:()=>r[o],enumerable:!0});return A},_r=new WeakMap,Gt=(r)=>{var t=_r.get(r),E;if(t)return t;if(t=J({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")wr(r).map((A)=>!Cr.call(t,A)&&J(t,A,{get:()=>r[A],enumerable:!(E=Tt(r,A))||E.enumerable}));return _r.set(r,t),t};var St=(r,t)=>{for(var E in t)J(r,E,{get:t[E],enumerable:!0,configurable:!0,set:(A)=>t[E]=()=>A})};var gt={};St(gt,{validateRouletteGameInputs:()=>Lt,validateAdvancedDiceInputs:()=>Mt,rtp99Multipliers:()=>ir,rtp98Multipliers:()=>dr,rtp97Multipliers:()=>Rr,rtp96Multipliers:()=>Wr,rtp92Multipliers:()=>mr,plinkoMultipliers:()=>tr,kenoMultipliers:()=>s,isTileCount:()=>l,diamondsMultipliers:()=>Hr,calculateRouletteBetAmount:()=>mt,calculateBaccaratBetAmount:()=>qr,WheelSegments:()=>j,WheelRiskLevel:()=>$,Wheel:()=>xt,VALID_SUITS:()=>Yr,VALID_RANKS:()=>zr,VALID_EUROPEAN_STREETS:()=>Or,VALID_EUROPEAN_STRAIGHTS:()=>L,VALID_EUROPEAN_SPLITS:()=>Ar,VALID_EUROPEAN_DOUBLE_STREETS:()=>Zr,VALID_EUROPEAN_CORNERS:()=>cr,VALID_AMERICAN_STREETS:()=>fr,VALID_AMERICAN_STRAIGHTS:()=>Er,VALID_AMERICAN_SPLITS:()=>or,VALID_AMERICAN_DOUBLE_STREETS:()=>Dr,VALID_AMERICAN_CORNERS:()=>xr,TOP_COLUMN:()=>sr,TILE_COUNTS:()=>Vr,RouletteType:()=>u,Roulette:()=>Nr,RollType:()=>Ur,RED_NUMBERS:()=>tt,RANDOM_MIN_VALUE:()=>R,RANDOM_MAX_VALUE:()=>W,PlinkoRiskLevel:()=>rr,Plinko:()=>kr,Parity:()=>p,PLINKO_ROW_COUNTS:()=>jt,PAYOUT_MULTIPLIERS:()=>lr,OrigamiGame:()=>N,Mines:()=>ar,MIN_WIN_CHANCE:()=>Mr,MIDDLE_COLUMN:()=>er,MAX_WIN_CHANCE:()=>pr,Limbo:()=>nr,KenoRiskLevel:()=>k,Keno:()=>ur,Half:()=>F,GameErrorCode:()=>yr,GameError:()=>f,Game:()=>D,EuropeanRoulette:()=>Gr,EUROPEAN_HOUSE_EDGE:()=>At,EFFECTIVE_RANGE:()=>g,Dozen:()=>Y,DiceDirection:()=>hr,Dice:()=>br,DiamondsResultType:()=>Xr,Diamonds:()=>Ir,Column:()=>P,Color:()=>U,BaccaratOutcome:()=>$r,BaccaratBetType:()=>jr,Baccarat:()=>Jr,BOTTOM_COLUMN:()=>rt,BLACK_NUMBERS:()=>Et,AmericanRoulette:()=>Sr,AdvancedDice:()=>Pr,AMERICAN_HOUSE_EDGE:()=>ot,AMERICAN_BASKET:()=>Br});module.exports=Gt(gt);var N;((x)=>{x.DICE="DICE";x.MINES="MINES";x.KENO="KENO";x.LIMBO="LIMBO";x.ADVANCED_DICE="ADVANCED_DICE";x.BACCARAT="BACCARAT";x.DIAMONDS="DIAMONDS";x.PLINKO="PLINKO";x.ROULETTE="ROULETTE";x.WHEEL="WHEEL";x.BLACKJACK="BLACKJACK"})(N||={});class D{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}var d=require("big.js");var yr;((t)=>t.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(yr||={});class f extends Error{static createValidationError(r){return new f("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof f}errorCode;constructor(r,t){super(t);this.errorCode=r}}var R=0,W=1e4,g=10001,Mr=0.01,pr=98,Nt=(r)=>{if(r<R)throw f.createValidationError(`Lower bound ${r} is below minimum allowed value ${R}`)},_t=(r)=>{if(r>W)throw f.createValidationError(`Upper bound ${r} is above maximum allowed value ${W}`)},i=(r)=>{if(Nt(r.lower),_t(r.upper),r.lower>=r.upper)throw f.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},wt=(r,t)=>{let[E,A]=r.lower<=t.lower?[r,t]:[t,r];if(E.upper>A.lower)throw f.createValidationError("Bounds must not overlap")},Ct=(r,t)=>t>=r.lower&&t<=r.upper,yt=(r)=>r.upper-r.lower+1,n=(r,t)=>t>r.lower&&t<r.upper,a=(r)=>r.upper-r.lower-1,Ur;((A)=>{A.ROLL_BETWEEN="ROLL_BETWEEN";A.ROLL_OUTSIDE="ROLL_OUTSIDE";A.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Ur||={});var Fr=(r)=>{let E=(()=>{switch(r.mode){case"ROLL_BETWEEN":return i(r.bounds),a(r.bounds);case"ROLL_OUTSIDE":return i(r.bounds),g-yt(r.bounds);case"ROLL_BETWEEN_TWO":return i(r.firstBounds),i(r.secondBounds),wt(r.firstBounds,r.secondBounds),a(r.firstBounds)+a(r.secondBounds)}})(),A=d.Big(E).div(g).mul(100);if(A.lt(Mr))throw f.createValidationError("Win chance too low");if(A.gt(pr))throw f.createValidationError("Win chance too high");return A},Mt=(r)=>{Fr(r)};class Pr extends D{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=Fr(E),o=r.getRandomInt({min:R,max:W}),O=o.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(E.mode){case"ROLL_BETWEEN":return n(E.bounds,O);case"ROLL_OUTSIDE":return!Ct(E.bounds,O);case"ROLL_BETWEEN_TWO":return n(E.firstBounds,O)||n(E.secondBounds,O)}})()?new d.Big(100-t).div(A):new d.Big(0),outputs:{result:o.values},randomValues:o}}}var y=z(require("big.js"));var Yr=["Clubs","Diamonds","Hearts","Spades"],zr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],$r;((A)=>{A.PLAYER_WIN="PLAYER_WIN";A.TIE="TIE";A.BANKER_WIN="BANKER_WIN"})($r||={});var jr;((A)=>{A.PLAYER="PLAYER";A.TIE="TIE";A.BANKER="BANKER"})(jr||={});var pt={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:9},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},qr=(r)=>{return new y.default(0).add(r.bets.reduce((E,A)=>E.add(A.amount),new y.default(0)))};class Jr extends D{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(E!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(t);let A=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),o=A.values,O=o.slice(0,3),c=o.slice(3,6),Z=[],B=0;for(let S of O.slice(0,2)){let _=this.mapRandomValueToCard(S),V=this.mapRandomValueToCardValue(S);Z.push(_),B=(B+V)%10}let G=[],T=0;for(let S of c.slice(0,2)){let _=this.mapRandomValueToCard(S),V=this.mapRandomValueToCardValue(S);G.push(_),T=(T+V)%10}if(!this.isNaturalWin(B,T)){let S=this.shouldDrawThirdPlayerCard(B),_=null;if(S)_=this.mapRandomValueToCardValue(O[2]),Z.push(this.mapRandomValueToCard(O[2])),B=(B+_)%10;if(this.shouldDrawThirdBankerCard(T,_))G.push(this.mapRandomValueToCard(c[2])),T=(T+this.mapRandomValueToCardValue(c[2]))%10}let x;if(B===T)x="TIE";else x=B>T?"PLAYER_WIN":"BANKER_WIN";let w=qr(t),{betType:b,multiplier:Bt}=pt[x],q=new y.default(0);if(q=q.add(t.bets.filter((S)=>S.type===b).reduce((S,_)=>S.add(_.amount.mul(Bt)),new y.default(0))),x==="TIE")q=q.add(t.bets.filter((S)=>S.type==="PLAYER"||S.type==="BANKER").reduce((S,_)=>S.add(_.amount),new y.default(0)));return{isFinished:!0,payoutMultiplier:w.gt(0)?q.div(w):new y.default(0),outputs:{playerCards:Z,playerHandValue:B,bankerCards:G,bankerHandValue:T,gameOutcome:x,result:A.values},randomValues:A}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((t)=>t.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let t=Yr[Math.floor(r/13)],E=zr[r%13];return{suit:t,rank:E}}isNaturalWin(r,t){let E=[8,9];return E.includes(r)||E.includes(t)}mapRandomValueToCardValue(r){let t=r%13;if(t===0)return 1;if(t>=10)return 10;return t+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,t){if(t===null)return r<=5;if(r<=2)return!0;if(r===3)return t!==8;if(r===4)return[2,3,4,5,6,7].includes(t);if(r===5)return[4,5,6,7].includes(t);if(r===6)return[6,7].includes(t);return!1}}var Qr=z(require("big.js"));class C{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let t=this.multipliers.get(r);if(t===void 0)throw new Error(`Multipliers for ${r} not found`);return t}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,t])=>({edge:r,multipliers:t}))}}var Xr;((c)=>{c.PAIR="PAIR";c.TWO_PAIR="TWO_PAIR";c.THREE_OF_A_KIND="THREE_OF_A_KIND";c.FULL_HOUSE="FULL_HOUSE";c.FOUR_OF_A_KIND="FOUR_OF_A_KIND";c.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Xr||={});var Ut={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},Ft={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},Pt={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},Yt={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},zt={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Hr=new C(new Map([[1,Ut],[2,Ft],[3,Pt],[4,Yt],[8,zt]])),$t={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Ir extends D{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:t}){let E=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),A=Hr.getMultipliers(t),o=E.values,O=this.calculatePayoutMultiplier(A,o);return{isFinished:!0,payoutMultiplier:Qr.default(O),outputs:{result:E.values},randomValues:E}}calculatePayoutMultiplier(r,t){let E=new Map;for(let O of t){let c=E.get(O)||0;E.set(O,c+1)}let A=[...E.values()].filter((O)=>O>1),o=this.classifyResult(A);return o===null?0:r[o]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[t,E]=r;if(t===void 0)return null;if(E===void 0){let A=$t[t];if(A===void 0)throw new Error(`Unexpected single diamond repeat count: ${t}`);return A}return t===3||E===3?"FULL_HOUSE":"TWO_PAIR"}}var m=z(require("big.js"));var hr;((E)=>{E.ABOVE="ABOVE";E.BELOW="BELOW"})(hr||={});class br extends D{constructor(){super("DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:0,max:1e4}),o=A.min,Z=A.max-o+1-1,B=E.direction==="ABOVE"?Z-E.selectedValue:E.selectedValue,G=new m.default(B).div(Z).mul(100);return{isFinished:!0,payoutMultiplier:(E.direction==="ABOVE"?A.value>E.selectedValue:A.value<E.selectedValue)?new m.default(100-t).div(G):new m.default(0),outputs:{result:A.values},randomValues:A}}}var Lr=z(require("big.js"));var Q=require("@betorigami/guard");var k;((o)=>{o.CLASSIC="CLASSIC";o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(k||={});var Vr=[1,2,3,4,5,6,7,8,9,10],l=(r)=>{return Vr.includes(r)};var ir={[1]:{CLASSIC:[0,3.96],LOW_RISK:[0.7,1.85],MEDIUM_RISK:[0.4,2.75],HIGH_RISK:[0,3.96]},[2]:{CLASSIC:[0,1.9,4.5],LOW_RISK:[0,2,3.8],MEDIUM_RISK:[0,1.8,5.1],HIGH_RISK:[0,0,17.1]},[3]:{CLASSIC:[0,1,3.1,10.4],LOW_RISK:[0,1.1,1.38,26],MEDIUM_RISK:[0,0,2.8,50],HIGH_RISK:[0,0,0,81.5]},[4]:{CLASSIC:[0,0.8,1.8,5,22.5],LOW_RISK:[0,0,2.2,7.9,90],MEDIUM_RISK:[0,0,1.7,10,100],HIGH_RISK:[0,0,0,10,259]},[5]:{CLASSIC:[0,0.25,1.4,4.1,16.5,36],LOW_RISK:[0,0,1.5,4.2,13,300],MEDIUM_RISK:[0,0,1.4,4,14,390],HIGH_RISK:[0,0,0,4.5,48,450]},[6]:{CLASSIC:[0,0,1,3.68,7,16.5,40],LOW_RISK:[0,0,1.1,2,6.2,100,700],MEDIUM_RISK:[0,0,0,3,9,180,710],HIGH_RISK:[0,0,0,0,11,350,710]},[7]:{CLASSIC:[0,0,0.47,3,4.5,14,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,15,225,700],MEDIUM_RISK:[0,0,0,2,7,30,400,800],HIGH_RISK:[0,0,0,0,7,90,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,13,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,5.5,39,100,800],MEDIUM_RISK:[0,0,0,2,4,11,67,400,900],HIGH_RISK:[0,0,0,0,5,20,270,600,900]},[9]:{CLASSIC:[0,0,0,1.55,3,8,15,44,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,5,15,100,500,1000],HIGH_RISK:[0,0,0,0,4,11,56,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,4,7,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,8,13,63,500,800,1000]}},dr={[1]:{CLASSIC:[0,3.92],LOW_RISK:[0.7,1.82],MEDIUM_RISK:[0.4,2.72],HIGH_RISK:[0,3.92]},[2]:{CLASSIC:[0,1.9,4.32],LOW_RISK:[0,2,3.65],MEDIUM_RISK:[0,1.8,5],HIGH_RISK:[0,0,17]},[3]:{CLASSIC:[0,1,3,10.7],LOW_RISK:[0,1.1,1.3,26.2],MEDIUM_RISK:[0,0,2.7,50.3],HIGH_RISK:[0,0,0,80.7]},[4]:{CLASSIC:[0,0.8,1.8,4.75,22.5],LOW_RISK:[0,0,2.2,7.65,90],MEDIUM_RISK:[0,0,1.7,9.8,100],HIGH_RISK:[0,0,0,9.75,259]},[5]:{CLASSIC:[0,0.2,1.4,4.25,16.4,36],LOW_RISK:[0,0,1.5,4.1,12.9,300],MEDIUM_RISK:[0,0,1.4,3.9,13.9,390],HIGH_RISK:[0,0,0,4.5,47,450]},[6]:{CLASSIC:[0,0,1,3.6,7,17,40],LOW_RISK:[0,0,1.1,2,5.8,100,700],MEDIUM_RISK:[0,0,0,3,8.6,180,710],HIGH_RISK:[0,0,0,0,10.6,350,710]},[7]:{CLASSIC:[0,0,0.5,3,4.1,13.7,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,13.5,225,700],MEDIUM_RISK:[0,0,0,2,6.9,29.2,400,800],HIGH_RISK:[0,0,0,0,6.9,89.1,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,12.2,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,4.8,38,100,800],MEDIUM_RISK:[0,0,0,2,4,10.4,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.8,270,600,900]},[9]:{CLASSIC:[0,0,0,1.5,3,8.1,15,45,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.1,7.4,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,4.6,15.2,100,500,1000],HIGH_RISK:[0,0,0,0,4,10.7,55.4,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.5,7.6,16,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.6,3.7,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.8,6.8,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,7.8,12.8,63,500,800,1000]}},Rr={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.7,1.78],MEDIUM_RISK:[0.4,2.68],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,2,3.48],MEDIUM_RISK:[0,1.8,4.8],HIGH_RISK:[0,0,16.8]},[3]:{CLASSIC:[0,1,3,9.9],LOW_RISK:[0,1.1,1.2,26.5],MEDIUM_RISK:[0,0,2.65,50],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.7,5,23],LOW_RISK:[0,0,2.1,7.95,90],MEDIUM_RISK:[0,0,1.7,9.55,100],HIGH_RISK:[0,0,0,9.5,259]},[5]:{CLASSIC:[0,0.2,1.4,4.1,16.6,36],LOW_RISK:[0,0,1.5,4,12.7,300],MEDIUM_RISK:[0,0,1.4,3.8,13.7,390],HIGH_RISK:[0,0,0,4.4,46.9,450]},[6]:{CLASSIC:[0,0,1,3.6,6.6,16.5,40],LOW_RISK:[0,0,1.1,1.9,5.9,100,700],MEDIUM_RISK:[0,0,0,2.9,8.7,180,710],HIGH_RISK:[0,0,0,0,10.8,342,710]},[7]:{CLASSIC:[0,0,0.5,2.9,4.3,13.5,30.4,60],LOW_RISK:[0,0,1.1,1.6,3.1,14.8,225,700],MEDIUM_RISK:[0,0,0,2,6.7,29,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.2,3.8,12.7,21,54,70],LOW_RISK:[0,0,1.1,1.5,1.8,5.2,38,100,800],MEDIUM_RISK:[0,0,0,2,3.8,10.8,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.5,265,600,900]},[9]:{CLASSIC:[0,0,0,1.5,2.9,8.2,15,43,60,85],LOW_RISK:[0,0,1.1,1.3,1.6,2.1,7.7,49,250,1000],MEDIUM_RISK:[0,0,0,2,2.4,4.7,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.9,10.8,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.2,8,16.7,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.5,2.9,12,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.6,6.6,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.4,7.9,12.9,62,500,800,1000]}},Wr={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.68,1.84],MEDIUM_RISK:[0.38,2.74],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,1.96,3.75],MEDIUM_RISK:[0,1.77,5],HIGH_RISK:[0,0,16.82]},[3]:{CLASSIC:[0,1,3.05,9.35],LOW_RISK:[0,1.07,1.37,25.7],MEDIUM_RISK:[0,0,2.74,49],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.72,4.95,22.3],LOW_RISK:[0,0,2.15,7.86,87],MEDIUM_RISK:[0,0,1.67,9.7,100],HIGH_RISK:[0,0,0,9.7,256]},[5]:{CLASSIC:[0,0.24,1.38,4,16.3,35.5],LOW_RISK:[0,0,1.48,4.1,12.43,300],MEDIUM_RISK:[0,0,1.35,3.96,13.8,389],HIGH_RISK:[0,0,0,4.4,47,444]},[6]:{CLASSIC:[0,0,1,3.57,6.8,16.2,37],LOW_RISK:[0,0,1.06,1.96,6.16,99,700],MEDIUM_RISK:[0,0,0,2.9,8.9,178,709],HIGH_RISK:[0,0,0,0,10.4,347,709]},[7]:{CLASSIC:[0,0,0.45,2.95,4.44,13.85,30,60],LOW_RISK:[0,0,1.07,1.57,3.47,14.57,225,700],MEDIUM_RISK:[0,0,0,1.95,6.8,29.8,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.15,3.9,12.9,21.9,55,70],LOW_RISK:[0,0,1.08,1.45,1.98,5.48,38.8,100,800],MEDIUM_RISK:[0,0,0,1.95,3.96,10.6,66.9,396,896],HIGH_RISK:[0,0,0,0,4.9,19.2,269,599,896]},[9]:{CLASSIC:[0,0,0,1.5,2.95,7.96,14.96,44,60,85],LOW_RISK:[0,0,1.05,1.29,1.69,2.49,7.49,49,250,1000],MEDIUM_RISK:[0,0,0,1.95,2.47,4.9,14.9,99,500,1000],HIGH_RISK:[0,0,0,0,3.96,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.37,2.2,4.45,7.7,16.7,50,80,100],LOW_RISK:[0,0,1.08,1.18,1.28,1.76,3.4,12.9,50,250,1000],MEDIUM_RISK:[0,0,0,1.57,1.95,3.96,6.9,25.5,100,500,1000],HIGH_RISK:[0,0,0,0,3.43,7.9,12.5,60,500,800,1000]}},mr={[1]:{CLASSIC:[0,3.68],LOW_RISK:[0.7,1.58],MEDIUM_RISK:[0.4,2.48],HIGH_RISK:[0,3.68]},[2]:{CLASSIC:[0,1.72,4.48],LOW_RISK:[0,1.9,3.28],MEDIUM_RISK:[0,1.7,4.62],HIGH_RISK:[0,0,15.95]},[3]:{CLASSIC:[0,0.9,2.95,9.9],LOW_RISK:[0,1,1.2,26],MEDIUM_RISK:[0,0,2.29,50],HIGH_RISK:[0,0,0,75.7]},[4]:{CLASSIC:[0,0.8,1.6,4.4,21],LOW_RISK:[0,0,2,7.5,86],MEDIUM_RISK:[0,0,1.5,9.5,98],HIGH_RISK:[0,0,0,9,246]},[5]:{CLASSIC:[0,0.2,1.2,4.2,16.3,37],LOW_RISK:[0,0,1.4,3.8,12,300],MEDIUM_RISK:[0,0,1.3,3.5,14,385],HIGH_RISK:[0,0,0,4,45,450]},[6]:{CLASSIC:[0,0,1,3.3,6.2,15,40],LOW_RISK:[0,0,1.1,1.7,4.9,99,700],MEDIUM_RISK:[0,0,0,2.6,8.5,177,705],HIGH_RISK:[0,0,0,0,10,327,710]},[7]:{CLASSIC:[0,0,0.4,2.8,4.2,14.5,30,60],LOW_RISK:[0,0,1.1,1.4,3,14,210,700],MEDIUM_RISK:[0,0,0,1.8,6.4,29,400,800],HIGH_RISK:[0,0,0,0,6.1,85,400,800]},[8]:{CLASSIC:[0,0,0,2,3.7,13,20,50,70],LOW_RISK:[0,0,1.1,1.4,1.6,4.6,35,90,800],MEDIUM_RISK:[0,0,0,1.9,3.5,10.5,65,400,900],HIGH_RISK:[0,0,0,0,4.5,18,265,600,900]},[9]:{CLASSIC:[0,0,0,1.4,2.6,9,11.5,40,60,85],LOW_RISK:[0,0,1,1.3,1.5,2,7,45,250,1000],MEDIUM_RISK:[0,0,0,2,2.1,4,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.5,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.3,2,4.4,8,16.7,50,80,100],LOW_RISK:[0,0,1,1.2,1.25,1.4,2,10,50,250,1000],MEDIUM_RISK:[0,0,0,1.5,1.9,3.5,6.2,26,100,500,1000],HIGH_RISK:[0,0,0,0,3,8,14,57,500,800,1000]}},s=new C(new Map([[1,ir],[2,dr],[3,Rr],[4,Wr],[8,mr]]));class ur extends D{constructor(){super("KENO")}determineGameResult({generator:r,edge:t,gameInputs:E}){Q.Guard.againstEmptyArray(E.selectedNumbers,()=>f.createValidationError("No numbers selected")),Q.Guard.against(E.selectedNumbers.length>10,()=>f.createValidationError("Maximum of 10 numbers can be selected"));for(let x of E.selectedNumbers)Q.Guard.againstNonInteger(x,()=>f.createValidationError("Only integers can be selected")),Q.Guard.against(x<0||x>39,()=>f.createValidationError("Invalid number selected"));let A=r.getUniqueRandomInts({min:0,max:39,count:10}),o=E.selectedNumbers.filter((x)=>A.values.includes(x)),O=E.selectedNumbers.length;if(!l(O))throw new Error(`Invalid tile count: ${O}`);let G=s.getMultipliers(t)[O][E.riskLevel][o.length];if(G===void 0)throw new Error(`No multiplier found for matching tile count ${o.length}`);return{isFinished:!0,payoutMultiplier:new Lr.default(G),outputs:{result:A.values},randomValues:A}}}var M=z(require("big.js"));var Kr=(r,t)=>{return r.gt(t)?r:t};var vr=(r,t)=>{return r.lt(t)?r:t};class nr extends D{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:1,max:4294967295}),o=A.max,O=new M.default(16777216),c=new M.default(1),Z=new M.default(1e6),B=A.value,G=new M.default(B-1).div(o),T=(100-t)/100,x=O.div(G.mul(O).plus(1)).mul(T),w=Kr(c,vr(x,Z));return{isFinished:!0,payoutMultiplier:w.gte(E.targetMultiplier)?new M.default(E.targetMultiplier):new M.default(0),outputs:{randomMultiplier:w,result:A.values},randomValues:A}}}var X=z(require("big.js"));var e=(r,t)=>{if(t<0||r<0||t>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(t>r-t)t=r-t;let E=1;for(let A=1;A<=t;A++)E=E*(r-A+1)/A;return E};class ar extends D{constructor(){super("MINES")}determineGameResult({generator:r,edge:t,gameInputs:E}){if(E.minesCount<=0||E.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(E.selectedTiles.length>25-E.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let c=r.getUniqueRandomInts({min:1,max:25,count:E.minesCount}),Z=c.values.some((b)=>E.selectedTiles.includes(b)),B=E.hasCashedOut||Z,G=(100-t)/100,T=new X.default(e(25-E.minesCount,E.selectedTiles.length)).div(new X.default(e(25,E.selectedTiles.length))),w=E.hasCashedOut&&!Z?new X.default(G).div(T):new X.default(0);return{isFinished:B,payoutMultiplier:w,outputs:{result:c.values},randomValues:c}}}var gr=require("big.js");var rr;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(rr||={});var jt=[8,9,10,11,12,13,14,15,16],qt={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Jt={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Qt={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},Xt={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Ht={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},tr=new C(new Map([[1,qt],[2,Jt],[3,Qt],[4,Xt],[8,Ht]]));class kr extends D{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(t.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(t.numberOfRows<8||t.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let A=t.numberOfRows,c=tr.getMultipliers(E)[t.riskLevel][A],Z=r.getRandomIntsWithReplacement({min:0,max:1,count:t.numberOfRows}),G=Z.values.reduce((x,w)=>x+w,0),T=c[G];if(T===void 0)throw new Error(`No payout found for end position ${G}`);return{isFinished:!0,payoutMultiplier:gr.Big(T),outputs:{result:Z.values},randomValues:Z}}}var h=require("big.js");var L=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],Er=[37,...L],Ar=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],or=[[0,1],[0,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],Or=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],fr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],cr=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],xr=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Br=[0,1,2,3,37],Zr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Dr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],p;((E)=>{E.EVEN="EVEN";E.ODD="ODD"})(p||={});var U;((E)=>{E.RED="RED";E.BLACK="BLACK"})(U||={});var F;((E)=>{E.LOW="LOW";E.HIGH="HIGH"})(F||={});var P;((A)=>{A.TOP="TOP";A.MIDDLE="MIDDLE";A.BOTTOM="BOTTOM"})(P||={});var Y;((A)=>{A.FIRST="FIRST";A.SECOND="SECOND";A.THIRD="THIRD"})(Y||={});var u;((E)=>{E.AMERICAN="AMERICAN";E.EUROPEAN="EUROPEAN"})(u||={});var K=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&H(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&It(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&ht(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&bt(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&Vt(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},H=(r)=>{return L.includes(r)},It=(r)=>{if(r.length!==2)return!1;if(!r.every(H))return!1;return Ar.some(([t,E])=>t===r[0]&&E===r[1])},ht=(r)=>{if(r.length!==3)return!1;if(!r.every(H))return!1;return Or.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},bt=(r)=>{if(r.length!==4)return!1;if(!r.every(H))return!1;return cr.some(([t,E,A,o])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3])},Vt=(r)=>{if(r.length!==6)return!1;if(!r.every(H))return!1;return Zr.some(([t,E,A,o,O,c])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3]&&O===r[4]&&c===r[5])};var v=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&I(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&it(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&dt(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&Rt(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.basketBets.every((t)=>t.amount.gte(0)))throw f.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&Wt(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},I=(r)=>{return Er.includes(r)};function it(r){if(r.length!==2)return!1;if(!r.every(I))return!1;return or.some(([t,E])=>t===r[0]&&E===r[1])}var dt=(r)=>{if(r.length!==3)return!1;if(!r.every(I))return!1;return fr.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},Rt=(r)=>{if(r.length!==4)return!1;if(!r.every(I))return!1;return xr.some(([t,E,A,o])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3])},Wt=(r)=>{if(r.length!==6)return!1;if(!r.every(I))return!1;return Dr.some(([t,E,A,o,O,c])=>t===r[0]&&E===r[1]&&A===r[2]&&o===r[3]&&O===r[4]&&c===r[5])};var lr={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},sr=[3,6,9,12,15,18,21,24,27,30,33,36],er=[2,5,8,11,14,17,20,23,26,29,32,35],rt=[1,4,7,10,13,16,19,22,25,28,31,34],tt=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Et=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],At=2.7,ot=5.3;class Tr extends D{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:t}){this.validateInputs(t);let E=r.getRandomInt({min:0,max:this.maxNumber}),A=E.value,o=this.determineBetOutcomes(t,A),{payoutMultiplier:O}=this.getPayoutDetails(t,A);return{outputs:{betOutcomes:o,result:E.values},payoutMultiplier:O,isFinished:!0,randomValues:E}}getBetAmount(r){return this.calculateTotalBetAmount(this.getBetTotals(r))}getPayoutDetails(r,t){let E=this.determineBetOutcomes(r,t),A=this.getBetTotals(r),o=this.getBetTotals(E.winningBets),O=this.calculateTotalBetAmount(A),c=this.calculateTotalPayout(o);return{payoutMultiplier:O.gt(0)?c.div(O):new h.Big(0),payoutAmount:c}}determineBetOutcomes(r,t){let E={},A={};for(let o of Object.keys(r)){let O=r[o],c=this.betPredicates[o],{winning:Z,losing:B}=this.partitionBets(O,c,t);E[o]=Z,A[o]=B}return{winningBets:E,losingBets:A}}calculateTotalAmount(r){return r.reduce((t,E)=>t.plus(E.amount),new h.Big(0))}isWinningStraightBet(r,t){return r.value===t}isWinningSplitBet(r,t){return r.values.some((E)=>E===t)}isWinningStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningCornerBet(r,t){return r.values.some((E)=>E===t)}isWinningDoubleStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningColorBet(r,t){let E=r;return tt.includes(t)&&E.color==="RED"||Et.includes(t)&&E.color==="BLACK"}isWinningHalfBet(r,t){let E=r;if(t>0&&t<=18&&E.half==="LOW")return!0;if(t>18&&t<=36&&E.half==="HIGH")return!0;return!1}isWinningColumnBet(r,t){let E=r;return sr.includes(t)&&E.column==="TOP"||er.includes(t)&&E.column==="MIDDLE"||rt.includes(t)&&E.column==="BOTTOM"}isWinningDozenBet(r,t){let E=r;if(t>0&&t<=12&&E.dozen==="FIRST")return!0;if(t>12&&t<=24&&E.dozen==="SECOND")return!0;if(t>24&&t<=36&&E.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,t){let E=r;if(t===0||t===37)return!1;let A=t%2===0?"EVEN":"ODD";return E.parity===A}getBetTotals(r){let t={};for(let E of Object.keys(r))t[E]=this.calculateTotalAmount(r[E]);return t}calculateTotalBetAmount(r){return Object.values(r).reduce((t,E)=>t.plus(E),new h.Big(0))}partitionBets(r,t,E){return{winning:r.filter((A)=>t(A,E)),losing:r.filter((A)=>!t(A,E))}}calculateTotalPayout(r){return Object.entries(r).reduce((t,[E,A])=>{let O=lr[E];return t.plus(A.mul(O||0))},new h.Big(0))}}class Gr extends Tr{maxNumber=36;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){K(r)}}class Sr extends Tr{maxNumber=37;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){v(r)}isWinningBasketBet(r,t){return Br.some((E)=>E===t)}}class Nr extends D{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Gr,this.americanGame=new Sr}getBetAmount(r){switch(r.type){case"AMERICAN":return this.americanGame.getBetAmount(r.inputs);case"EUROPEAN":return this.europeanGame.getBetAmount(r.inputs);default:throw new Error("Unhandled roulette type")}}determineGameResult(r){let{gameInputs:t,...E}=r;if(r.edge===At&&t.type==="EUROPEAN"){let A=this.europeanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:o}=A.outputs;return{...A,outputs:{type:"european",betOutcomes:o,result:A.outputs.result}}}if(r.edge===ot&&t.type==="AMERICAN"){let A=this.americanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:o}=A.outputs;return{...A,outputs:{type:"american",betOutcomes:o,result:A.outputs.result}}}throw f.createValidationError(`Attempted to play ${t.type} roulette on edge ${r.edge}`)}}var mt=(r)=>{return new Nr().getBetAmount(r)};var Lt=(r)=>{if(r.type==="EUROPEAN")K(r.inputs);else v(r.inputs)};var ct=require("big.js");var $;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})($||={});var j;((O)=>{O[O.TEN=10]="TEN";O[O.TWENTY=20]="TWENTY";O[O.THIRTY=30]="THIRTY";O[O.FORTY=40]="FORTY";O[O.FIFTY=50]="FIFTY"})(j||={});var ut={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},Kt={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},vt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},nt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},at={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},Ot=new C(new Map([[1,ut],[2,Kt],[3,vt],[4,nt],[8,at]]));var ft={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class xt extends D{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(!Object.values(j).includes(t.segments))throw new Error("Invalid segments value");if(!Object.values($).includes(t.riskLevel))throw new Error("Invalid risk level");let o=Ot.getMultipliers(E)[t.riskLevel];if(o===void 0)throw new Error(`No multipliers found for risk level ${t.riskLevel}`);let O=o[t.segments];if(O===void 0)throw new Error(`No multipliers found for segment ${t.segments}`);let c=ft[t.riskLevel];if(c===void 0)throw new Error(`No patterns found for risk level ${t.riskLevel}`);let Z=c[t.segments];if(Z===void 0)throw new Error(`No patterns found for segment ${t.segments}`);let B=r.getRandomInt({min:0,max:Z.length-1}),G=Z[B.value];if(G===void 0)throw new Error(`No pattern found for segment ${t.segments} and value ${B.value}`);let T=O[G];if(T===void 0)throw new Error(`No payout found for picked segment ${G}`);return{isFinished:!0,payoutMultiplier:new ct.Big(T),outputs:{result:B.values},randomValues:B}}}
package/dist/index.d.ts CHANGED
@@ -46,7 +46,8 @@ export declare enum OrigamiGame {
46
46
  DIAMONDS = "DIAMONDS",
47
47
  PLINKO = "PLINKO",
48
48
  ROULETTE = "ROULETTE",
49
- WHEEL = "WHEEL"
49
+ WHEEL = "WHEEL",
50
+ BLACKJACK = "BLACKJACK"
50
51
  }
51
52
  export type EmptyGameOutput = {};
52
53
  export interface GetGameResultRequest<TGameInputs> {
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var _;((x)=>{x.DICE="DICE";x.MINES="MINES";x.KENO="KENO";x.LIMBO="LIMBO";x.ADVANCED_DICE="ADVANCED_DICE";x.BACCARAT="BACCARAT";x.DIAMONDS="DIAMONDS";x.PLINKO="PLINKO";x.ROULETTE="ROULETTE";x.WHEEL="WHEEL"})(_||={});class D{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}import{Big as W}from"big.js";var Mr;((t)=>t.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Mr||={});class f extends Error{static createValidationError(r){return new f("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof f}errorCode;constructor(r,t){super(t);this.errorCode=r}}var m=0,L=1e4,g=10001,pr=0.01,Ur=98,Fr=(r)=>{if(r<m)throw f.createValidationError(`Lower bound ${r} is below minimum allowed value ${m}`)},Pr=(r)=>{if(r>L)throw f.createValidationError(`Upper bound ${r} is above maximum allowed value ${L}`)},H=(r)=>{if(Fr(r.lower),Pr(r.upper),r.lower>=r.upper)throw f.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},Yr=(r,t)=>{let[E,A]=r.lower<=t.lower?[r,t]:[t,r];if(E.upper>A.lower)throw f.createValidationError("Bounds must not overlap")},zr=(r,t)=>t>=r.lower&&t<=r.upper,$r=(r)=>r.upper-r.lower+1,d=(r,t)=>t>r.lower&&t<r.upper,R=(r)=>r.upper-r.lower-1,jr;((A)=>{A.ROLL_BETWEEN="ROLL_BETWEEN";A.ROLL_OUTSIDE="ROLL_OUTSIDE";A.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(jr||={});var k=(r)=>{let E=(()=>{switch(r.mode){case"ROLL_BETWEEN":return H(r.bounds),R(r.bounds);case"ROLL_OUTSIDE":return H(r.bounds),g-$r(r.bounds);case"ROLL_BETWEEN_TWO":return H(r.firstBounds),H(r.secondBounds),Yr(r.firstBounds,r.secondBounds),R(r.firstBounds)+R(r.secondBounds)}})(),A=W(E).div(g).mul(100);if(A.lt(pr))throw f.createValidationError("Win chance too low");if(A.gt(Ur))throw f.createValidationError("Win chance too high");return A},Lt=(r)=>{k(r)};class qr extends D{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=k(E),O=r.getRandomInt({min:m,max:L}),o=O.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(E.mode){case"ROLL_BETWEEN":return d(E.bounds,o);case"ROLL_OUTSIDE":return!zr(E.bounds,o);case"ROLL_BETWEEN_TWO":return d(E.firstBounds,o)||d(E.secondBounds,o)}})()?new W(100-t).div(A):new W(0),outputs:{result:O.values},randomValues:O}}}import C from"big.js";var Jr=["Clubs","Diamonds","Hearts","Spades"],Qr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Xr;((A)=>{A.PLAYER_WIN="PLAYER_WIN";A.TIE="TIE";A.BANKER_WIN="BANKER_WIN"})(Xr||={});var Hr;((A)=>{A.PLAYER="PLAYER";A.TIE="TIE";A.BANKER="BANKER"})(Hr||={});var Ir={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:9},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},hr=(r)=>{return new C(0).add(r.bets.reduce((E,A)=>E.add(A.amount),new C(0)))};class br extends D{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(E!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(t);let A=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),O=A.values,o=O.slice(0,3),c=O.slice(3,6),Z=[],B=0;for(let S of o.slice(0,2)){let N=this.mapRandomValueToCard(S),X=this.mapRandomValueToCardValue(S);Z.push(N),B=(B+X)%10}let T=[],x=0;for(let S of c.slice(0,2)){let N=this.mapRandomValueToCard(S),X=this.mapRandomValueToCardValue(S);T.push(N),x=(x+X)%10}if(!this.isNaturalWin(B,x)){let S=this.shouldDrawThirdPlayerCard(B),N=null;if(S)N=this.mapRandomValueToCardValue(o[2]),Z.push(this.mapRandomValueToCard(o[2])),B=(B+N)%10;if(this.shouldDrawThirdBankerCard(x,N))T.push(this.mapRandomValueToCard(c[2])),x=(x+this.mapRandomValueToCardValue(c[2]))%10}let G;if(B===x)G="TIE";else G=B>x?"PLAYER_WIN":"BANKER_WIN";let w=hr(t),{betType:Q,multiplier:Cr}=Ir[G],z=new C(0);if(z=z.add(t.bets.filter((S)=>S.type===Q).reduce((S,N)=>S.add(N.amount.mul(Cr)),new C(0))),G==="TIE")z=z.add(t.bets.filter((S)=>S.type==="PLAYER"||S.type==="BANKER").reduce((S,N)=>S.add(N.amount),new C(0)));return{isFinished:!0,payoutMultiplier:w.gt(0)?z.div(w):new C(0),outputs:{playerCards:Z,playerHandValue:B,bankerCards:T,bankerHandValue:x,gameOutcome:G,result:A.values},randomValues:A}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((t)=>t.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let t=Jr[Math.floor(r/13)],E=Qr[r%13];return{suit:t,rank:E}}isNaturalWin(r,t){let E=[8,9];return E.includes(r)||E.includes(t)}mapRandomValueToCardValue(r){let t=r%13;if(t===0)return 1;if(t>=10)return 10;return t+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,t){if(t===null)return r<=5;if(r<=2)return!0;if(r===3)return t!==8;if(r===4)return[2,3,4,5,6,7].includes(t);if(r===5)return[4,5,6,7].includes(t);if(r===6)return[6,7].includes(t);return!1}}import ir from"big.js";class y{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let t=this.multipliers.get(r);if(t===void 0)throw new Error(`Multipliers for ${r} not found`);return t}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,t])=>({edge:r,multipliers:t}))}}var Vr;((c)=>{c.PAIR="PAIR";c.TWO_PAIR="TWO_PAIR";c.THREE_OF_A_KIND="THREE_OF_A_KIND";c.FULL_HOUSE="FULL_HOUSE";c.FOUR_OF_A_KIND="FOUR_OF_A_KIND";c.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Vr||={});var dr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},Rr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},Wr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},mr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},Lr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},ur=new y(new Map([[1,dr],[2,Rr],[3,Wr],[4,mr],[8,Lr]])),Kr={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class vr extends D{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:t}){let E=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),A=ur.getMultipliers(t),O=E.values,o=this.calculatePayoutMultiplier(A,O);return{isFinished:!0,payoutMultiplier:ir(o),outputs:{result:E.values},randomValues:E}}calculatePayoutMultiplier(r,t){let E=new Map;for(let o of t){let c=E.get(o)||0;E.set(o,c+1)}let A=[...E.values()].filter((o)=>o>1),O=this.classifyResult(A);return O===null?0:r[O]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[t,E]=r;if(t===void 0)return null;if(E===void 0){let A=Kr[t];if(A===void 0)throw new Error(`Unexpected single diamond repeat count: ${t}`);return A}return t===3||E===3?"FULL_HOUSE":"TWO_PAIR"}}import u from"big.js";var nr;((E)=>{E.ABOVE="ABOVE";E.BELOW="BELOW"})(nr||={});class ar extends D{constructor(){super("DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:0,max:1e4}),O=A.min,Z=A.max-O+1-1,B=E.direction==="ABOVE"?Z-E.selectedValue:E.selectedValue,T=new u(B).div(Z).mul(100);return{isFinished:!0,payoutMultiplier:(E.direction==="ABOVE"?A.value>E.selectedValue:A.value<E.selectedValue)?new u(100-t).div(T):new u(0),outputs:{result:A.values},randomValues:A}}}import tt from"big.js";import{Guard as I}from"@betorigami/guard";var l;((O)=>{O.CLASSIC="CLASSIC";O.LOW_RISK="LOW_RISK";O.MEDIUM_RISK="MEDIUM_RISK";O.HIGH_RISK="HIGH_RISK"})(l||={});var gr=[1,2,3,4,5,6,7,8,9,10],s=(r)=>{return gr.includes(r)};var kr={[1]:{CLASSIC:[0,3.96],LOW_RISK:[0.7,1.85],MEDIUM_RISK:[0.4,2.75],HIGH_RISK:[0,3.96]},[2]:{CLASSIC:[0,1.9,4.5],LOW_RISK:[0,2,3.8],MEDIUM_RISK:[0,1.8,5.1],HIGH_RISK:[0,0,17.1]},[3]:{CLASSIC:[0,1,3.1,10.4],LOW_RISK:[0,1.1,1.38,26],MEDIUM_RISK:[0,0,2.8,50],HIGH_RISK:[0,0,0,81.5]},[4]:{CLASSIC:[0,0.8,1.8,5,22.5],LOW_RISK:[0,0,2.2,7.9,90],MEDIUM_RISK:[0,0,1.7,10,100],HIGH_RISK:[0,0,0,10,259]},[5]:{CLASSIC:[0,0.25,1.4,4.1,16.5,36],LOW_RISK:[0,0,1.5,4.2,13,300],MEDIUM_RISK:[0,0,1.4,4,14,390],HIGH_RISK:[0,0,0,4.5,48,450]},[6]:{CLASSIC:[0,0,1,3.68,7,16.5,40],LOW_RISK:[0,0,1.1,2,6.2,100,700],MEDIUM_RISK:[0,0,0,3,9,180,710],HIGH_RISK:[0,0,0,0,11,350,710]},[7]:{CLASSIC:[0,0,0.47,3,4.5,14,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,15,225,700],MEDIUM_RISK:[0,0,0,2,7,30,400,800],HIGH_RISK:[0,0,0,0,7,90,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,13,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,5.5,39,100,800],MEDIUM_RISK:[0,0,0,2,4,11,67,400,900],HIGH_RISK:[0,0,0,0,5,20,270,600,900]},[9]:{CLASSIC:[0,0,0,1.55,3,8,15,44,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,5,15,100,500,1000],HIGH_RISK:[0,0,0,0,4,11,56,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,4,7,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,8,13,63,500,800,1000]}},lr={[1]:{CLASSIC:[0,3.92],LOW_RISK:[0.7,1.82],MEDIUM_RISK:[0.4,2.72],HIGH_RISK:[0,3.92]},[2]:{CLASSIC:[0,1.9,4.32],LOW_RISK:[0,2,3.65],MEDIUM_RISK:[0,1.8,5],HIGH_RISK:[0,0,17]},[3]:{CLASSIC:[0,1,3,10.7],LOW_RISK:[0,1.1,1.3,26.2],MEDIUM_RISK:[0,0,2.7,50.3],HIGH_RISK:[0,0,0,80.7]},[4]:{CLASSIC:[0,0.8,1.8,4.75,22.5],LOW_RISK:[0,0,2.2,7.65,90],MEDIUM_RISK:[0,0,1.7,9.8,100],HIGH_RISK:[0,0,0,9.75,259]},[5]:{CLASSIC:[0,0.2,1.4,4.25,16.4,36],LOW_RISK:[0,0,1.5,4.1,12.9,300],MEDIUM_RISK:[0,0,1.4,3.9,13.9,390],HIGH_RISK:[0,0,0,4.5,47,450]},[6]:{CLASSIC:[0,0,1,3.6,7,17,40],LOW_RISK:[0,0,1.1,2,5.8,100,700],MEDIUM_RISK:[0,0,0,3,8.6,180,710],HIGH_RISK:[0,0,0,0,10.6,350,710]},[7]:{CLASSIC:[0,0,0.5,3,4.1,13.7,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,13.5,225,700],MEDIUM_RISK:[0,0,0,2,6.9,29.2,400,800],HIGH_RISK:[0,0,0,0,6.9,89.1,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,12.2,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,4.8,38,100,800],MEDIUM_RISK:[0,0,0,2,4,10.4,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.8,270,600,900]},[9]:{CLASSIC:[0,0,0,1.5,3,8.1,15,45,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.1,7.4,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,4.6,15.2,100,500,1000],HIGH_RISK:[0,0,0,0,4,10.7,55.4,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.5,7.6,16,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.6,3.7,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.8,6.8,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,7.8,12.8,63,500,800,1000]}},sr={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.7,1.78],MEDIUM_RISK:[0.4,2.68],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,2,3.48],MEDIUM_RISK:[0,1.8,4.8],HIGH_RISK:[0,0,16.8]},[3]:{CLASSIC:[0,1,3,9.9],LOW_RISK:[0,1.1,1.2,26.5],MEDIUM_RISK:[0,0,2.65,50],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.7,5,23],LOW_RISK:[0,0,2.1,7.95,90],MEDIUM_RISK:[0,0,1.7,9.55,100],HIGH_RISK:[0,0,0,9.5,259]},[5]:{CLASSIC:[0,0.2,1.4,4.1,16.6,36],LOW_RISK:[0,0,1.5,4,12.7,300],MEDIUM_RISK:[0,0,1.4,3.8,13.7,390],HIGH_RISK:[0,0,0,4.4,46.9,450]},[6]:{CLASSIC:[0,0,1,3.6,6.6,16.5,40],LOW_RISK:[0,0,1.1,1.9,5.9,100,700],MEDIUM_RISK:[0,0,0,2.9,8.7,180,710],HIGH_RISK:[0,0,0,0,10.8,342,710]},[7]:{CLASSIC:[0,0,0.5,2.9,4.3,13.5,30.4,60],LOW_RISK:[0,0,1.1,1.6,3.1,14.8,225,700],MEDIUM_RISK:[0,0,0,2,6.7,29,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.2,3.8,12.7,21,54,70],LOW_RISK:[0,0,1.1,1.5,1.8,5.2,38,100,800],MEDIUM_RISK:[0,0,0,2,3.8,10.8,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.5,265,600,900]},[9]:{CLASSIC:[0,0,0,1.5,2.9,8.2,15,43,60,85],LOW_RISK:[0,0,1.1,1.3,1.6,2.1,7.7,49,250,1000],MEDIUM_RISK:[0,0,0,2,2.4,4.7,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.9,10.8,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.2,8,16.7,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.5,2.9,12,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.6,6.6,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.4,7.9,12.9,62,500,800,1000]}},er={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.68,1.84],MEDIUM_RISK:[0.38,2.74],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,1.96,3.75],MEDIUM_RISK:[0,1.77,5],HIGH_RISK:[0,0,16.82]},[3]:{CLASSIC:[0,1,3.05,9.35],LOW_RISK:[0,1.07,1.37,25.7],MEDIUM_RISK:[0,0,2.74,49],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.72,4.95,22.3],LOW_RISK:[0,0,2.15,7.86,87],MEDIUM_RISK:[0,0,1.67,9.7,100],HIGH_RISK:[0,0,0,9.7,256]},[5]:{CLASSIC:[0,0.24,1.38,4,16.3,35.5],LOW_RISK:[0,0,1.48,4.1,12.43,300],MEDIUM_RISK:[0,0,1.35,3.96,13.8,389],HIGH_RISK:[0,0,0,4.4,47,444]},[6]:{CLASSIC:[0,0,1,3.57,6.8,16.2,37],LOW_RISK:[0,0,1.06,1.96,6.16,99,700],MEDIUM_RISK:[0,0,0,2.9,8.9,178,709],HIGH_RISK:[0,0,0,0,10.4,347,709]},[7]:{CLASSIC:[0,0,0.45,2.95,4.44,13.85,30,60],LOW_RISK:[0,0,1.07,1.57,3.47,14.57,225,700],MEDIUM_RISK:[0,0,0,1.95,6.8,29.8,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.15,3.9,12.9,21.9,55,70],LOW_RISK:[0,0,1.08,1.45,1.98,5.48,38.8,100,800],MEDIUM_RISK:[0,0,0,1.95,3.96,10.6,66.9,396,896],HIGH_RISK:[0,0,0,0,4.9,19.2,269,599,896]},[9]:{CLASSIC:[0,0,0,1.5,2.95,7.96,14.96,44,60,85],LOW_RISK:[0,0,1.05,1.29,1.69,2.49,7.49,49,250,1000],MEDIUM_RISK:[0,0,0,1.95,2.47,4.9,14.9,99,500,1000],HIGH_RISK:[0,0,0,0,3.96,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.37,2.2,4.45,7.7,16.7,50,80,100],LOW_RISK:[0,0,1.08,1.18,1.28,1.76,3.4,12.9,50,250,1000],MEDIUM_RISK:[0,0,0,1.57,1.95,3.96,6.9,25.5,100,500,1000],HIGH_RISK:[0,0,0,0,3.43,7.9,12.5,60,500,800,1000]}},rt={[1]:{CLASSIC:[0,3.68],LOW_RISK:[0.7,1.58],MEDIUM_RISK:[0.4,2.48],HIGH_RISK:[0,3.68]},[2]:{CLASSIC:[0,1.72,4.48],LOW_RISK:[0,1.9,3.28],MEDIUM_RISK:[0,1.7,4.62],HIGH_RISK:[0,0,15.95]},[3]:{CLASSIC:[0,0.9,2.95,9.9],LOW_RISK:[0,1,1.2,26],MEDIUM_RISK:[0,0,2.29,50],HIGH_RISK:[0,0,0,75.7]},[4]:{CLASSIC:[0,0.8,1.6,4.4,21],LOW_RISK:[0,0,2,7.5,86],MEDIUM_RISK:[0,0,1.5,9.5,98],HIGH_RISK:[0,0,0,9,246]},[5]:{CLASSIC:[0,0.2,1.2,4.2,16.3,37],LOW_RISK:[0,0,1.4,3.8,12,300],MEDIUM_RISK:[0,0,1.3,3.5,14,385],HIGH_RISK:[0,0,0,4,45,450]},[6]:{CLASSIC:[0,0,1,3.3,6.2,15,40],LOW_RISK:[0,0,1.1,1.7,4.9,99,700],MEDIUM_RISK:[0,0,0,2.6,8.5,177,705],HIGH_RISK:[0,0,0,0,10,327,710]},[7]:{CLASSIC:[0,0,0.4,2.8,4.2,14.5,30,60],LOW_RISK:[0,0,1.1,1.4,3,14,210,700],MEDIUM_RISK:[0,0,0,1.8,6.4,29,400,800],HIGH_RISK:[0,0,0,0,6.1,85,400,800]},[8]:{CLASSIC:[0,0,0,2,3.7,13,20,50,70],LOW_RISK:[0,0,1.1,1.4,1.6,4.6,35,90,800],MEDIUM_RISK:[0,0,0,1.9,3.5,10.5,65,400,900],HIGH_RISK:[0,0,0,0,4.5,18,265,600,900]},[9]:{CLASSIC:[0,0,0,1.4,2.6,9,11.5,40,60,85],LOW_RISK:[0,0,1,1.3,1.5,2,7,45,250,1000],MEDIUM_RISK:[0,0,0,2,2.1,4,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.5,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.3,2,4.4,8,16.7,50,80,100],LOW_RISK:[0,0,1,1.2,1.25,1.4,2,10,50,250,1000],MEDIUM_RISK:[0,0,0,1.5,1.9,3.5,6.2,26,100,500,1000],HIGH_RISK:[0,0,0,0,3,8,14,57,500,800,1000]}},e=new y(new Map([[1,kr],[2,lr],[3,sr],[4,er],[8,rt]]));class Et extends D{constructor(){super("KENO")}determineGameResult({generator:r,edge:t,gameInputs:E}){I.againstEmptyArray(E.selectedNumbers,()=>f.createValidationError("No numbers selected")),I.against(E.selectedNumbers.length>10,()=>f.createValidationError("Maximum of 10 numbers can be selected"));for(let G of E.selectedNumbers)I.againstNonInteger(G,()=>f.createValidationError("Only integers can be selected")),I.against(G<0||G>39,()=>f.createValidationError("Invalid number selected"));let A=r.getUniqueRandomInts({min:0,max:39,count:10}),O=E.selectedNumbers.filter((G)=>A.values.includes(G)),o=E.selectedNumbers.length;if(!s(o))throw new Error(`Invalid tile count: ${o}`);let T=e.getMultipliers(t)[o][E.riskLevel][O.length];if(T===void 0)throw new Error(`No multiplier found for matching tile count ${O.length}`);return{isFinished:!0,payoutMultiplier:new tt(T),outputs:{result:A.values},randomValues:A}}}import M from"big.js";var rr=(r,t)=>{return r.gt(t)?r:t};var tr=(r,t)=>{return r.lt(t)?r:t};class At extends D{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:1,max:4294967295}),O=A.max,o=new M(16777216),c=new M(1),Z=new M(1e6),B=A.value,T=new M(B-1).div(O),x=(100-t)/100,G=o.div(T.mul(o).plus(1)).mul(x),w=rr(c,tr(G,Z));return{isFinished:!0,payoutMultiplier:w.gte(E.targetMultiplier)?new M(E.targetMultiplier):new M(0),outputs:{randomMultiplier:w,result:A.values},randomValues:A}}}import h from"big.js";var K=(r,t)=>{if(t<0||r<0||t>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(t>r-t)t=r-t;let E=1;for(let A=1;A<=t;A++)E=E*(r-A+1)/A;return E};class ot extends D{constructor(){super("MINES")}determineGameResult({generator:r,edge:t,gameInputs:E}){if(E.minesCount<=0||E.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(E.selectedTiles.length>25-E.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let c=r.getUniqueRandomInts({min:1,max:25,count:E.minesCount}),Z=c.values.some((Q)=>E.selectedTiles.includes(Q)),B=E.hasCashedOut||Z,T=(100-t)/100,x=new h(K(25-E.minesCount,E.selectedTiles.length)).div(new h(K(25,E.selectedTiles.length))),w=E.hasCashedOut&&!Z?new h(T).div(x):new h(0);return{isFinished:B,payoutMultiplier:w,outputs:{result:c.values},randomValues:c}}}import{Big as Zt}from"big.js";var Er;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(Er||={});var XE=[8,9,10,11,12,13,14,15,16],Ot={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},ft={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},ct={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},xt={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Bt={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},Ar=new y(new Map([[1,Ot],[2,ft],[3,ct],[4,xt],[8,Bt]]));class Dt extends D{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(t.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(t.numberOfRows<8||t.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let A=t.numberOfRows,c=Ar.getMultipliers(E)[t.riskLevel][A],Z=r.getRandomIntsWithReplacement({min:0,max:1,count:t.numberOfRows}),T=Z.values.reduce((G,w)=>G+w,0),x=c[T];if(x===void 0)throw new Error(`No payout found for end position ${T}`);return{isFinished:!0,payoutMultiplier:Zt(x),outputs:{result:Z.values},randomValues:Z}}}import{Big as V}from"big.js";var v=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],or=[37,...v],Or=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],fr=[[0,1],[0,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],cr=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],xr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],Br=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Zr=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Dr=[0,1,2,3,37],Tr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Gr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],p;((E)=>{E.EVEN="EVEN";E.ODD="ODD"})(p||={});var U;((E)=>{E.RED="RED";E.BLACK="BLACK"})(U||={});var F;((E)=>{E.LOW="LOW";E.HIGH="HIGH"})(F||={});var P;((A)=>{A.TOP="TOP";A.MIDDLE="MIDDLE";A.BOTTOM="BOTTOM"})(P||={});var Y;((A)=>{A.FIRST="FIRST";A.SECOND="SECOND";A.THIRD="THIRD"})(Y||={});var n;((E)=>{E.AMERICAN="AMERICAN";E.EUROPEAN="EUROPEAN"})(n||={});var b=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&$(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&Tt(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&Gt(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&St(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&Nt(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},$=(r)=>{return v.includes(r)},Tt=(r)=>{if(r.length!==2)return!1;if(!r.every($))return!1;return Or.some(([t,E])=>t===r[0]&&E===r[1])},Gt=(r)=>{if(r.length!==3)return!1;if(!r.every($))return!1;return cr.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},St=(r)=>{if(r.length!==4)return!1;if(!r.every($))return!1;return Br.some(([t,E,A,O])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3])},Nt=(r)=>{if(r.length!==6)return!1;if(!r.every($))return!1;return Tr.some(([t,E,A,O,o,c])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3]&&o===r[4]&&c===r[5])};var i=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&j(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&_t(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&wt(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&yt(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.basketBets.every((t)=>t.amount.gte(0)))throw f.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&Ct(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},j=(r)=>{return or.includes(r)};function _t(r){if(r.length!==2)return!1;if(!r.every(j))return!1;return fr.some(([t,E])=>t===r[0]&&E===r[1])}var wt=(r)=>{if(r.length!==3)return!1;if(!r.every(j))return!1;return xr.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},yt=(r)=>{if(r.length!==4)return!1;if(!r.every(j))return!1;return Zr.some(([t,E,A,O])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3])},Ct=(r)=>{if(r.length!==6)return!1;if(!r.every(j))return!1;return Gr.some(([t,E,A,O,o,c])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3]&&o===r[4]&&c===r[5])};var Mt={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},pt=[3,6,9,12,15,18,21,24,27,30,33,36],Ut=[2,5,8,11,14,17,20,23,26,29,32,35],Ft=[1,4,7,10,13,16,19,22,25,28,31,34],Pt=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Yt=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],zt=2.7,$t=5.3;class a extends D{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:t}){this.validateInputs(t);let E=r.getRandomInt({min:0,max:this.maxNumber}),A=E.value,O=this.determineBetOutcomes(t,A),{payoutMultiplier:o}=this.getPayoutDetails(t,A);return{outputs:{betOutcomes:O,result:E.values},payoutMultiplier:o,isFinished:!0,randomValues:E}}getBetAmount(r){return this.calculateTotalBetAmount(this.getBetTotals(r))}getPayoutDetails(r,t){let E=this.determineBetOutcomes(r,t),A=this.getBetTotals(r),O=this.getBetTotals(E.winningBets),o=this.calculateTotalBetAmount(A),c=this.calculateTotalPayout(O);return{payoutMultiplier:o.gt(0)?c.div(o):new V(0),payoutAmount:c}}determineBetOutcomes(r,t){let E={},A={};for(let O of Object.keys(r)){let o=r[O],c=this.betPredicates[O],{winning:Z,losing:B}=this.partitionBets(o,c,t);E[O]=Z,A[O]=B}return{winningBets:E,losingBets:A}}calculateTotalAmount(r){return r.reduce((t,E)=>t.plus(E.amount),new V(0))}isWinningStraightBet(r,t){return r.value===t}isWinningSplitBet(r,t){return r.values.some((E)=>E===t)}isWinningStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningCornerBet(r,t){return r.values.some((E)=>E===t)}isWinningDoubleStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningColorBet(r,t){let E=r;return Pt.includes(t)&&E.color==="RED"||Yt.includes(t)&&E.color==="BLACK"}isWinningHalfBet(r,t){let E=r;if(t>0&&t<=18&&E.half==="LOW")return!0;if(t>18&&t<=36&&E.half==="HIGH")return!0;return!1}isWinningColumnBet(r,t){let E=r;return pt.includes(t)&&E.column==="TOP"||Ut.includes(t)&&E.column==="MIDDLE"||Ft.includes(t)&&E.column==="BOTTOM"}isWinningDozenBet(r,t){let E=r;if(t>0&&t<=12&&E.dozen==="FIRST")return!0;if(t>12&&t<=24&&E.dozen==="SECOND")return!0;if(t>24&&t<=36&&E.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,t){let E=r;if(t===0||t===37)return!1;let A=t%2===0?"EVEN":"ODD";return E.parity===A}getBetTotals(r){let t={};for(let E of Object.keys(r))t[E]=this.calculateTotalAmount(r[E]);return t}calculateTotalBetAmount(r){return Object.values(r).reduce((t,E)=>t.plus(E),new V(0))}partitionBets(r,t,E){return{winning:r.filter((A)=>t(A,E)),losing:r.filter((A)=>!t(A,E))}}calculateTotalPayout(r){return Object.entries(r).reduce((t,[E,A])=>{let o=Mt[E];return t.plus(A.mul(o||0))},new V(0))}}class Sr extends a{maxNumber=36;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){b(r)}}class Nr extends a{maxNumber=37;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){i(r)}isWinningBasketBet(r,t){return Dr.some((E)=>E===t)}}class _r extends D{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Sr,this.americanGame=new Nr}getBetAmount(r){switch(r.type){case"AMERICAN":return this.americanGame.getBetAmount(r.inputs);case"EUROPEAN":return this.europeanGame.getBetAmount(r.inputs);default:throw new Error("Unhandled roulette type")}}determineGameResult(r){let{gameInputs:t,...E}=r;if(r.edge===zt&&t.type==="EUROPEAN"){let A=this.europeanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:O}=A.outputs;return{...A,outputs:{type:"european",betOutcomes:O,result:A.outputs.result}}}if(r.edge===$t&&t.type==="AMERICAN"){let A=this.americanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:O}=A.outputs;return{...A,outputs:{type:"american",betOutcomes:O,result:A.outputs.result}}}throw f.createValidationError(`Attempted to play ${t.type} roulette on edge ${r.edge}`)}}var t2=(r)=>{return new _r().getBetAmount(r)};var f2=(r)=>{if(r.type==="EUROPEAN")b(r.inputs);else i(r.inputs)};import{Big as Ht}from"big.js";var q;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(q||={});var J;((o)=>{o[o.TEN=10]="TEN";o[o.TWENTY=20]="TWENTY";o[o.THIRTY=30]="THIRTY";o[o.FORTY=40]="FORTY";o[o.FIFTY=50]="FIFTY"})(J||={});var jt={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},qt={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},Jt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},Qt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},Xt={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},wr=new y(new Map([[1,jt],[2,qt],[3,Jt],[4,Qt],[8,Xt]]));var yr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class It extends D{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(!Object.values(J).includes(t.segments))throw new Error("Invalid segments value");if(!Object.values(q).includes(t.riskLevel))throw new Error("Invalid risk level");let O=wr.getMultipliers(E)[t.riskLevel];if(O===void 0)throw new Error(`No multipliers found for risk level ${t.riskLevel}`);let o=O[t.segments];if(o===void 0)throw new Error(`No multipliers found for segment ${t.segments}`);let c=yr[t.riskLevel];if(c===void 0)throw new Error(`No patterns found for risk level ${t.riskLevel}`);let Z=c[t.segments];if(Z===void 0)throw new Error(`No patterns found for segment ${t.segments}`);let B=r.getRandomInt({min:0,max:Z.length-1}),T=Z[B.value];if(T===void 0)throw new Error(`No pattern found for segment ${t.segments} and value ${B.value}`);let x=o[T];if(x===void 0)throw new Error(`No payout found for picked segment ${T}`);return{isFinished:!0,payoutMultiplier:new Ht(x),outputs:{result:B.values},randomValues:B}}}export{f2 as validateRouletteGameInputs,Lt as validateAdvancedDiceInputs,kr as rtp99Multipliers,lr as rtp98Multipliers,sr as rtp97Multipliers,er as rtp96Multipliers,rt as rtp92Multipliers,Ar as plinkoMultipliers,e as kenoMultipliers,s as isTileCount,ur as diamondsMultipliers,t2 as calculateRouletteBetAmount,hr as calculateBaccaratBetAmount,J as WheelSegments,q as WheelRiskLevel,It as Wheel,Jr as VALID_SUITS,Qr as VALID_RANKS,cr as VALID_EUROPEAN_STREETS,v as VALID_EUROPEAN_STRAIGHTS,Or as VALID_EUROPEAN_SPLITS,Tr as VALID_EUROPEAN_DOUBLE_STREETS,Br as VALID_EUROPEAN_CORNERS,xr as VALID_AMERICAN_STREETS,or as VALID_AMERICAN_STRAIGHTS,fr as VALID_AMERICAN_SPLITS,Gr as VALID_AMERICAN_DOUBLE_STREETS,Zr as VALID_AMERICAN_CORNERS,pt as TOP_COLUMN,gr as TILE_COUNTS,n as RouletteType,_r as Roulette,jr as RollType,Pt as RED_NUMBERS,m as RANDOM_MIN_VALUE,L as RANDOM_MAX_VALUE,Er as PlinkoRiskLevel,Dt as Plinko,p as Parity,XE as PLINKO_ROW_COUNTS,Mt as PAYOUT_MULTIPLIERS,_ as OrigamiGame,ot as Mines,pr as MIN_WIN_CHANCE,Ut as MIDDLE_COLUMN,Ur as MAX_WIN_CHANCE,At as Limbo,l as KenoRiskLevel,Et as Keno,F as Half,Mr as GameErrorCode,f as GameError,D as Game,Sr as EuropeanRoulette,zt as EUROPEAN_HOUSE_EDGE,g as EFFECTIVE_RANGE,Y as Dozen,nr as DiceDirection,ar as Dice,Vr as DiamondsResultType,vr as Diamonds,P as Column,U as Color,Xr as BaccaratOutcome,Hr as BaccaratBetType,br as Baccarat,Ft as BOTTOM_COLUMN,Yt as BLACK_NUMBERS,Nr as AmericanRoulette,qr as AdvancedDice,$t as AMERICAN_HOUSE_EDGE,Dr as AMERICAN_BASKET};
1
+ var _;((x)=>{x.DICE="DICE";x.MINES="MINES";x.KENO="KENO";x.LIMBO="LIMBO";x.ADVANCED_DICE="ADVANCED_DICE";x.BACCARAT="BACCARAT";x.DIAMONDS="DIAMONDS";x.PLINKO="PLINKO";x.ROULETTE="ROULETTE";x.WHEEL="WHEEL";x.BLACKJACK="BLACKJACK"})(_||={});class D{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}import{Big as W}from"big.js";var Mr;((t)=>t.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Mr||={});class f extends Error{static createValidationError(r){return new f("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof f}errorCode;constructor(r,t){super(t);this.errorCode=r}}var m=0,L=1e4,g=10001,pr=0.01,Ur=98,Fr=(r)=>{if(r<m)throw f.createValidationError(`Lower bound ${r} is below minimum allowed value ${m}`)},Pr=(r)=>{if(r>L)throw f.createValidationError(`Upper bound ${r} is above maximum allowed value ${L}`)},H=(r)=>{if(Fr(r.lower),Pr(r.upper),r.lower>=r.upper)throw f.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},Yr=(r,t)=>{let[E,A]=r.lower<=t.lower?[r,t]:[t,r];if(E.upper>A.lower)throw f.createValidationError("Bounds must not overlap")},zr=(r,t)=>t>=r.lower&&t<=r.upper,$r=(r)=>r.upper-r.lower+1,d=(r,t)=>t>r.lower&&t<r.upper,R=(r)=>r.upper-r.lower-1,jr;((A)=>{A.ROLL_BETWEEN="ROLL_BETWEEN";A.ROLL_OUTSIDE="ROLL_OUTSIDE";A.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(jr||={});var k=(r)=>{let E=(()=>{switch(r.mode){case"ROLL_BETWEEN":return H(r.bounds),R(r.bounds);case"ROLL_OUTSIDE":return H(r.bounds),g-$r(r.bounds);case"ROLL_BETWEEN_TWO":return H(r.firstBounds),H(r.secondBounds),Yr(r.firstBounds,r.secondBounds),R(r.firstBounds)+R(r.secondBounds)}})(),A=W(E).div(g).mul(100);if(A.lt(pr))throw f.createValidationError("Win chance too low");if(A.gt(Ur))throw f.createValidationError("Win chance too high");return A},Lt=(r)=>{k(r)};class qr extends D{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=k(E),O=r.getRandomInt({min:m,max:L}),o=O.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(E.mode){case"ROLL_BETWEEN":return d(E.bounds,o);case"ROLL_OUTSIDE":return!zr(E.bounds,o);case"ROLL_BETWEEN_TWO":return d(E.firstBounds,o)||d(E.secondBounds,o)}})()?new W(100-t).div(A):new W(0),outputs:{result:O.values},randomValues:O}}}import y from"big.js";var Jr=["Clubs","Diamonds","Hearts","Spades"],Qr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Xr;((A)=>{A.PLAYER_WIN="PLAYER_WIN";A.TIE="TIE";A.BANKER_WIN="BANKER_WIN"})(Xr||={});var Hr;((A)=>{A.PLAYER="PLAYER";A.TIE="TIE";A.BANKER="BANKER"})(Hr||={});var Ir={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:9},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},hr=(r)=>{return new y(0).add(r.bets.reduce((E,A)=>E.add(A.amount),new y(0)))};class br extends D{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(E!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(t);let A=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),O=A.values,o=O.slice(0,3),c=O.slice(3,6),Z=[],B=0;for(let S of o.slice(0,2)){let N=this.mapRandomValueToCard(S),X=this.mapRandomValueToCardValue(S);Z.push(N),B=(B+X)%10}let G=[],T=0;for(let S of c.slice(0,2)){let N=this.mapRandomValueToCard(S),X=this.mapRandomValueToCardValue(S);G.push(N),T=(T+X)%10}if(!this.isNaturalWin(B,T)){let S=this.shouldDrawThirdPlayerCard(B),N=null;if(S)N=this.mapRandomValueToCardValue(o[2]),Z.push(this.mapRandomValueToCard(o[2])),B=(B+N)%10;if(this.shouldDrawThirdBankerCard(T,N))G.push(this.mapRandomValueToCard(c[2])),T=(T+this.mapRandomValueToCardValue(c[2]))%10}let x;if(B===T)x="TIE";else x=B>T?"PLAYER_WIN":"BANKER_WIN";let w=hr(t),{betType:Q,multiplier:yr}=Ir[x],z=new y(0);if(z=z.add(t.bets.filter((S)=>S.type===Q).reduce((S,N)=>S.add(N.amount.mul(yr)),new y(0))),x==="TIE")z=z.add(t.bets.filter((S)=>S.type==="PLAYER"||S.type==="BANKER").reduce((S,N)=>S.add(N.amount),new y(0)));return{isFinished:!0,payoutMultiplier:w.gt(0)?z.div(w):new y(0),outputs:{playerCards:Z,playerHandValue:B,bankerCards:G,bankerHandValue:T,gameOutcome:x,result:A.values},randomValues:A}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((t)=>t.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let t=Jr[Math.floor(r/13)],E=Qr[r%13];return{suit:t,rank:E}}isNaturalWin(r,t){let E=[8,9];return E.includes(r)||E.includes(t)}mapRandomValueToCardValue(r){let t=r%13;if(t===0)return 1;if(t>=10)return 10;return t+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,t){if(t===null)return r<=5;if(r<=2)return!0;if(r===3)return t!==8;if(r===4)return[2,3,4,5,6,7].includes(t);if(r===5)return[4,5,6,7].includes(t);if(r===6)return[6,7].includes(t);return!1}}import Vr from"big.js";class C{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let t=this.multipliers.get(r);if(t===void 0)throw new Error(`Multipliers for ${r} not found`);return t}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,t])=>({edge:r,multipliers:t}))}}var ir;((c)=>{c.PAIR="PAIR";c.TWO_PAIR="TWO_PAIR";c.THREE_OF_A_KIND="THREE_OF_A_KIND";c.FULL_HOUSE="FULL_HOUSE";c.FOUR_OF_A_KIND="FOUR_OF_A_KIND";c.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(ir||={});var dr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},Rr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},Wr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},mr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},Lr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},ur=new C(new Map([[1,dr],[2,Rr],[3,Wr],[4,mr],[8,Lr]])),Kr={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class vr extends D{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:t}){let E=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),A=ur.getMultipliers(t),O=E.values,o=this.calculatePayoutMultiplier(A,O);return{isFinished:!0,payoutMultiplier:Vr(o),outputs:{result:E.values},randomValues:E}}calculatePayoutMultiplier(r,t){let E=new Map;for(let o of t){let c=E.get(o)||0;E.set(o,c+1)}let A=[...E.values()].filter((o)=>o>1),O=this.classifyResult(A);return O===null?0:r[O]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[t,E]=r;if(t===void 0)return null;if(E===void 0){let A=Kr[t];if(A===void 0)throw new Error(`Unexpected single diamond repeat count: ${t}`);return A}return t===3||E===3?"FULL_HOUSE":"TWO_PAIR"}}import u from"big.js";var nr;((E)=>{E.ABOVE="ABOVE";E.BELOW="BELOW"})(nr||={});class ar extends D{constructor(){super("DICE")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:0,max:1e4}),O=A.min,Z=A.max-O+1-1,B=E.direction==="ABOVE"?Z-E.selectedValue:E.selectedValue,G=new u(B).div(Z).mul(100);return{isFinished:!0,payoutMultiplier:(E.direction==="ABOVE"?A.value>E.selectedValue:A.value<E.selectedValue)?new u(100-t).div(G):new u(0),outputs:{result:A.values},randomValues:A}}}import tt from"big.js";import{Guard as I}from"@betorigami/guard";var l;((O)=>{O.CLASSIC="CLASSIC";O.LOW_RISK="LOW_RISK";O.MEDIUM_RISK="MEDIUM_RISK";O.HIGH_RISK="HIGH_RISK"})(l||={});var gr=[1,2,3,4,5,6,7,8,9,10],s=(r)=>{return gr.includes(r)};var kr={[1]:{CLASSIC:[0,3.96],LOW_RISK:[0.7,1.85],MEDIUM_RISK:[0.4,2.75],HIGH_RISK:[0,3.96]},[2]:{CLASSIC:[0,1.9,4.5],LOW_RISK:[0,2,3.8],MEDIUM_RISK:[0,1.8,5.1],HIGH_RISK:[0,0,17.1]},[3]:{CLASSIC:[0,1,3.1,10.4],LOW_RISK:[0,1.1,1.38,26],MEDIUM_RISK:[0,0,2.8,50],HIGH_RISK:[0,0,0,81.5]},[4]:{CLASSIC:[0,0.8,1.8,5,22.5],LOW_RISK:[0,0,2.2,7.9,90],MEDIUM_RISK:[0,0,1.7,10,100],HIGH_RISK:[0,0,0,10,259]},[5]:{CLASSIC:[0,0.25,1.4,4.1,16.5,36],LOW_RISK:[0,0,1.5,4.2,13,300],MEDIUM_RISK:[0,0,1.4,4,14,390],HIGH_RISK:[0,0,0,4.5,48,450]},[6]:{CLASSIC:[0,0,1,3.68,7,16.5,40],LOW_RISK:[0,0,1.1,2,6.2,100,700],MEDIUM_RISK:[0,0,0,3,9,180,710],HIGH_RISK:[0,0,0,0,11,350,710]},[7]:{CLASSIC:[0,0,0.47,3,4.5,14,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,15,225,700],MEDIUM_RISK:[0,0,0,2,7,30,400,800],HIGH_RISK:[0,0,0,0,7,90,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,13,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,5.5,39,100,800],MEDIUM_RISK:[0,0,0,2,4,11,67,400,900],HIGH_RISK:[0,0,0,0,5,20,270,600,900]},[9]:{CLASSIC:[0,0,0,1.55,3,8,15,44,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,5,15,100,500,1000],HIGH_RISK:[0,0,0,0,4,11,56,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,4,7,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,8,13,63,500,800,1000]}},lr={[1]:{CLASSIC:[0,3.92],LOW_RISK:[0.7,1.82],MEDIUM_RISK:[0.4,2.72],HIGH_RISK:[0,3.92]},[2]:{CLASSIC:[0,1.9,4.32],LOW_RISK:[0,2,3.65],MEDIUM_RISK:[0,1.8,5],HIGH_RISK:[0,0,17]},[3]:{CLASSIC:[0,1,3,10.7],LOW_RISK:[0,1.1,1.3,26.2],MEDIUM_RISK:[0,0,2.7,50.3],HIGH_RISK:[0,0,0,80.7]},[4]:{CLASSIC:[0,0.8,1.8,4.75,22.5],LOW_RISK:[0,0,2.2,7.65,90],MEDIUM_RISK:[0,0,1.7,9.8,100],HIGH_RISK:[0,0,0,9.75,259]},[5]:{CLASSIC:[0,0.2,1.4,4.25,16.4,36],LOW_RISK:[0,0,1.5,4.1,12.9,300],MEDIUM_RISK:[0,0,1.4,3.9,13.9,390],HIGH_RISK:[0,0,0,4.5,47,450]},[6]:{CLASSIC:[0,0,1,3.6,7,17,40],LOW_RISK:[0,0,1.1,2,5.8,100,700],MEDIUM_RISK:[0,0,0,3,8.6,180,710],HIGH_RISK:[0,0,0,0,10.6,350,710]},[7]:{CLASSIC:[0,0,0.5,3,4.1,13.7,31,60],LOW_RISK:[0,0,1.1,1.6,3.5,13.5,225,700],MEDIUM_RISK:[0,0,0,2,6.9,29.2,400,800],HIGH_RISK:[0,0,0,0,6.9,89.1,400,800]},[8]:{CLASSIC:[0,0,0,2.2,4,12.2,22,55,70],LOW_RISK:[0,0,1.1,1.5,2,4.8,38,100,800],MEDIUM_RISK:[0,0,0,2,4,10.4,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.8,270,600,900]},[9]:{CLASSIC:[0,0,0,1.5,3,8.1,15,45,60,85],LOW_RISK:[0,0,1.1,1.3,1.7,2.1,7.4,50,250,1000],MEDIUM_RISK:[0,0,0,2,2.5,4.6,15.2,100,500,1000],HIGH_RISK:[0,0,0,0,4,10.7,55.4,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.5,7.6,16,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.6,3.7,13,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.8,6.8,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.5,7.8,12.8,63,500,800,1000]}},sr={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.7,1.78],MEDIUM_RISK:[0.4,2.68],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,2,3.48],MEDIUM_RISK:[0,1.8,4.8],HIGH_RISK:[0,0,16.8]},[3]:{CLASSIC:[0,1,3,9.9],LOW_RISK:[0,1.1,1.2,26.5],MEDIUM_RISK:[0,0,2.65,50],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.7,5,23],LOW_RISK:[0,0,2.1,7.95,90],MEDIUM_RISK:[0,0,1.7,9.55,100],HIGH_RISK:[0,0,0,9.5,259]},[5]:{CLASSIC:[0,0.2,1.4,4.1,16.6,36],LOW_RISK:[0,0,1.5,4,12.7,300],MEDIUM_RISK:[0,0,1.4,3.8,13.7,390],HIGH_RISK:[0,0,0,4.4,46.9,450]},[6]:{CLASSIC:[0,0,1,3.6,6.6,16.5,40],LOW_RISK:[0,0,1.1,1.9,5.9,100,700],MEDIUM_RISK:[0,0,0,2.9,8.7,180,710],HIGH_RISK:[0,0,0,0,10.8,342,710]},[7]:{CLASSIC:[0,0,0.5,2.9,4.3,13.5,30.4,60],LOW_RISK:[0,0,1.1,1.6,3.1,14.8,225,700],MEDIUM_RISK:[0,0,0,2,6.7,29,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.2,3.8,12.7,21,54,70],LOW_RISK:[0,0,1.1,1.5,1.8,5.2,38,100,800],MEDIUM_RISK:[0,0,0,2,3.8,10.8,66,400,900],HIGH_RISK:[0,0,0,0,4.9,19.5,265,600,900]},[9]:{CLASSIC:[0,0,0,1.5,2.9,8.2,15,43,60,85],LOW_RISK:[0,0,1.1,1.3,1.6,2.1,7.7,49,250,1000],MEDIUM_RISK:[0,0,0,2,2.4,4.7,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.9,10.8,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.4,2.2,4.2,8,16.7,50,80,100],LOW_RISK:[0,0,1.1,1.2,1.3,1.5,2.9,12,50,250,1000],MEDIUM_RISK:[0,0,0,1.6,2,3.6,6.6,26,100,500,1000],HIGH_RISK:[0,0,0,0,3.4,7.9,12.9,62,500,800,1000]}},er={[1]:{CLASSIC:[0,3.88],LOW_RISK:[0.68,1.84],MEDIUM_RISK:[0.38,2.74],HIGH_RISK:[0,3.88]},[2]:{CLASSIC:[0,1.85,4.48],LOW_RISK:[0,1.96,3.75],MEDIUM_RISK:[0,1.77,5],HIGH_RISK:[0,0,16.82]},[3]:{CLASSIC:[0,1,3.05,9.35],LOW_RISK:[0,1.07,1.37,25.7],MEDIUM_RISK:[0,0,2.74,49],HIGH_RISK:[0,0,0,79.9]},[4]:{CLASSIC:[0,0.8,1.72,4.95,22.3],LOW_RISK:[0,0,2.15,7.86,87],MEDIUM_RISK:[0,0,1.67,9.7,100],HIGH_RISK:[0,0,0,9.7,256]},[5]:{CLASSIC:[0,0.24,1.38,4,16.3,35.5],LOW_RISK:[0,0,1.48,4.1,12.43,300],MEDIUM_RISK:[0,0,1.35,3.96,13.8,389],HIGH_RISK:[0,0,0,4.4,47,444]},[6]:{CLASSIC:[0,0,1,3.57,6.8,16.2,37],LOW_RISK:[0,0,1.06,1.96,6.16,99,700],MEDIUM_RISK:[0,0,0,2.9,8.9,178,709],HIGH_RISK:[0,0,0,0,10.4,347,709]},[7]:{CLASSIC:[0,0,0.45,2.95,4.44,13.85,30,60],LOW_RISK:[0,0,1.07,1.57,3.47,14.57,225,700],MEDIUM_RISK:[0,0,0,1.95,6.8,29.8,400,800],HIGH_RISK:[0,0,0,0,6.8,88.2,400,800]},[8]:{CLASSIC:[0,0,0,2.15,3.9,12.9,21.9,55,70],LOW_RISK:[0,0,1.08,1.45,1.98,5.48,38.8,100,800],MEDIUM_RISK:[0,0,0,1.95,3.96,10.6,66.9,396,896],HIGH_RISK:[0,0,0,0,4.9,19.2,269,599,896]},[9]:{CLASSIC:[0,0,0,1.5,2.95,7.96,14.96,44,60,85],LOW_RISK:[0,0,1.05,1.29,1.69,2.49,7.49,49,250,1000],MEDIUM_RISK:[0,0,0,1.95,2.47,4.9,14.9,99,500,1000],HIGH_RISK:[0,0,0,0,3.96,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.37,2.2,4.45,7.7,16.7,50,80,100],LOW_RISK:[0,0,1.08,1.18,1.28,1.76,3.4,12.9,50,250,1000],MEDIUM_RISK:[0,0,0,1.57,1.95,3.96,6.9,25.5,100,500,1000],HIGH_RISK:[0,0,0,0,3.43,7.9,12.5,60,500,800,1000]}},rt={[1]:{CLASSIC:[0,3.68],LOW_RISK:[0.7,1.58],MEDIUM_RISK:[0.4,2.48],HIGH_RISK:[0,3.68]},[2]:{CLASSIC:[0,1.72,4.48],LOW_RISK:[0,1.9,3.28],MEDIUM_RISK:[0,1.7,4.62],HIGH_RISK:[0,0,15.95]},[3]:{CLASSIC:[0,0.9,2.95,9.9],LOW_RISK:[0,1,1.2,26],MEDIUM_RISK:[0,0,2.29,50],HIGH_RISK:[0,0,0,75.7]},[4]:{CLASSIC:[0,0.8,1.6,4.4,21],LOW_RISK:[0,0,2,7.5,86],MEDIUM_RISK:[0,0,1.5,9.5,98],HIGH_RISK:[0,0,0,9,246]},[5]:{CLASSIC:[0,0.2,1.2,4.2,16.3,37],LOW_RISK:[0,0,1.4,3.8,12,300],MEDIUM_RISK:[0,0,1.3,3.5,14,385],HIGH_RISK:[0,0,0,4,45,450]},[6]:{CLASSIC:[0,0,1,3.3,6.2,15,40],LOW_RISK:[0,0,1.1,1.7,4.9,99,700],MEDIUM_RISK:[0,0,0,2.6,8.5,177,705],HIGH_RISK:[0,0,0,0,10,327,710]},[7]:{CLASSIC:[0,0,0.4,2.8,4.2,14.5,30,60],LOW_RISK:[0,0,1.1,1.4,3,14,210,700],MEDIUM_RISK:[0,0,0,1.8,6.4,29,400,800],HIGH_RISK:[0,0,0,0,6.1,85,400,800]},[8]:{CLASSIC:[0,0,0,2,3.7,13,20,50,70],LOW_RISK:[0,0,1.1,1.4,1.6,4.6,35,90,800],MEDIUM_RISK:[0,0,0,1.9,3.5,10.5,65,400,900],HIGH_RISK:[0,0,0,0,4.5,18,265,600,900]},[9]:{CLASSIC:[0,0,0,1.4,2.6,9,11.5,40,60,85],LOW_RISK:[0,0,1,1.3,1.5,2,7,45,250,1000],MEDIUM_RISK:[0,0,0,2,2.1,4,15,98,500,1000],HIGH_RISK:[0,0,0,0,3.5,10.5,55,500,800,1000]},[10]:{CLASSIC:[0,0,0,1.3,2,4.4,8,16.7,50,80,100],LOW_RISK:[0,0,1,1.2,1.25,1.4,2,10,50,250,1000],MEDIUM_RISK:[0,0,0,1.5,1.9,3.5,6.2,26,100,500,1000],HIGH_RISK:[0,0,0,0,3,8,14,57,500,800,1000]}},e=new C(new Map([[1,kr],[2,lr],[3,sr],[4,er],[8,rt]]));class Et extends D{constructor(){super("KENO")}determineGameResult({generator:r,edge:t,gameInputs:E}){I.againstEmptyArray(E.selectedNumbers,()=>f.createValidationError("No numbers selected")),I.against(E.selectedNumbers.length>10,()=>f.createValidationError("Maximum of 10 numbers can be selected"));for(let x of E.selectedNumbers)I.againstNonInteger(x,()=>f.createValidationError("Only integers can be selected")),I.against(x<0||x>39,()=>f.createValidationError("Invalid number selected"));let A=r.getUniqueRandomInts({min:0,max:39,count:10}),O=E.selectedNumbers.filter((x)=>A.values.includes(x)),o=E.selectedNumbers.length;if(!s(o))throw new Error(`Invalid tile count: ${o}`);let G=e.getMultipliers(t)[o][E.riskLevel][O.length];if(G===void 0)throw new Error(`No multiplier found for matching tile count ${O.length}`);return{isFinished:!0,payoutMultiplier:new tt(G),outputs:{result:A.values},randomValues:A}}}import M from"big.js";var rr=(r,t)=>{return r.gt(t)?r:t};var tr=(r,t)=>{return r.lt(t)?r:t};class At extends D{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:t,gameInputs:E}){let A=r.getRandomInt({min:1,max:4294967295}),O=A.max,o=new M(16777216),c=new M(1),Z=new M(1e6),B=A.value,G=new M(B-1).div(O),T=(100-t)/100,x=o.div(G.mul(o).plus(1)).mul(T),w=rr(c,tr(x,Z));return{isFinished:!0,payoutMultiplier:w.gte(E.targetMultiplier)?new M(E.targetMultiplier):new M(0),outputs:{randomMultiplier:w,result:A.values},randomValues:A}}}import h from"big.js";var K=(r,t)=>{if(t<0||r<0||t>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(t>r-t)t=r-t;let E=1;for(let A=1;A<=t;A++)E=E*(r-A+1)/A;return E};class ot extends D{constructor(){super("MINES")}determineGameResult({generator:r,edge:t,gameInputs:E}){if(E.minesCount<=0||E.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(E.selectedTiles.length>25-E.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let c=r.getUniqueRandomInts({min:1,max:25,count:E.minesCount}),Z=c.values.some((Q)=>E.selectedTiles.includes(Q)),B=E.hasCashedOut||Z,G=(100-t)/100,T=new h(K(25-E.minesCount,E.selectedTiles.length)).div(new h(K(25,E.selectedTiles.length))),w=E.hasCashedOut&&!Z?new h(G).div(T):new h(0);return{isFinished:B,payoutMultiplier:w,outputs:{result:c.values},randomValues:c}}}import{Big as Zt}from"big.js";var Er;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(Er||={});var XE=[8,9,10,11,12,13,14,15,16],Ot={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},ft={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},ct={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},xt={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Bt={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},Ar=new C(new Map([[1,Ot],[2,ft],[3,ct],[4,xt],[8,Bt]]));class Dt extends D{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(t.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(t.numberOfRows<8||t.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let A=t.numberOfRows,c=Ar.getMultipliers(E)[t.riskLevel][A],Z=r.getRandomIntsWithReplacement({min:0,max:1,count:t.numberOfRows}),G=Z.values.reduce((x,w)=>x+w,0),T=c[G];if(T===void 0)throw new Error(`No payout found for end position ${G}`);return{isFinished:!0,payoutMultiplier:Zt(T),outputs:{result:Z.values},randomValues:Z}}}import{Big as i}from"big.js";var v=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],or=[37,...v],Or=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],fr=[[0,1],[0,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],cr=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],xr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],Br=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Zr=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Dr=[0,1,2,3,37],Tr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Gr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],p;((E)=>{E.EVEN="EVEN";E.ODD="ODD"})(p||={});var U;((E)=>{E.RED="RED";E.BLACK="BLACK"})(U||={});var F;((E)=>{E.LOW="LOW";E.HIGH="HIGH"})(F||={});var P;((A)=>{A.TOP="TOP";A.MIDDLE="MIDDLE";A.BOTTOM="BOTTOM"})(P||={});var Y;((A)=>{A.FIRST="FIRST";A.SECOND="SECOND";A.THIRD="THIRD"})(Y||={});var n;((E)=>{E.AMERICAN="AMERICAN";E.EUROPEAN="EUROPEAN"})(n||={});var b=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&$(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&Tt(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&Gt(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&St(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&Nt(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},$=(r)=>{return v.includes(r)},Tt=(r)=>{if(r.length!==2)return!1;if(!r.every($))return!1;return Or.some(([t,E])=>t===r[0]&&E===r[1])},Gt=(r)=>{if(r.length!==3)return!1;if(!r.every($))return!1;return cr.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},St=(r)=>{if(r.length!==4)return!1;if(!r.every($))return!1;return Br.some(([t,E,A,O])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3])},Nt=(r)=>{if(r.length!==6)return!1;if(!r.every($))return!1;return Tr.some(([t,E,A,O,o,c])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3]&&o===r[4]&&c===r[5])};var V=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw f.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((t)=>t.amount.gte(0)&&j(t.value)))throw f.createValidationError("Invalid straight bet.");if(!r.splitBets.every((t)=>t.amount.gte(0)&&_t(t.values)))throw f.createValidationError("Invalid split bet.");if(!r.streetBets.every((t)=>t.amount.gte(0)&&wt(t.values)))throw f.createValidationError("Invalid street bet.");if(!r.cornerBets.every((t)=>t.amount.gte(0)&&Ct(t.values)))throw f.createValidationError("Invalid corner bet.");if(!r.basketBets.every((t)=>t.amount.gte(0)))throw f.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((t)=>t.amount.gte(0)&&yt(t.values)))throw f.createValidationError("Invalid double street bet.");if(!r.parityBets.every((t)=>t.amount.gte(0)&&Object.values(p).includes(t.parity)))throw f.createValidationError("Invalid parity bet.");if(!r.colorBets.every((t)=>t.amount.gte(0)&&Object.values(U).includes(t.color)))throw f.createValidationError("Invalid color bet.");if(!r.halfBets.every((t)=>t.amount.gte(0)&&Object.values(F).includes(t.half)))throw f.createValidationError("Invalid half bet.");if(!r.columnBets.every((t)=>t.amount.gte(0)&&Object.values(P).includes(t.column)))throw f.createValidationError("Invalid column bet.");if(!r.dozenBets.every((t)=>t.amount.gte(0)&&Object.values(Y).includes(t.dozen)))throw f.createValidationError("Invalid dozen bet.")},j=(r)=>{return or.includes(r)};function _t(r){if(r.length!==2)return!1;if(!r.every(j))return!1;return fr.some(([t,E])=>t===r[0]&&E===r[1])}var wt=(r)=>{if(r.length!==3)return!1;if(!r.every(j))return!1;return xr.some(([t,E,A])=>t===r[0]&&E===r[1]&&A===r[2])},Ct=(r)=>{if(r.length!==4)return!1;if(!r.every(j))return!1;return Zr.some(([t,E,A,O])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3])},yt=(r)=>{if(r.length!==6)return!1;if(!r.every(j))return!1;return Gr.some(([t,E,A,O,o,c])=>t===r[0]&&E===r[1]&&A===r[2]&&O===r[3]&&o===r[4]&&c===r[5])};var Mt={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},pt=[3,6,9,12,15,18,21,24,27,30,33,36],Ut=[2,5,8,11,14,17,20,23,26,29,32,35],Ft=[1,4,7,10,13,16,19,22,25,28,31,34],Pt=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Yt=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],zt=2.7,$t=5.3;class a extends D{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:t}){this.validateInputs(t);let E=r.getRandomInt({min:0,max:this.maxNumber}),A=E.value,O=this.determineBetOutcomes(t,A),{payoutMultiplier:o}=this.getPayoutDetails(t,A);return{outputs:{betOutcomes:O,result:E.values},payoutMultiplier:o,isFinished:!0,randomValues:E}}getBetAmount(r){return this.calculateTotalBetAmount(this.getBetTotals(r))}getPayoutDetails(r,t){let E=this.determineBetOutcomes(r,t),A=this.getBetTotals(r),O=this.getBetTotals(E.winningBets),o=this.calculateTotalBetAmount(A),c=this.calculateTotalPayout(O);return{payoutMultiplier:o.gt(0)?c.div(o):new i(0),payoutAmount:c}}determineBetOutcomes(r,t){let E={},A={};for(let O of Object.keys(r)){let o=r[O],c=this.betPredicates[O],{winning:Z,losing:B}=this.partitionBets(o,c,t);E[O]=Z,A[O]=B}return{winningBets:E,losingBets:A}}calculateTotalAmount(r){return r.reduce((t,E)=>t.plus(E.amount),new i(0))}isWinningStraightBet(r,t){return r.value===t}isWinningSplitBet(r,t){return r.values.some((E)=>E===t)}isWinningStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningCornerBet(r,t){return r.values.some((E)=>E===t)}isWinningDoubleStreetBet(r,t){return r.values.some((E)=>E===t)}isWinningColorBet(r,t){let E=r;return Pt.includes(t)&&E.color==="RED"||Yt.includes(t)&&E.color==="BLACK"}isWinningHalfBet(r,t){let E=r;if(t>0&&t<=18&&E.half==="LOW")return!0;if(t>18&&t<=36&&E.half==="HIGH")return!0;return!1}isWinningColumnBet(r,t){let E=r;return pt.includes(t)&&E.column==="TOP"||Ut.includes(t)&&E.column==="MIDDLE"||Ft.includes(t)&&E.column==="BOTTOM"}isWinningDozenBet(r,t){let E=r;if(t>0&&t<=12&&E.dozen==="FIRST")return!0;if(t>12&&t<=24&&E.dozen==="SECOND")return!0;if(t>24&&t<=36&&E.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,t){let E=r;if(t===0||t===37)return!1;let A=t%2===0?"EVEN":"ODD";return E.parity===A}getBetTotals(r){let t={};for(let E of Object.keys(r))t[E]=this.calculateTotalAmount(r[E]);return t}calculateTotalBetAmount(r){return Object.values(r).reduce((t,E)=>t.plus(E),new i(0))}partitionBets(r,t,E){return{winning:r.filter((A)=>t(A,E)),losing:r.filter((A)=>!t(A,E))}}calculateTotalPayout(r){return Object.entries(r).reduce((t,[E,A])=>{let o=Mt[E];return t.plus(A.mul(o||0))},new i(0))}}class Sr extends a{maxNumber=36;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){b(r)}}class Nr extends a{maxNumber=37;betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};validateInputs(r){V(r)}isWinningBasketBet(r,t){return Dr.some((E)=>E===t)}}class _r extends D{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Sr,this.americanGame=new Nr}getBetAmount(r){switch(r.type){case"AMERICAN":return this.americanGame.getBetAmount(r.inputs);case"EUROPEAN":return this.europeanGame.getBetAmount(r.inputs);default:throw new Error("Unhandled roulette type")}}determineGameResult(r){let{gameInputs:t,...E}=r;if(r.edge===zt&&t.type==="EUROPEAN"){let A=this.europeanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:O}=A.outputs;return{...A,outputs:{type:"european",betOutcomes:O,result:A.outputs.result}}}if(r.edge===$t&&t.type==="AMERICAN"){let A=this.americanGame.determineGameResult({...E,gameInputs:t.inputs}),{betOutcomes:O}=A.outputs;return{...A,outputs:{type:"american",betOutcomes:O,result:A.outputs.result}}}throw f.createValidationError(`Attempted to play ${t.type} roulette on edge ${r.edge}`)}}var t2=(r)=>{return new _r().getBetAmount(r)};var f2=(r)=>{if(r.type==="EUROPEAN")b(r.inputs);else V(r.inputs)};import{Big as Ht}from"big.js";var q;((A)=>{A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(q||={});var J;((o)=>{o[o.TEN=10]="TEN";o[o.TWENTY=20]="TWENTY";o[o.THIRTY=30]="THIRTY";o[o.FORTY=40]="FORTY";o[o.FIFTY=50]="FIFTY"})(J||={});var jt={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},qt={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},Jt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},Qt={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},Xt={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},wr=new C(new Map([[1,jt],[2,qt],[3,Jt],[4,Qt],[8,Xt]]));var Cr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class It extends D{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:t,edge:E}){if(!Object.values(J).includes(t.segments))throw new Error("Invalid segments value");if(!Object.values(q).includes(t.riskLevel))throw new Error("Invalid risk level");let O=wr.getMultipliers(E)[t.riskLevel];if(O===void 0)throw new Error(`No multipliers found for risk level ${t.riskLevel}`);let o=O[t.segments];if(o===void 0)throw new Error(`No multipliers found for segment ${t.segments}`);let c=Cr[t.riskLevel];if(c===void 0)throw new Error(`No patterns found for risk level ${t.riskLevel}`);let Z=c[t.segments];if(Z===void 0)throw new Error(`No patterns found for segment ${t.segments}`);let B=r.getRandomInt({min:0,max:Z.length-1}),G=Z[B.value];if(G===void 0)throw new Error(`No pattern found for segment ${t.segments} and value ${B.value}`);let T=o[G];if(T===void 0)throw new Error(`No payout found for picked segment ${G}`);return{isFinished:!0,payoutMultiplier:new Ht(T),outputs:{result:B.values},randomValues:B}}}export{f2 as validateRouletteGameInputs,Lt as validateAdvancedDiceInputs,kr as rtp99Multipliers,lr as rtp98Multipliers,sr as rtp97Multipliers,er as rtp96Multipliers,rt as rtp92Multipliers,Ar as plinkoMultipliers,e as kenoMultipliers,s as isTileCount,ur as diamondsMultipliers,t2 as calculateRouletteBetAmount,hr as calculateBaccaratBetAmount,J as WheelSegments,q as WheelRiskLevel,It as Wheel,Jr as VALID_SUITS,Qr as VALID_RANKS,cr as VALID_EUROPEAN_STREETS,v as VALID_EUROPEAN_STRAIGHTS,Or as VALID_EUROPEAN_SPLITS,Tr as VALID_EUROPEAN_DOUBLE_STREETS,Br as VALID_EUROPEAN_CORNERS,xr as VALID_AMERICAN_STREETS,or as VALID_AMERICAN_STRAIGHTS,fr as VALID_AMERICAN_SPLITS,Gr as VALID_AMERICAN_DOUBLE_STREETS,Zr as VALID_AMERICAN_CORNERS,pt as TOP_COLUMN,gr as TILE_COUNTS,n as RouletteType,_r as Roulette,jr as RollType,Pt as RED_NUMBERS,m as RANDOM_MIN_VALUE,L as RANDOM_MAX_VALUE,Er as PlinkoRiskLevel,Dt as Plinko,p as Parity,XE as PLINKO_ROW_COUNTS,Mt as PAYOUT_MULTIPLIERS,_ as OrigamiGame,ot as Mines,pr as MIN_WIN_CHANCE,Ut as MIDDLE_COLUMN,Ur as MAX_WIN_CHANCE,At as Limbo,l as KenoRiskLevel,Et as Keno,F as Half,Mr as GameErrorCode,f as GameError,D as Game,Sr as EuropeanRoulette,zt as EUROPEAN_HOUSE_EDGE,g as EFFECTIVE_RANGE,Y as Dozen,nr as DiceDirection,ar as Dice,ir as DiamondsResultType,vr as Diamonds,P as Column,U as Color,Xr as BaccaratOutcome,Hr as BaccaratBetType,br as Baccarat,Ft as BOTTOM_COLUMN,Yt as BLACK_NUMBERS,Nr as AmericanRoulette,qr as AdvancedDice,$t as AMERICAN_HOUSE_EDGE,Dr as AMERICAN_BASKET};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@betorigami/game-calculations",
3
- "version": "4.0.5",
3
+ "version": "4.0.7",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -36,7 +36,7 @@
36
36
  "access": "public"
37
37
  },
38
38
  "dependencies": {
39
- "@betorigami/guard": "^2.0.0",
39
+ "@betorigami/guard": "^2.0.5",
40
40
  "big.js": "^7.0.1"
41
41
  }
42
42
  }