shufflecom-calculations 6.12.1 → 6.13.0
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/lib/games/stonks/constants.d.ts +1 -1
- package/lib/games/stonks/constants.js +2 -2
- package/lib/games/stonks/stonks-rules.d.ts +6 -5
- package/lib/games/stonks/stonks-rules.js +19 -17
- package/lib/games/stonks/stonks-rules.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/games/stonks/constants.ts +1 -1
- package/src/games/stonks/stonks-rules.spec.ts +56 -49
- package/src/games/stonks/stonks-rules.ts +27 -24
|
@@ -14,4 +14,4 @@ export declare const STONKS_ROUND_TICK_COUNT: number;
|
|
|
14
14
|
export declare const STONKS_MAX_TICK_HISTORY_MS: number;
|
|
15
15
|
export declare const STONKS_CHECKPOINT_INTERVAL_TICKS = 500;
|
|
16
16
|
export declare const STONKS_PRICE_BAR_INTERVAL_TICKS: number;
|
|
17
|
-
export declare const
|
|
17
|
+
export declare const STONKS_PAYOUT_FEE_RATE: BigNumber;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.STONKS_PAYOUT_FEE_RATE = exports.STONKS_PRICE_BAR_INTERVAL_TICKS = exports.STONKS_CHECKPOINT_INTERVAL_TICKS = exports.STONKS_MAX_TICK_HISTORY_MS = exports.STONKS_ROUND_TICK_COUNT = exports.STONKS_ROUND_DURATION_MS = exports.STONKS_MAX_STALE_CLIENT_TICKS = exports.STONKS_SET_TICK_RETRY_DELAY_MS = exports.STONKS_TICK_DURATION_MS = exports.STONKS_PRICE_DECIMAL_PLACES = exports.STONKS_VOLATILITY = exports.STONKS_START_PRICE = exports.STONKS_MAX_LEVERAGE = exports.STONKS_MIN_LEVERAGE = exports.STONKS_INTERNAL_PRICE_DECIMAL_PLACES = exports.STONKS_MIN_TAKE_PROFIT_MULTIPLIER = void 0;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
8
|
exports.STONKS_MIN_TAKE_PROFIT_MULTIPLIER = (0, bignumber_js_1.default)(1.05);
|
|
9
9
|
exports.STONKS_INTERNAL_PRICE_DECIMAL_PLACES = 10;
|
|
@@ -20,5 +20,5 @@ exports.STONKS_ROUND_TICK_COUNT = exports.STONKS_ROUND_DURATION_MS / exports.STO
|
|
|
20
20
|
exports.STONKS_MAX_TICK_HISTORY_MS = 48 * 60 * 60 * 1000;
|
|
21
21
|
exports.STONKS_CHECKPOINT_INTERVAL_TICKS = 500;
|
|
22
22
|
exports.STONKS_PRICE_BAR_INTERVAL_TICKS = 5000 / exports.STONKS_TICK_DURATION_MS;
|
|
23
|
-
exports.
|
|
23
|
+
exports.STONKS_PAYOUT_FEE_RATE = (0, bignumber_js_1.default)(0.02);
|
|
24
24
|
//# sourceMappingURL=constants.js.map
|
|
@@ -24,7 +24,6 @@ export interface StonksTerminalBetState extends StonksOpenBetState {
|
|
|
24
24
|
readonly terminalTick: number;
|
|
25
25
|
readonly terminalPrice: BigNumber;
|
|
26
26
|
readonly multiplier: BigNumber;
|
|
27
|
-
readonly grossPayout: BigNumber;
|
|
28
27
|
readonly netPayout: BigNumber;
|
|
29
28
|
}
|
|
30
29
|
export type StonksSettlementReason = {
|
|
@@ -59,12 +58,14 @@ export declare class StonksRules {
|
|
|
59
58
|
static tickAtOrAfter(startedAtMs: number, atMs: number): number;
|
|
60
59
|
static tickBefore(startedAtMs: number, atMs: number): number;
|
|
61
60
|
static tickStartTime(startedAtMs: number, tick: number): Date;
|
|
62
|
-
static
|
|
61
|
+
static hasReachedTakeProfit(bet: Pick<StonksOpenBetState, 'leverage' | 'entryPrice' | 'direction'>, price: BigNumber, takeProfitMultiplier: BigNumber): boolean;
|
|
63
62
|
static hasReachedBust(direction: StonksDirection, price: BigNumber, bustPrice: BigNumber): boolean;
|
|
64
63
|
static evaluateTriggers(bet: StonksOpenBetState, tickPrice: BigNumber, liveMaxPayoutCap: BigNumber): StonksTriggerOutcome;
|
|
65
|
-
static multiplierAtPrice(bet: StonksOpenBetState, price: BigNumber): BigNumber;
|
|
64
|
+
static multiplierAtPrice(bet: Pick<StonksOpenBetState, 'leverage' | 'entryPrice' | 'direction'>, price: BigNumber): BigNumber;
|
|
66
65
|
static grossPayoutAtPrice(bet: StonksOpenBetState, price: BigNumber): BigNumber;
|
|
67
|
-
static
|
|
66
|
+
static netPayoutAtPrice(bet: StonksOpenBetState, price: BigNumber): BigNumber;
|
|
67
|
+
static netPayoutForReason(bet: StonksOpenBetState, reason: StonksSettlementReason, price: BigNumber): BigNumber;
|
|
68
68
|
static multiplierForReason(bet: StonksOpenBetState, reason: StonksSettlementReason, price: BigNumber): BigNumber;
|
|
69
|
-
static
|
|
69
|
+
static netOfFee(gross: BigNumber): BigNumber;
|
|
70
|
+
static grossOfFee(net: BigNumber): BigNumber;
|
|
70
71
|
}
|
|
@@ -31,7 +31,7 @@ class StonksRules {
|
|
|
31
31
|
}
|
|
32
32
|
static impliedPriceForMultiplier(bet, targetMultiplier) {
|
|
33
33
|
const directionSign = bet.direction === StonksDirection.UP ? 1 : -1;
|
|
34
|
-
const multiplierDelta = targetMultiplier.minus(1);
|
|
34
|
+
const multiplierDelta = StonksRules.grossOfFee(targetMultiplier).minus(1);
|
|
35
35
|
const priceChange = (0, bignumber_js_1.default)(directionSign).multipliedBy(multiplierDelta).dividedBy(bet.leverage);
|
|
36
36
|
return bet.entryPrice.multipliedBy((0, bignumber_js_1.default)(1).plus(priceChange));
|
|
37
37
|
}
|
|
@@ -64,8 +64,8 @@ class StonksRules {
|
|
|
64
64
|
static tickStartTime(startedAtMs, tick) {
|
|
65
65
|
return new Date(startedAtMs + tick * constants_1.STONKS_TICK_DURATION_MS);
|
|
66
66
|
}
|
|
67
|
-
static
|
|
68
|
-
return
|
|
67
|
+
static hasReachedTakeProfit(bet, price, takeProfitMultiplier) {
|
|
68
|
+
return StonksRules.multiplierAtPrice(bet, price).isGreaterThanOrEqualTo(takeProfitMultiplier);
|
|
69
69
|
}
|
|
70
70
|
static hasReachedBust(direction, price, bustPrice) {
|
|
71
71
|
return direction === StonksDirection.UP ? price.isLessThanOrEqualTo(bustPrice) : price.isGreaterThanOrEqualTo(bustPrice);
|
|
@@ -74,13 +74,13 @@ class StonksRules {
|
|
|
74
74
|
const hitBust = StonksRules.hasReachedBust(bet.direction, tickPrice, bet.bustPrice);
|
|
75
75
|
if (bet.takeProfitMultiplier != null) {
|
|
76
76
|
const takeProfitMultiplier = bet.takeProfitMultiplier;
|
|
77
|
-
const hitTakeProfit = StonksRules.
|
|
77
|
+
const hitTakeProfit = StonksRules.hasReachedTakeProfit(bet, tickPrice, takeProfitMultiplier);
|
|
78
78
|
if (hitTakeProfit && hitBust) {
|
|
79
79
|
throw new Error('StonksRules.evaluateTriggers: take profit and liquidation both fired');
|
|
80
80
|
}
|
|
81
81
|
if (hitTakeProfit) {
|
|
82
82
|
const reason = { kind: StonksBetTerminalReason.TAKE_PROFIT, takeProfitMultiplier };
|
|
83
|
-
if (StonksRules.
|
|
83
|
+
if (StonksRules.netPayoutForReason(bet, reason, tickPrice).isGreaterThan(liveMaxPayoutCap)) {
|
|
84
84
|
return { fired: true, reason: { kind: StonksBetTerminalReason.MAX_PAYOUT, appliedCap: liveMaxPayoutCap } };
|
|
85
85
|
}
|
|
86
86
|
return { fired: true, reason };
|
|
@@ -89,7 +89,7 @@ class StonksRules {
|
|
|
89
89
|
if (hitBust) {
|
|
90
90
|
return { fired: true, reason: { kind: StonksBetTerminalReason.LIQUIDATION } };
|
|
91
91
|
}
|
|
92
|
-
if (StonksRules.
|
|
92
|
+
if (StonksRules.netPayoutAtPrice(bet, tickPrice).isGreaterThanOrEqualTo(liveMaxPayoutCap)) {
|
|
93
93
|
return { fired: true, reason: { kind: StonksBetTerminalReason.MAX_PAYOUT, appliedCap: liveMaxPayoutCap } };
|
|
94
94
|
}
|
|
95
95
|
return { fired: false };
|
|
@@ -98,15 +98,18 @@ class StonksRules {
|
|
|
98
98
|
const directionSign = bet.direction === StonksDirection.UP ? 1 : -1;
|
|
99
99
|
const percentagePriceChange = price.minus(bet.entryPrice).dividedBy(bet.entryPrice);
|
|
100
100
|
const leveragedPriceChange = (0, bignumber_js_1.default)(directionSign).multipliedBy(bet.leverage).multipliedBy(percentagePriceChange);
|
|
101
|
-
const
|
|
102
|
-
return bignumber_js_1.default.maximum(0,
|
|
101
|
+
const grossMultiplier = (0, bignumber_js_1.default)(1).plus(leveragedPriceChange);
|
|
102
|
+
return StonksRules.netOfFee(bignumber_js_1.default.maximum(0, grossMultiplier));
|
|
103
103
|
}
|
|
104
104
|
static grossPayoutAtPrice(bet, price) {
|
|
105
105
|
const position = StonksRules.position(bet.amount, bet.leverage, bet.direction);
|
|
106
106
|
const pnl = position.multipliedBy(price.minus(bet.entryPrice)).dividedBy(bet.entryPrice);
|
|
107
107
|
return bignumber_js_1.default.maximum(0, bet.amount.plus(pnl));
|
|
108
108
|
}
|
|
109
|
-
static
|
|
109
|
+
static netPayoutAtPrice(bet, price) {
|
|
110
|
+
return StonksRules.netOfFee(StonksRules.grossPayoutAtPrice(bet, price));
|
|
111
|
+
}
|
|
112
|
+
static netPayoutForReason(bet, reason, price) {
|
|
110
113
|
switch (reason.kind) {
|
|
111
114
|
case StonksBetTerminalReason.TAKE_PROFIT:
|
|
112
115
|
return (0, calculate_payout_1.calculatePayoutBN)(bet.amount, reason.takeProfitMultiplier);
|
|
@@ -116,10 +119,10 @@ class StonksRules {
|
|
|
116
119
|
return reason.appliedCap;
|
|
117
120
|
case StonksBetTerminalReason.CASHOUT:
|
|
118
121
|
case StonksBetTerminalReason.ROUND_END:
|
|
119
|
-
return StonksRules.
|
|
122
|
+
return StonksRules.netPayoutAtPrice(bet, price);
|
|
120
123
|
default:
|
|
121
124
|
reason;
|
|
122
|
-
throw new Error(`StonksRules.
|
|
125
|
+
throw new Error(`StonksRules.netPayoutForReason: unhandled reason`);
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
128
|
static multiplierForReason(bet, reason, price) {
|
|
@@ -128,12 +131,11 @@ class StonksRules {
|
|
|
128
131
|
}
|
|
129
132
|
return StonksRules.multiplierAtPrice(bet, price);
|
|
130
133
|
}
|
|
131
|
-
static
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return amount.plus(profit.multipliedBy((0, bignumber_js_1.default)(1).minus(constants_1.STONKS_PROFIT_FEE_RATE)));
|
|
134
|
+
static netOfFee(gross) {
|
|
135
|
+
return gross.multipliedBy((0, bignumber_js_1.default)(1).minus(constants_1.STONKS_PAYOUT_FEE_RATE));
|
|
136
|
+
}
|
|
137
|
+
static grossOfFee(net) {
|
|
138
|
+
return net.dividedBy((0, bignumber_js_1.default)(1).minus(constants_1.STONKS_PAYOUT_FEE_RATE));
|
|
137
139
|
}
|
|
138
140
|
}
|
|
139
141
|
exports.StonksRules = StonksRules;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stonks-rules.js","sourceRoot":"","sources":["../../../src/games/stonks/stonks-rules.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,mEAAiE;AACjE,2CAQqB;AAErB,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,gCAAa,CAAA;AACf,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AAED,IAAY,uBAMX;AAND,WAAY,uBAAuB;IACjC,8CAAmB,CAAA;IACnB,sDAA2B,CAAA;IAC3B,sDAA2B,CAAA;IAC3B,oDAAyB,CAAA;IACzB,kDAAuB,CAAA;AACzB,CAAC,EANW,uBAAuB,uCAAvB,uBAAuB,QAMlC;
|
|
1
|
+
{"version":3,"file":"stonks-rules.js","sourceRoot":"","sources":["../../../src/games/stonks/stonks-rules.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,mEAAiE;AACjE,2CAQqB;AAErB,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,gCAAa,CAAA;AACf,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AAED,IAAY,uBAMX;AAND,WAAY,uBAAuB;IACjC,8CAAmB,CAAA;IACnB,sDAA2B,CAAA;IAC3B,sDAA2B,CAAA;IAC3B,oDAAyB,CAAA;IACzB,kDAAuB,CAAA;AACzB,CAAC,EANW,uBAAuB,uCAAvB,uBAAuB,QAMlC;AA6BD,MAAa,WAAW;IACtB,MAAM,CAAC,SAAS,CAAC,UAAqB,EAAE,QAAmB,EAAE,SAA0B;QACrF,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,SAAS,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAiB,EAAE,QAAmB,EAAE,SAA0B;QAChF,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,yBAAyB,CAC9B,GAAsE,EACtE,gBAA2B;QAE3B,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,IAAA,sBAAS,EAAC,aAAa,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnG,OAAO,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,2BAA2B,CAAC,oBAA+B;QAChE,OAAO,oBAAoB,CAAC,sBAAsB,CAAC,6CAAiC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,4BAA4B,CAAC,UAAqB,EAAE,SAAoB;QAC7E,OAAO,CAAC,UAAU;aACf,aAAa,CAAC,gDAAoC,CAAC;aACnD,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,gDAAoC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,UAAkB;QACnC,OAAO,UAAU,IAAI,mCAAuB,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,UAAkB,EAAE,YAAoB;QACtE,OAAO,UAAU,GAAG,YAAY,IAAI,yCAA6B,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAS,EAAE,OAAe;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,oCAAwB,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,0BAA0B,CAAC,OAAe,EAAE,OAAe;QAChE,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,oCAAwB,CAAC,CAAC;IAChE,CAAC;IAMD,MAAM,CAAC,aAAa,CAAC,WAAmB,EAAE,IAAY;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,mCAAuB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,WAAmB,EAAE,IAAY;QACjD,OAAO,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,WAAmB,EAAE,IAAY;QACpD,OAAO,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,mCAAuB,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,oBAAoB,CACzB,GAAsE,EACtE,KAAgB,EAChB,oBAA+B;QAE/B,OAAO,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,SAA0B,EAAE,KAAgB,EAAE,SAAoB;QACtF,OAAO,SAAS,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC3H,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAuB,EAAE,SAAoB,EAAE,gBAA2B;QAChG,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEpF,IAAI,GAAG,CAAC,oBAAoB,IAAI,IAAI,EAAE,CAAC;YACrC,MAAM,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CAAC;YACtD,MAAM,aAAa,GAAG,WAAW,CAAC,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAC7F,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAC1F,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,uBAAuB,CAAC,WAAW,EAAE,oBAAoB,EAAW,CAAC;gBAI5F,IAAI,WAAW,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC3F,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;gBAC7G,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,WAAW,EAAE,EAAE,CAAC;QAChF,CAAC;QAED,IAAI,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1F,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;QAC7G,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,GAAsE,EAAE,KAAgB;QAC/G,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,qBAAqB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpF,MAAM,oBAAoB,GAAG,IAAA,sBAAS,EAAC,aAAa,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QAErH,MAAM,eAAe,GAAG,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChE,OAAO,WAAW,CAAC,QAAQ,CAAC,sBAAS,CAAC,OAAO,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAuB,EAAE,KAAgB;QACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzF,OAAO,sBAAS,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAuB,EAAE,KAAgB;QAC/D,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAuB,EAAE,MAA8B,EAAE,KAAgB;QACjG,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,uBAAuB,CAAC,WAAW;gBACtC,OAAO,IAAA,oCAAiB,EAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACpE,KAAK,uBAAuB,CAAC,WAAW;gBACtC,OAAO,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;YACtB,KAAK,uBAAuB,CAAC,UAAU;gBACrC,OAAO,MAAM,CAAC,UAAU,CAAC;YAC3B,KAAK,uBAAuB,CAAC,OAAO,CAAC;YACrC,KAAK,uBAAuB,CAAC,SAAS;gBACpC,OAAO,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD;gBACE,MAAsB,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAuB,EAAE,MAA8B,EAAE,KAAgB;QAClG,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,oBAAoB,CAAC;QACrC,CAAC;QACD,OAAO,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,KAAgB;QAC9B,OAAO,KAAK,CAAC,YAAY,CAAC,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kCAAsB,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAc;QAC9B,OAAO,GAAG,CAAC,SAAS,CAAC,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kCAAsB,CAAC,CAAC,CAAC;IACnE,CAAC;CACF;AA7JD,kCA6JC"}
|