@moon-cx/sdk 0.0.0-stage → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +2 -2
  3. package/dist/adapters/sender.d.ts +88 -0
  4. package/dist/adapters/sender.d.ts.map +1 -0
  5. package/dist/adapters/sender.js +62 -0
  6. package/dist/adapters/sender.js.map +1 -0
  7. package/dist/adapters/tonclient.d.ts +13 -0
  8. package/dist/adapters/tonclient.d.ts.map +1 -0
  9. package/dist/adapters/tonclient.js +17 -0
  10. package/dist/adapters/tonclient.js.map +1 -0
  11. package/dist/api/index.d.ts +210 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +364 -0
  14. package/dist/api/index.js.map +1 -0
  15. package/dist/codec/bins.d.ts +26 -0
  16. package/dist/codec/bins.d.ts.map +1 -0
  17. package/dist/codec/bins.js +67 -0
  18. package/dist/codec/bins.js.map +1 -0
  19. package/dist/codec/clmm.d.ts +87 -0
  20. package/dist/codec/clmm.d.ts.map +1 -0
  21. package/dist/codec/clmm.js +119 -0
  22. package/dist/codec/clmm.js.map +1 -0
  23. package/dist/codec/cpmm.d.ts +112 -0
  24. package/dist/codec/cpmm.d.ts.map +1 -0
  25. package/dist/codec/cpmm.js +146 -0
  26. package/dist/codec/cpmm.js.map +1 -0
  27. package/dist/codec/jetton.d.ts +30 -0
  28. package/dist/codec/jetton.d.ts.map +1 -0
  29. package/dist/codec/jetton.js +37 -0
  30. package/dist/codec/jetton.js.map +1 -0
  31. package/dist/codec/mempad.d.ts +109 -0
  32. package/dist/codec/mempad.d.ts.map +1 -0
  33. package/dist/codec/mempad.js +162 -0
  34. package/dist/codec/mempad.js.map +1 -0
  35. package/dist/core/amount.d.ts +33 -0
  36. package/dist/core/amount.d.ts.map +1 -0
  37. package/dist/core/amount.js +81 -0
  38. package/dist/core/amount.js.map +1 -0
  39. package/dist/core/asset.d.ts +82 -0
  40. package/dist/core/asset.d.ts.map +1 -0
  41. package/dist/core/asset.js +143 -0
  42. package/dist/core/asset.js.map +1 -0
  43. package/dist/core/errors.d.ts +70 -0
  44. package/dist/core/errors.d.ts.map +1 -0
  45. package/dist/core/errors.js +114 -0
  46. package/dist/core/errors.js.map +1 -0
  47. package/dist/core/fee.d.ts +36 -0
  48. package/dist/core/fee.d.ts.map +1 -0
  49. package/dist/core/fee.js +40 -0
  50. package/dist/core/fee.js.map +1 -0
  51. package/dist/core/gas.d.ts +112 -0
  52. package/dist/core/gas.d.ts.map +1 -0
  53. package/dist/core/gas.js +265 -0
  54. package/dist/core/gas.js.map +1 -0
  55. package/dist/core/percent.d.ts +27 -0
  56. package/dist/core/percent.d.ts.map +1 -0
  57. package/dist/core/percent.js +71 -0
  58. package/dist/core/percent.js.map +1 -0
  59. package/dist/core/tx.d.ts +36 -0
  60. package/dist/core/tx.d.ts.map +1 -0
  61. package/dist/core/tx.js +17 -0
  62. package/dist/core/tx.js.map +1 -0
  63. package/dist/index.d.ts +63 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +41 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/jetton/index.d.ts +53 -0
  68. package/dist/jetton/index.d.ts.map +1 -0
  69. package/dist/jetton/index.js +90 -0
  70. package/dist/jetton/index.js.map +1 -0
  71. package/dist/math/clmm-swap.d.ts +80 -0
  72. package/dist/math/clmm-swap.d.ts.map +1 -0
  73. package/dist/math/clmm-swap.js +277 -0
  74. package/dist/math/clmm-swap.js.map +1 -0
  75. package/dist/math/clmm.d.ts +234 -0
  76. package/dist/math/clmm.d.ts.map +1 -0
  77. package/dist/math/clmm.js +270 -0
  78. package/dist/math/clmm.js.map +1 -0
  79. package/dist/math/cpmm.d.ts +170 -0
  80. package/dist/math/cpmm.d.ts.map +1 -0
  81. package/dist/math/cpmm.js +175 -0
  82. package/dist/math/cpmm.js.map +1 -0
  83. package/dist/math/integer.d.ts +10 -0
  84. package/dist/math/integer.d.ts.map +1 -0
  85. package/dist/math/integer.js +44 -0
  86. package/dist/math/integer.js.map +1 -0
  87. package/dist/math/q128.d.ts +45 -0
  88. package/dist/math/q128.d.ts.map +1 -0
  89. package/dist/math/q128.js +108 -0
  90. package/dist/math/q128.js.map +1 -0
  91. package/dist/moon.d.ts +245 -0
  92. package/dist/moon.d.ts.map +1 -0
  93. package/dist/moon.js +332 -0
  94. package/dist/moon.js.map +1 -0
  95. package/dist/ops/jetton-input.d.ts +3 -0
  96. package/dist/ops/jetton-input.d.ts.map +1 -0
  97. package/dist/ops/jetton-input.js +8 -0
  98. package/dist/ops/jetton-input.js.map +1 -0
  99. package/dist/ops/liquidity.d.ts +157 -0
  100. package/dist/ops/liquidity.d.ts.map +1 -0
  101. package/dist/ops/liquidity.js +413 -0
  102. package/dist/ops/liquidity.js.map +1 -0
  103. package/dist/ops/mempad.d.ts +143 -0
  104. package/dist/ops/mempad.d.ts.map +1 -0
  105. package/dist/ops/mempad.js +248 -0
  106. package/dist/ops/mempad.js.map +1 -0
  107. package/dist/ops/pool.d.ts +75 -0
  108. package/dist/ops/pool.d.ts.map +1 -0
  109. package/dist/ops/pool.js +129 -0
  110. package/dist/ops/pool.js.map +1 -0
  111. package/dist/ops/position.d.ts +47 -0
  112. package/dist/ops/position.d.ts.map +1 -0
  113. package/dist/ops/position.js +73 -0
  114. package/dist/ops/position.js.map +1 -0
  115. package/dist/ops/swap.d.ts +104 -0
  116. package/dist/ops/swap.d.ts.map +1 -0
  117. package/dist/ops/swap.js +248 -0
  118. package/dist/ops/swap.js.map +1 -0
  119. package/dist/pool/amounts.d.ts +36 -0
  120. package/dist/pool/amounts.d.ts.map +1 -0
  121. package/dist/pool/amounts.js +68 -0
  122. package/dist/pool/amounts.js.map +1 -0
  123. package/dist/pool/assets.d.ts +45 -0
  124. package/dist/pool/assets.d.ts.map +1 -0
  125. package/dist/pool/assets.js +57 -0
  126. package/dist/pool/assets.js.map +1 -0
  127. package/dist/pool/clmm.d.ts +309 -0
  128. package/dist/pool/clmm.d.ts.map +1 -0
  129. package/dist/pool/clmm.js +561 -0
  130. package/dist/pool/clmm.js.map +1 -0
  131. package/dist/pool/cpmm.d.ts +228 -0
  132. package/dist/pool/cpmm.d.ts.map +1 -0
  133. package/dist/pool/cpmm.js +332 -0
  134. package/dist/pool/cpmm.js.map +1 -0
  135. package/dist/protocol/generated.d.ts +2752 -0
  136. package/dist/protocol/generated.d.ts.map +1 -0
  137. package/dist/protocol/generated.js +3564 -0
  138. package/dist/protocol/generated.js.map +1 -0
  139. package/dist/protocol/index.d.ts +19 -0
  140. package/dist/protocol/index.d.ts.map +1 -0
  141. package/dist/protocol/index.js +49 -0
  142. package/dist/protocol/index.js.map +1 -0
  143. package/dist/state/address.d.ts +121 -0
  144. package/dist/state/address.d.ts.map +1 -0
  145. package/dist/state/address.js +143 -0
  146. package/dist/state/address.js.map +1 -0
  147. package/dist/state/source.d.ts +26 -0
  148. package/dist/state/source.d.ts.map +1 -0
  149. package/dist/state/source.js +32 -0
  150. package/dist/state/source.js.map +1 -0
  151. package/dist/state/storage.d.ts +218 -0
  152. package/dist/state/storage.d.ts.map +1 -0
  153. package/dist/state/storage.js +273 -0
  154. package/dist/state/storage.js.map +1 -0
  155. package/package.json +74 -4
@@ -0,0 +1,413 @@
1
+ import { Amount } from "../core/amount.js";
2
+ import { AmountTooSmallError, BuildError, LimitExceededError } from "../core/errors.js";
3
+ import { Percent } from "../core/percent.js";
4
+ import { CPMM_MIN_TON_DEPOSIT, clmmDepositGas, clmmDepositTonGas, clmmWithdrawGas, cpmmDepositJettonForward, cpmmDepositTonGas, cpmmWithdrawGas, } from "../core/gas.js";
5
+ import { randomQueryId } from "../core/tx.js";
6
+ import * as cpmmCodec from "../codec/cpmm.js";
7
+ import * as clmmCodec from "../codec/clmm.js";
8
+ import { buildJettonTransfer } from "../codec/jetton.js";
9
+ import { sumBins } from "../codec/bins.js";
10
+ import { depositLp, firstDepositLp, matchingDeposit, withdrawAmounts } from "../math/cpmm.js";
11
+ import { MAX_BINS_PER_POSITION, binSides, firstBinOfRange, lastBinOfRange, rangeOfBin, } from "../math/clmm.js";
12
+ import { assertJettonInput } from "./jetton-input.js";
13
+ /**
14
+ * Works out what a CPMM deposit will mint.
15
+ *
16
+ * The amounts come back exactly as given — nothing is trimmed. Supplying more
17
+ * of one side than the pool's ratio calls for mints no extra LP, and the
18
+ * surplus stays in the pool rather than coming back, so a warning names it.
19
+ * Use `pool.matchDeposit()` or `pool.deposit({ x })` to have the second side
20
+ * worked out for you instead.
21
+ */
22
+ export function planCpmmDeposit(args) {
23
+ const firstDeposit = args.state.lpTotal === 0n;
24
+ if (firstDeposit) {
25
+ const result = firstDepositLp(args.x.raw, args.y.raw);
26
+ if (result.userLp === 0n) {
27
+ throw new BuildError('this first deposit is too small: the 10000 LP the pool keeps would consume all of it');
28
+ }
29
+ return {
30
+ amounts: { x: args.x, y: args.y },
31
+ expectedLp: result.userLp,
32
+ minLp: args.slippage.applyDown(result.userLp),
33
+ firstDeposit: true,
34
+ };
35
+ }
36
+ const lp = depositLp({
37
+ x: args.x.raw,
38
+ y: args.y.raw,
39
+ lpTotal: args.state.lpTotal,
40
+ reserveX: args.state.reserves.x,
41
+ reserveY: args.state.reserves.y,
42
+ });
43
+ if (lp <= 0n)
44
+ throw new BuildError('this deposit is too small to mint any LP');
45
+ // Whatever exceeds the pool's ratio mints no LP and is not refunded.
46
+ const matched = matchingDeposit({
47
+ reserveX: args.state.reserves.x,
48
+ reserveY: args.state.reserves.y,
49
+ x: args.x.raw,
50
+ });
51
+ const surplus = args.y.raw > matched.y
52
+ ? { side: 'Y', amount: args.y.raw - matched.y }
53
+ : args.x.raw >
54
+ matchingDeposit({
55
+ reserveX: args.state.reserves.x,
56
+ reserveY: args.state.reserves.y,
57
+ y: args.y.raw,
58
+ }).x
59
+ ? {
60
+ side: 'X',
61
+ amount: args.x.raw -
62
+ matchingDeposit({
63
+ reserveX: args.state.reserves.x,
64
+ reserveY: args.state.reserves.y,
65
+ y: args.y.raw,
66
+ }).x,
67
+ }
68
+ : null;
69
+ return {
70
+ amounts: { x: args.x, y: args.y },
71
+ expectedLp: lp,
72
+ minLp: args.slippage.applyDown(lp),
73
+ firstDeposit: false,
74
+ ...(surplus !== null && surplus.amount > 0n
75
+ ? {
76
+ surplus: `${surplus.amount} of ${surplus.side} is beyond the pool's ratio and mints no LP`,
77
+ }
78
+ : {}),
79
+ };
80
+ }
81
+ /** The amount of the other side that matches, at the pool's current ratio. */
82
+ export function matchCpmmDeposit(args) {
83
+ const matched = matchingDeposit({
84
+ reserveX: args.state.reserves.x,
85
+ reserveY: args.state.reserves.y,
86
+ ...(args.x !== undefined ? { x: args.x.raw } : {}),
87
+ ...(args.y !== undefined ? { y: args.y.raw } : {}),
88
+ });
89
+ return { x: new Amount(matched.x, args.assetX), y: new Amount(matched.y, args.assetY) };
90
+ }
91
+ /**
92
+ * Builds both legs of a CPMM deposit.
93
+ *
94
+ * They go out under one query id and are meant to be signed together: the pool
95
+ * matches them up in an LP account, and a leg that arrives alone waits there
96
+ * until the other one does — or until it is cancelled.
97
+ */
98
+ export function buildCpmmDeposit(args) {
99
+ // Only the initiator may make the first deposit.
100
+ // The pool refunds with exit 0, indistinguishable from a slippage refund, and
101
+ // the gas of both legs is lost, so this is the only place the caller learns why.
102
+ // A null initiator (no such field in storage, see `parseCpmmPool`) is not a refusal.
103
+ if (args.plan.firstDeposit) {
104
+ const initiator = args.state.initiator;
105
+ if (initiator !== null && !initiator.equals(args.sender)) {
106
+ throw new BuildError('only the pool creator can make the first deposit into an empty CPMM pool: ' +
107
+ `it was created by ${initiator.toString()}, and the pool would refund ` +
108
+ 'this deposit without minting any LP');
109
+ }
110
+ }
111
+ const queryId = args.queryId ?? randomQueryId();
112
+ const warnings = [];
113
+ const txs = [];
114
+ const xIsNative = args.state.masters.x === null;
115
+ if (!xIsNative)
116
+ assertJettonInput('cpmm', args.plan.amounts.x.raw);
117
+ assertJettonInput('cpmm', args.plan.amounts.y.raw);
118
+ if (xIsNative) {
119
+ if (args.plan.amounts.x.raw < CPMM_MIN_TON_DEPOSIT) {
120
+ throw new AmountTooSmallError('a native TON deposit', CPMM_MIN_TON_DEPOSIT, args.plan.amounts.x.raw, 'depositAmount >= ton("1") in the CPMM pool');
121
+ }
122
+ const gas = cpmmDepositTonGas(args.plan.amounts.x.raw);
123
+ txs.push({
124
+ to: args.pool,
125
+ value: gas.attach,
126
+ body: cpmmCodec.encodeDepositLiquidity({ queryId, minLpOut: args.plan.minLp }),
127
+ });
128
+ }
129
+ else {
130
+ const wallet = args.senderJettonWallets.x;
131
+ if (wallet === undefined)
132
+ throw new BuildError('the X side is a jetton — pass its wallet address');
133
+ const forward = cpmmDepositJettonForward();
134
+ txs.push({
135
+ to: wallet,
136
+ value: forward.attach + 100000000n,
137
+ body: buildJettonTransfer({
138
+ queryId,
139
+ amount: args.plan.amounts.x.raw,
140
+ destination: args.pool,
141
+ responseDestination: args.sender,
142
+ forwardTonAmount: forward.attach,
143
+ forwardPayload: cpmmCodec.encodeJettonDepositPayload({ minLpOut: args.plan.minLp }),
144
+ }),
145
+ });
146
+ }
147
+ const walletY = args.senderJettonWallets.y;
148
+ if (walletY === undefined)
149
+ throw new BuildError('the Y side is a jetton — pass its wallet address');
150
+ const forwardY = cpmmDepositJettonForward();
151
+ txs.push({
152
+ to: walletY,
153
+ value: forwardY.attach + 100000000n,
154
+ body: buildJettonTransfer({
155
+ queryId,
156
+ amount: args.plan.amounts.y.raw,
157
+ destination: args.pool,
158
+ responseDestination: args.sender,
159
+ forwardTonAmount: forwardY.attach,
160
+ forwardPayload: cpmmCodec.encodeJettonDepositPayload({ minLpOut: args.plan.minLp }),
161
+ }),
162
+ });
163
+ if (args.plan.firstDeposit) {
164
+ warnings.push('this is the pool\'s first deposit: 10000 LP stays in the pool permanently');
165
+ }
166
+ // Adding to a locked position is allowed but irreversible: the position ORs the
167
+ // message's locked = 0 into its own true.
168
+ if (args.positionLocked === true) {
169
+ warnings.push('your position in this pool is locked: this deposit merges into it and can never be ' +
170
+ 'withdrawn — only its fees can be collected (one position per wallet per pool, ' +
171
+ 'and a merge keeps the lock)');
172
+ }
173
+ const details = args.positionLocked === undefined ? args.plan : { ...args.plan, positionLocked: args.positionLocked };
174
+ return { txs, queryId, details, warnings };
175
+ }
176
+ /** Builds a CPMM withdrawal. Sent to the position, not the pool. */
177
+ export function buildCpmmWithdraw(args) {
178
+ if (args.state.locked) {
179
+ throw new BuildError('this position is locked: liquidity can never be withdrawn from it. Fees can still be collected.');
180
+ }
181
+ if (args.state.frozen) {
182
+ throw new BuildError('this position is settling a previous operation — try again shortly');
183
+ }
184
+ const lp = args.lp ??
185
+ (args.percent ? (args.state.lp * BigInt(args.percent.bps)) / 10000n : args.state.lp);
186
+ if (lp <= 0n)
187
+ throw new BuildError('nothing to withdraw');
188
+ if (lp > args.state.lp) {
189
+ throw new BuildError(`this position holds ${args.state.lp} LP, cannot withdraw ${lp}`);
190
+ }
191
+ const expected = withdrawAmounts({
192
+ lp,
193
+ lpTotal: args.poolState.lpTotal,
194
+ reserveX: args.poolState.reserves.x,
195
+ reserveY: args.poolState.reserves.y,
196
+ feesLp: args.poolState.feesLp,
197
+ checkpoint: args.state.feeCheckpoint,
198
+ });
199
+ const queryId = args.queryId ?? randomQueryId();
200
+ const gas = cpmmWithdrawGas();
201
+ return {
202
+ txs: [
203
+ {
204
+ to: args.position,
205
+ value: gas.attach,
206
+ body: cpmmCodec.encodeWithdrawLiquidity({ queryId, amount: lp }),
207
+ },
208
+ ],
209
+ queryId,
210
+ details: { lp, expected: expected.total },
211
+ warnings: [],
212
+ };
213
+ }
214
+ /**
215
+ * Spreads a deposit across a bin range according to a shape.
216
+ *
217
+ * `spot` puts the same amount in every bin. `curve` concentrates it at the
218
+ * centre, `bidask` at the edges. The weights are squared distances, so `curve`
219
+ * really is quadratic rather than merely leaning inward.
220
+ */
221
+ export function shapeBins(args) {
222
+ const lo = Math.min(args.fromBin, args.toBin);
223
+ const hi = Math.max(args.fromBin, args.toBin);
224
+ const count = hi - lo + 1;
225
+ if (count > MAX_BINS_PER_POSITION) {
226
+ throw new LimitExceededError('a single position cannot span this many bins', MAX_BINS_PER_POSITION, count, 'Split the range across several positions.');
227
+ }
228
+ const rangeNum = rangeOfBin(lo);
229
+ if (rangeOfBin(hi) !== rangeNum) {
230
+ throw new BuildError(`bins ${lo}..${hi} straddle two ranges ` +
231
+ `(${firstBinOfRange(rangeNum)}..${lastBinOfRange(rangeNum)} is one of them). ` +
232
+ 'Split the deposit at the boundary.');
233
+ }
234
+ const centre = (lo + hi) / 2;
235
+ const maxDistance = Math.max(hi - centre, centre - lo, 1);
236
+ const weight = (bin) => {
237
+ if (args.shape === 'spot')
238
+ return 1n;
239
+ const distance = Math.abs(bin - centre);
240
+ const value = args.shape === 'curve' ? maxDistance - distance + 1 : distance + 1;
241
+ return BigInt(Math.round(value * value));
242
+ };
243
+ // `accepts` decides both the weight denominators and the split, so the parts can
244
+ // never add up to more than the input.
245
+ const offering = { x: args.x > 0n, y: args.y > 0n };
246
+ // A bin containing the price needs both sides (the range takes L = min(Lx, Ly)
247
+ // and refunds everything if one is zero), so it is skipped on a one-sided deposit.
248
+ const accepts = (side, which) => {
249
+ const needsBoth = side.takesX && side.takesY;
250
+ if (which === 'x')
251
+ return side.takesX && (!needsBoth || offering.y);
252
+ return side.takesY && (!needsBoth || offering.x);
253
+ };
254
+ const sides = new Map();
255
+ let weightX = 0n;
256
+ let weightY = 0n;
257
+ for (let bin = lo; bin <= hi; bin++) {
258
+ const side = binSides({ bin, currentSqrtPrice: args.currentSqrtPrice, binStep: args.binStep });
259
+ sides.set(bin, side);
260
+ const w = weight(bin);
261
+ if (accepts(side, 'x'))
262
+ weightX += w;
263
+ if (accepts(side, 'y'))
264
+ weightY += w;
265
+ }
266
+ const bins = [];
267
+ let leftX = args.x;
268
+ let leftY = args.y;
269
+ for (let bin = lo; bin <= hi; bin++) {
270
+ const side = sides.get(bin);
271
+ const w = weight(bin);
272
+ const x = accepts(side, 'x') && weightX > 0n ? (args.x * w) / weightX : 0n;
273
+ const y = accepts(side, 'y') && weightY > 0n ? (args.y * w) / weightY : 0n;
274
+ bins.push({ binId: bin, x, y });
275
+ leftX -= x;
276
+ leftY -= y;
277
+ }
278
+ // Integer-division remainders go to the bin nearest the range centre that takes that side.
279
+ const nearestAccepting = (which) => bins
280
+ .filter((bin) => accepts(sides.get(bin.binId), which))
281
+ .reduce((best, bin) => best === undefined || Math.abs(bin.binId - centre) < Math.abs(best.binId - centre)
282
+ ? bin
283
+ : best, undefined);
284
+ if (leftX > 0n) {
285
+ const target = nearestAccepting('x');
286
+ if (target)
287
+ target.x += leftX;
288
+ }
289
+ if (leftY > 0n) {
290
+ const target = nearestAccepting('y');
291
+ if (target)
292
+ target.y += leftY;
293
+ }
294
+ const totals = sumBins(bins);
295
+ // Invariant: never place more than was supplied.
296
+ if (totals.x > args.x || totals.y > args.y) {
297
+ throw new BuildError(`bin layout would place ${totals.x}/${totals.y} from ${args.x}/${args.y} — refusing to build`);
298
+ }
299
+ const single = (totals.x > 0n) !== (totals.y > 0n);
300
+ return {
301
+ bins: bins.filter((bin) => bin.x > 0n || bin.y > 0n),
302
+ totals,
303
+ unplaced: { x: args.x - totals.x, y: args.y - totals.y },
304
+ isSingle: single,
305
+ rangeNum,
306
+ };
307
+ }
308
+ /** Builds both legs of a CLMM deposit into one range. */
309
+ export function buildClmmDeposit(args) {
310
+ const queryId = args.queryId ?? randomQueryId();
311
+ const warnings = [];
312
+ const txs = [];
313
+ if (!args.xIsNative && args.plan.totals.x > 0n)
314
+ assertJettonInput('clmm', args.plan.totals.x);
315
+ if (args.plan.totals.y > 0n)
316
+ assertJettonInput('clmm', args.plan.totals.y);
317
+ if (args.plan.bins.length === 0)
318
+ throw new BuildError('the deposit covers no bins');
319
+ if (args.plan.bins.length > MAX_BINS_PER_POSITION) {
320
+ throw new LimitExceededError('a single position cannot span this many bins', MAX_BINS_PER_POSITION, args.plan.bins.length);
321
+ }
322
+ if (args.plan.unplaced.x > 0n || args.plan.unplaced.y > 0n) {
323
+ warnings.push(`${args.plan.unplaced.x} X and ${args.plan.unplaced.y} Y cannot be placed at this price ` +
324
+ 'and stay in your wallet');
325
+ }
326
+ if (args.plan.isSingle) {
327
+ warnings.push('one-sided deposit: nothing is waiting for a matching leg');
328
+ }
329
+ if (args.plan.totals.x > 0n) {
330
+ if (args.xIsNative) {
331
+ const gas = clmmDepositTonGas(args.plan.totals.x);
332
+ txs.push({
333
+ to: args.range,
334
+ value: gas.attach,
335
+ body: clmmCodec.encodeDepositLiquidity({
336
+ queryId,
337
+ bins: args.plan.bins,
338
+ isSingle: args.plan.isSingle,
339
+ side: 'x',
340
+ }),
341
+ });
342
+ }
343
+ else {
344
+ const wallet = args.senderJettonWallets.x;
345
+ if (wallet === undefined)
346
+ throw new BuildError('the X side is a jetton — pass its wallet address');
347
+ const gas = clmmDepositGas();
348
+ txs.push({
349
+ to: wallet,
350
+ value: gas.attach + 100000000n,
351
+ body: buildJettonTransfer({
352
+ queryId,
353
+ amount: args.plan.totals.x,
354
+ destination: args.range,
355
+ responseDestination: args.sender,
356
+ forwardTonAmount: gas.attach,
357
+ forwardPayload: clmmCodec.encodeJettonDepositPayload({
358
+ bins: args.plan.bins,
359
+ isSingle: args.plan.isSingle,
360
+ }),
361
+ }),
362
+ });
363
+ }
364
+ }
365
+ if (args.plan.totals.y > 0n) {
366
+ const wallet = args.senderJettonWallets.y;
367
+ if (wallet === undefined)
368
+ throw new BuildError('the Y side is a jetton — pass its wallet address');
369
+ const gas = clmmDepositGas();
370
+ txs.push({
371
+ to: wallet,
372
+ value: gas.attach + 100000000n,
373
+ body: buildJettonTransfer({
374
+ queryId,
375
+ amount: args.plan.totals.y,
376
+ destination: args.range,
377
+ responseDestination: args.sender,
378
+ forwardTonAmount: gas.attach,
379
+ forwardPayload: clmmCodec.encodeJettonDepositPayload({
380
+ bins: args.plan.bins,
381
+ isSingle: args.plan.isSingle,
382
+ }),
383
+ }),
384
+ });
385
+ }
386
+ return { txs, queryId, details: args.plan, warnings };
387
+ }
388
+ /** Builds a CLMM withdrawal: which bins to empty. */
389
+ export function buildClmmWithdraw(args) {
390
+ if (args.locked) {
391
+ throw new BuildError('this position is locked: liquidity can never be withdrawn from it. Fees can still be collected.');
392
+ }
393
+ if (args.pending) {
394
+ throw new BuildError('this position is settling a withdrawal or fee collection — try again once it settles');
395
+ }
396
+ if (args.bins.length === 0)
397
+ throw new BuildError('name at least one bin to withdraw from');
398
+ const queryId = args.queryId ?? randomQueryId();
399
+ const gas = clmmWithdrawGas();
400
+ return {
401
+ txs: [
402
+ {
403
+ to: args.position,
404
+ value: gas.attach,
405
+ body: clmmCodec.encodeWithdrawLiquidity({ queryId, binIds: args.bins }),
406
+ },
407
+ ],
408
+ queryId,
409
+ details: { bins: [...args.bins] },
410
+ warnings: [],
411
+ };
412
+ }
413
+ //# sourceMappingURL=liquidity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidity.js","sourceRoot":"","sources":["../../src/ops/liquidity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,aAAa,EAAuC,MAAM,eAAe,CAAA;AAClF,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAmB,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC7F,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAqBrD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAK/B;IACC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,CAAA;IAE9C,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,UAAU,CAClB,sFAAsF,CACvF,CAAA;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;YACjC,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7C,YAAY,EAAE,IAAI;SACnB,CAAA;IACH,CAAC;IAED,MAAM,EAAE,GAAG,SAAS,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG;QACb,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;QAC3B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;KAChC,CAAC,CAAA;IACF,IAAI,EAAE,IAAI,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAA;IAE9E,qEAAqE;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG;KACd,CAAC,CAAA;IACF,MAAM,OAAO,GACX,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,EAAE,IAAI,EAAE,GAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE;QACxD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;YACR,eAAe,CAAC;gBACd,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC/B,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG;aACd,CAAC,CAAC,CAAC;YACN,CAAC,CAAC;gBACE,IAAI,EAAE,GAAY;gBAClB,MAAM,EACJ,IAAI,CAAC,CAAC,CAAC,GAAG;oBACV,eAAe,CAAC;wBACd,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC/B,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG;qBACd,CAAC,CAAC,CAAC;aACP;YACH,CAAC,CAAC,IAAI,CAAA;IAEZ,OAAO;QACL,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;QACjC,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,YAAY,EAAE,KAAK;QACnB,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;YACzC,CAAC,CAAC;gBACE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,IAAI,6CAA6C;aAC3F;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,IAMhC;IACC,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC,CAAA;IACF,OAAO,EAAE,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;AACzF,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,iDAAiD;IACjD,8EAA8E;IAC9E,iFAAiF;IACjF,qFAAqF;IACrF,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;QACtC,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAClB,4EAA4E;gBAC1E,qBAAqB,SAAS,CAAC,QAAQ,EAAE,8BAA8B;gBACvE,qCAAqC,CACxC,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAgB,EAAE,CAAA;IAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAA;IAC/C,IAAI,CAAC,SAAS;QAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAClE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAElD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,oBAAoB,EAAE,CAAC;YACnD,MAAM,IAAI,mBAAmB,CAC3B,sBAAsB,EACtB,oBAAoB,EACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EACvB,4CAA4C,CAC7C,CAAA;QACH,CAAC;QACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACtD,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,KAAK,EAAE,GAAG,CAAC,MAAM;YACjB,IAAI,EAAE,SAAS,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SAC/E,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAA;QAClG,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAA;QAC1C,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,UAAY;YACpC,IAAI,EAAE,mBAAmB,CAAC;gBACxB,OAAO;gBACP,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC/B,WAAW,EAAE,IAAI,CAAC,IAAI;gBACtB,mBAAmB,EAAE,IAAI,CAAC,MAAM;gBAChC,gBAAgB,EAAE,OAAO,CAAC,MAAM;gBAChC,cAAc,EAAE,SAAS,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;aACpF,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAC1C,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAA;IACnG,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAA;IAC3C,GAAG,CAAC,IAAI,CAAC;QACP,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAY;QACrC,IAAI,EAAE,mBAAmB,CAAC;YACxB,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YAC/B,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,gBAAgB,EAAE,QAAQ,CAAC,MAAM;YACjC,cAAc,EAAE,SAAS,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACpF,CAAC;KACH,CAAC,CAAA;IAEF,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;IAC5F,CAAC;IACD,gFAAgF;IAChF,0CAA0C;IAC1C,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CACX,qFAAqF;YACnF,gFAAgF;YAChF,6BAA6B,CAChC,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GACX,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAA;IACvG,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,IAOjC;IACC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAClB,iGAAiG,CAClG,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,oEAAoE,CAAC,CAAA;IAC5F,CAAC;IAED,MAAM,EAAE,GACN,IAAI,CAAC,EAAE;QACP,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACvF,IAAI,EAAE,IAAI,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAA;IACzD,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAA;IACxF,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,EAAE;QACF,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;QAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;QAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;KACrC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,CAAA;IAC/C,MAAM,GAAG,GAAG,eAAe,EAAE,CAAA;IAC7B,OAAO;QACL,GAAG,EAAE;YACH;gBACE,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,KAAK,EAAE,GAAG,CAAC,MAAM;gBACjB,IAAI,EAAE,SAAS,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aACjE;SACF;QACD,OAAO;QACP,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE;QACzC,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAQzB;IACC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAEzB,IAAI,KAAK,GAAG,qBAAqB,EAAE,CAAC;QAClC,MAAM,IAAI,kBAAkB,CAC1B,8CAA8C,EAC9C,qBAAqB,EACrB,KAAK,EACL,2CAA2C,CAC5C,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAA;IAC/B,IAAI,UAAU,CAAC,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,UAAU,CAClB,QAAQ,EAAE,KAAK,EAAE,uBAAuB;YACtC,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,cAAc,CAAC,QAAQ,CAAC,oBAAoB;YAC9E,oCAAoC,CACvC,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE;QACrC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,EAAE,CAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAA;QAChF,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,iFAAiF;IACjF,uCAAuC;IACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAA;IAEnD,+EAA+E;IAC/E,mFAAmF;IACnF,MAAM,OAAO,GAAG,CAAC,IAA0C,EAAE,KAAgB,EAAW,EAAE;QACxF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;QAC5C,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnE,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClD,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgD,CAAA;IACrE,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,KAAK,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9F,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACpB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACrB,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAA;QACpC,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;IAClB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;IAClB,KAAK,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/B,KAAK,IAAI,CAAC,CAAA;QACV,KAAK,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,2FAA2F;IAC3F,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAA0B,EAAE,CACpE,IAAI;SACD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAE,EAAE,KAAK,CAAC,CAAC;SACtD,MAAM,CACL,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CACZ,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QAChF,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI,EACV,SAAS,CACV,CAAA;IAEL,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,MAAM;YAAE,MAAM,CAAC,CAAC,IAAI,KAAK,CAAA;IAC/B,CAAC;IACD,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,MAAM;YAAE,MAAM,CAAC,CAAC,IAAI,KAAK,CAAA;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5B,iDAAiD;IACjD,IAAI,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAClB,0BAA0B,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,sBAAsB,CAC9F,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAElD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM;QACN,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE;QACxD,QAAQ,EAAE,MAAM;QAChB,QAAQ;KACT,CAAA;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,IAQhC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAgB,EAAE,CAAA;IAE3B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;QAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7F,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;QAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAE1E,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAA;IACnF,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAClD,MAAM,IAAI,kBAAkB,CAC1B,8CAA8C,EAC9C,qBAAqB,EACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CACtB,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3D,QAAQ,CAAC,IAAI,CACX,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,oCAAoC;YACvF,yBAAyB,CAC5B,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACjD,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,IAAI,CAAC,KAAK;gBACd,KAAK,EAAE,GAAG,CAAC,MAAM;gBACjB,IAAI,EAAE,SAAS,CAAC,sBAAsB,CAAC;oBACrC,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;oBACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAC5B,IAAI,EAAE,GAAG;iBACV,CAAC;aACH,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;YACzC,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAA;YAClG,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;YAC5B,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,UAAY;gBAChC,IAAI,EAAE,mBAAmB,CAAC;oBACxB,OAAO;oBACP,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC1B,WAAW,EAAE,IAAI,CAAC,KAAK;oBACvB,mBAAmB,EAAE,IAAI,CAAC,MAAM;oBAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM;oBAC5B,cAAc,EAAE,SAAS,CAAC,0BAA0B,CAAC;wBACnD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;wBACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;qBAC7B,CAAC;iBACH,CAAC;aACH,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAA;QAClG,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;QAC5B,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,UAAY;YAChC,IAAI,EAAE,mBAAmB,CAAC;gBACxB,OAAO;gBACP,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,mBAAmB,EAAE,IAAI,CAAC,MAAM;gBAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM;gBAC5B,cAAc,EAAE,SAAS,CAAC,0BAA0B,CAAC;oBACnD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;oBACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;iBAC7B,CAAC;aACH,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;AACvD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,iBAAiB,CAAC,IAMjC;IACC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,IAAI,UAAU,CAClB,iGAAiG,CAClG,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,IAAI,UAAU,CAAC,sFAAsF,CAAC,CAAA;IAC9G,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAA;IAE1F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,CAAA;IAC/C,MAAM,GAAG,GAAG,eAAe,EAAE,CAAA;IAC7B,OAAO;QACL,GAAG,EAAE;YACH;gBACE,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,KAAK,EAAE,GAAG,CAAC,MAAM;gBACjB,IAAI,EAAE,SAAS,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;aACxE;SACF;QACD,OAAO;QACP,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE;QACjC,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC"}
@@ -0,0 +1,143 @@
1
+ import type { Address, Cell } from '@ton/core';
2
+ import { type FeeBps } from '../core/fee.ts';
3
+ import { type GasPrices } from '../core/gas.ts';
4
+ import { type BuiltOperation } from '../core/tx.ts';
5
+ import * as mempad from '../codec/mempad.ts';
6
+ /**
7
+ * Pool fee tiers the factory accepts; anything else is `INVALID_PAYLOAD` (700).
8
+ * Same as CPMM's {@link FEE_BPS}: it is the fee of the CPMM pool the curve graduates into.
9
+ */
10
+ export declare const MEMPAD_FEE_BPS: readonly [10, 20, 30, 50, 100, 200];
11
+ export type MempadFeeBps = FeeBps;
12
+ /**
13
+ * Trade and creator fees per tier, from the factory's `feesForTier`.
14
+ * The creator's cut is not a fixed share of the trade fee.
15
+ */
16
+ export declare const MEMPAD_FEE_TIERS: Record<MempadFeeBps, {
17
+ tradeFeeBps: number;
18
+ creatorFeeBps: number;
19
+ }>;
20
+ /**
21
+ * Default sell attachment in nanograms: 0.06 GRAM, not the wallet's 0.05 gate
22
+ * (exit 48). The burn notification
23
+ * forwards what is left in mode 64, and at exactly 0.05 the curve falls short of its
24
+ * own gate. The unspent part is returned with the payout.
25
+ */
26
+ export declare const MEMPAD_SELL_ATTACH = 60000000n;
27
+ /** The wallet's own floor. Attaching less is exit 48 before anything happens. */
28
+ export declare const MEMPAD_SELL_MIN_ATTACH: bigint;
29
+ /**
30
+ * Value a deploy must attach: the factory's flat cost, the launch fee and the initial buy.
31
+ * Gas for the initial buy is not added: the curve covers it from the flat cost.
32
+ */
33
+ export declare function createLaunchValue(launchFee: bigint, initialBuy: bigint): bigint;
34
+ /**
35
+ * Message value for a purchase of `net` nanograms: `net` plus the computed gas
36
+ * ({@link mempadBuyGas}), as {@link buildCurveBuy} attaches by default.
37
+ * `prices` is only for a chain whose config 21 differs from mainnet's.
38
+ */
39
+ export declare function buyValueForSpend(net: bigint, prices?: GasPrices): bigint;
40
+ export type CurveCreation = {
41
+ salt: bigint;
42
+ feeBps: MempadFeeBps;
43
+ tradeFeeBps: number;
44
+ creatorFeeBps: number;
45
+ initialBuy: bigint;
46
+ launchFee: bigint;
47
+ /** Where the curve will land, if `curveCode` was supplied. */
48
+ curve: Address | null;
49
+ };
50
+ /**
51
+ * Builds a token launch: one message to the factory.
52
+ *
53
+ * `launchFee` has no default: it lives in the factory's c4 and can change on upgrade.
54
+ * Pass `curveCode` (also from c4) to predict the curve address. A repeated
55
+ * `(factory, creator, salt)` does not throw but the factory keeps the fee, so check
56
+ * the predicted address for an existing curve before signing.
57
+ */
58
+ export declare function buildCreateCurve(args: {
59
+ factory: Address;
60
+ /** The wallet that will send this message. Part of the curve's address. */
61
+ creator: Address;
62
+ /**
63
+ * Basis points: 10 = 0.10%, 20 = 0.20%, 30 = 0.30%, 50 = 0.50%,
64
+ * 100 = 1.00%, 200 = 2.00%. Write the number, or `FeeTier.Bps30`.
65
+ *
66
+ * Also the fee of the CPMM pool the curve graduates into, and what sets
67
+ * the creator's cut — see {@link MEMPAD_FEE_TIERS}.
68
+ */
69
+ feeBps: MempadFeeBps;
70
+ metadata: mempad.LaunchMetadata;
71
+ /** Live from the factory's storage. Not a constant. */
72
+ launchFee: bigint;
73
+ /** Exactly 0, or at least 0.01 GRAM. Anything between is exit 700. */
74
+ initialBuy?: bigint;
75
+ /** Defaults to random. Together with factory and creator it fixes the address. */
76
+ salt?: bigint;
77
+ /** The factory's stored curve code, if you want the address predicted. */
78
+ curveCode?: Cell;
79
+ queryId?: bigint;
80
+ }): BuiltOperation<CurveCreation>;
81
+ export type CurveBuy = {
82
+ /**
83
+ * Total attached value (purchase plus gas), equal to `txs[0].value`. By default
84
+ * larger than the `value` argument, which is the purchase.
85
+ */
86
+ value: bigint;
87
+ /** Overhead the curve removes before the curve maths runs. Computed, not given. */
88
+ requiredGas: bigint;
89
+ /** What actually reaches the curve as a purchase. */
90
+ spend: bigint;
91
+ minOut: bigint;
92
+ };
93
+ /**
94
+ * Builds a purchase on the curve.
95
+ *
96
+ * `value` is the purchase, not the TON message value: the curve computes
97
+ * `gross = msgValue - requiredGas`, so by default the computed overhead
98
+ * ({@link mempadBuyGas}) is added on top and exactly `value` reaches the curve.
99
+ * Pass `gasIncluded: true` to make `value` the whole message instead (for example,
100
+ * to spend a wallet's last GRAM).
101
+ */
102
+ export declare function buildCurveBuy(args: {
103
+ curve: Address;
104
+ /**
105
+ * Purchase in nanograms that reaches the curve; gas is added on top. With
106
+ * `gasIncluded: true`, the whole message value.
107
+ */
108
+ value: bigint;
109
+ /** Treat `value` as the whole message; the gas is taken out of it. */
110
+ gasIncluded?: boolean;
111
+ /** Slippage floor in token units. Below it the curve throws `SLIPPAGE` (505). */
112
+ minOut?: bigint;
113
+ /** Only for a chain whose config 21 is not mainnet's. */
114
+ prices?: GasPrices;
115
+ queryId?: bigint;
116
+ }): BuiltOperation<CurveBuy>;
117
+ export type CurveSell = {
118
+ amount: bigint;
119
+ minOut: bigint;
120
+ /** What the message attaches; the unspent part comes back with the payout. */
121
+ attach: bigint;
122
+ };
123
+ /**
124
+ * Builds a sale back to the curve.
125
+ *
126
+ * The message goes to the seller's own jetton wallet, not to the curve. That
127
+ * address is sharded (not the plain state-init hash), so derive it with
128
+ * `mempadJettonWalletAddress`. `owner` becomes `sendExcessesTo`, where the change goes.
129
+ */
130
+ export declare function buildCurveSell(args: {
131
+ /** The seller's jetton wallet for this token (sharded, see `mempadJettonWalletAddress`). */
132
+ jettonWallet: Address;
133
+ /** The seller. Goes into `sendExcessesTo`. */
134
+ owner: Address;
135
+ /** Token units to sell, in the jetton's smallest unit. */
136
+ amount: bigint;
137
+ /** Slippage floor in nanograms. Below it the curve throws `SLIPPAGE` (505). */
138
+ minOut?: bigint;
139
+ /** Defaults to {@link MEMPAD_SELL_ATTACH}. */
140
+ attach?: bigint;
141
+ queryId?: bigint;
142
+ }): BuiltOperation<CurveSell>;
143
+ //# sourceMappingURL=mempad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mempad.d.ts","sourceRoot":"","sources":["../../src/ops/mempad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAe5C;;;GAGG;AACH,eAAO,MAAM,cAAc,qCAAU,CAAA;AACrC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAOjG,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YAAc,CAAA;AAE7C,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,QAAsC,CAAA;AAEzE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CASxE;AA2CD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CACtB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,2EAA2E;IAC3E,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;;OAMG;IACH,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAA;IAC/B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,cAAc,CAAC,aAAa,CAAC,CAmFhC;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAA;IACnB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,KAAK,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,cAAc,CAAC,QAAQ,CAAC,CA8B3B;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,4FAA4F;IAC5F,YAAY,EAAE,OAAO,CAAA;IACrB,8CAA8C;IAC9C,KAAK,EAAE,OAAO,CAAA;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,cAAc,CAAC,SAAS,CAAC,CA0C5B"}