@sly-rentals/core 5.5.2 → 6.1.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.
Files changed (79) hide show
  1. package/dist/api.json +3556 -3373
  2. package/dist/cjs/doctor/contract.js +106 -66
  3. package/dist/cjs/doctor/contract.js.map +1 -1
  4. package/dist/cjs/doctor/contract.test.js +73 -2
  5. package/dist/cjs/doctor/contract.test.js.map +1 -1
  6. package/dist/cjs/generated/codama/instructions/closeRental.js +12 -0
  7. package/dist/cjs/generated/codama/instructions/closeRental.js.map +1 -1
  8. package/dist/cjs/idl/srsly.json +53 -2
  9. package/dist/cjs/instructions/closeContract.js +27 -41
  10. package/dist/cjs/instructions/closeContract.js.map +1 -1
  11. package/dist/cjs/instructions/closeContract.test.js +88 -0
  12. package/dist/cjs/instructions/closeContract.test.js.map +1 -1
  13. package/dist/cjs/instructions/closeContractThread.js +4 -4
  14. package/dist/cjs/instructions/closeContractThread.js.map +1 -1
  15. package/dist/cjs/instructions/closeRental.js +12 -1
  16. package/dist/cjs/instructions/closeRental.js.map +1 -1
  17. package/dist/cjs/instructions/deleteContractThread.js +4 -4
  18. package/dist/cjs/instructions/deleteContractThread.js.map +1 -1
  19. package/dist/cjs/legacy/closeContract.test.js +107 -0
  20. package/dist/cjs/legacy/closeContract.test.js.map +1 -0
  21. package/dist/cjs/package.json +1 -1
  22. package/dist/cjs/utils/fibers.js +12 -16
  23. package/dist/cjs/utils/fibers.js.map +1 -1
  24. package/dist/cjs/utils/fibers.test.js +21 -28
  25. package/dist/cjs/utils/fibers.test.js.map +1 -1
  26. package/dist/cjs/utils/rpc.js +43 -0
  27. package/dist/cjs/utils/rpc.js.map +1 -1
  28. package/dist/cjs/utils/rpc.test.js +60 -0
  29. package/dist/cjs/utils/rpc.test.js.map +1 -0
  30. package/dist/cjs/version.js +1 -1
  31. package/dist/esm/doctor/contract.js +107 -67
  32. package/dist/esm/doctor/contract.js.map +1 -1
  33. package/dist/esm/doctor/contract.test.js +73 -2
  34. package/dist/esm/doctor/contract.test.js.map +1 -1
  35. package/dist/esm/generated/codama/instructions/closeRental.js +12 -0
  36. package/dist/esm/generated/codama/instructions/closeRental.js.map +1 -1
  37. package/dist/esm/idl/srsly.json +53 -2
  38. package/dist/esm/instructions/closeContract.js +29 -43
  39. package/dist/esm/instructions/closeContract.js.map +1 -1
  40. package/dist/esm/instructions/closeContract.test.js +88 -0
  41. package/dist/esm/instructions/closeContract.test.js.map +1 -1
  42. package/dist/esm/instructions/closeContractThread.js +6 -6
  43. package/dist/esm/instructions/closeContractThread.js.map +1 -1
  44. package/dist/esm/instructions/closeRental.js +13 -2
  45. package/dist/esm/instructions/closeRental.js.map +1 -1
  46. package/dist/esm/instructions/deleteContractThread.js +6 -6
  47. package/dist/esm/instructions/deleteContractThread.js.map +1 -1
  48. package/dist/esm/legacy/closeContract.test.js +105 -0
  49. package/dist/esm/legacy/closeContract.test.js.map +1 -0
  50. package/dist/esm/package.json +1 -1
  51. package/dist/esm/utils/fibers.js +11 -15
  52. package/dist/esm/utils/fibers.js.map +1 -1
  53. package/dist/esm/utils/fibers.test.js +22 -29
  54. package/dist/esm/utils/fibers.test.js.map +1 -1
  55. package/dist/esm/utils/rpc.js +41 -0
  56. package/dist/esm/utils/rpc.js.map +1 -1
  57. package/dist/esm/utils/rpc.test.js +58 -0
  58. package/dist/esm/utils/rpc.test.js.map +1 -0
  59. package/dist/esm/version.js +1 -1
  60. package/dist/idl/srsly.json +53 -2
  61. package/dist/types/doctor/contract.d.ts +23 -1
  62. package/dist/types/doctor/contract.d.ts.map +1 -1
  63. package/dist/types/generated/codama/instructions/closeRental.d.ts +46 -1
  64. package/dist/types/generated/codama/instructions/closeRental.d.ts.map +1 -1
  65. package/dist/types/instructions/closeContract.d.ts +6 -3
  66. package/dist/types/instructions/closeContract.d.ts.map +1 -1
  67. package/dist/types/instructions/closeContractThread.d.ts.map +1 -1
  68. package/dist/types/instructions/closeRental.d.ts.map +1 -1
  69. package/dist/types/instructions/deleteContractThread.d.ts.map +1 -1
  70. package/dist/types/legacy/closeContract.test.d.ts +2 -0
  71. package/dist/types/legacy/closeContract.test.d.ts.map +1 -0
  72. package/dist/types/utils/fibers.d.ts +10 -9
  73. package/dist/types/utils/fibers.d.ts.map +1 -1
  74. package/dist/types/utils/rpc.d.ts +18 -0
  75. package/dist/types/utils/rpc.d.ts.map +1 -1
  76. package/dist/types/utils/rpc.test.d.ts +2 -0
  77. package/dist/types/utils/rpc.test.d.ts.map +1 -0
  78. package/dist/types/version.d.ts +1 -1
  79. package/package.json +1 -1
@@ -20,12 +20,15 @@ const thread_2 = require("../pda/thread");
20
20
  const instructions_2 = require("../utils/instructions");
21
21
  const closeRental_1 = require("./closeRental");
22
22
  /**
23
- * Close a rental contract and refund rent to the owner. When no rental is
24
- * active, the contract's automation thread is closed in the same transaction.
23
+ * Close a rental contract and refund rent to the owner. Whenever the close
24
+ * finishes in this transaction, the contract's automation thread is torn down
25
+ * in the same one — the on-chain immediate-close branch refuses to run while
26
+ * `contract.thread` still names a live thread.
25
27
  *
26
28
  * A live rental cannot be closed out from under its borrower, so the close is
27
29
  * latched as `to_close` and completed later by the automation thread, once the
28
- * rental ends. Antegen execution is permissionless and executors are paid from
30
+ * rental ends. On that path the thread is deliberately left running: it is the
31
+ * only thing that can act on the flag. Antegen execution is permissionless and executors are paid from
29
32
  * the thread's own lamport balance, so a drained thread can be revived by
30
33
  * anyone with a plain SOL transfer — the owner does not need to come back.
31
34
  *
@@ -148,9 +151,10 @@ async function closeContract(params, config) {
148
151
  const contractThread = await (0, thread_2.deriveContractThread)(contractAddress, rentalAuthority);
149
152
  const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
150
153
  const fiberIds = Array.from(threadAccount.data.fiberIds);
151
- // `fiber_ids` is what the thread tracks, not what exists see
152
- // `existingFiberAccounts`.
153
- const fiberAccounts = await (0, fibers_1.existingFiberAccounts)(contractThread, fiberIds, finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
154
+ // One account per tracked id, existing or not. Which of them still have
155
+ // anything to close is the thread program's call — see
156
+ // `trackedFiberAccounts`.
157
+ const fiberAccounts = await (0, fibers_1.trackedFiberAccounts)(contractThread, fiberIds);
154
158
  const ix = await (0, instructions_1.getCloseContractThreadInstructionAsync)({ owner: ownerSigner, contract: contractAddress, thread: contractThread }, { programAddress });
155
159
  ix.accounts.push(...fiberAccounts);
156
160
  return ix;
@@ -180,47 +184,29 @@ async function closeContract(params, config) {
180
184
  : {}),
181
185
  }, { programAddress });
182
186
  };
183
- // Compose instructions based on scenario
187
+ // Mirrors `has_live_active_rental` (contract_close.rs:292-302): a live rental
188
+ // defers via `to_close`, anything else closes immediately. Keying the thread
189
+ // decision off "is there a rental" instead conflates an empty slot with a
190
+ // live one and gets the live case backwards.
191
+ const willDefer = hasActiveSlot && !activeExpired;
184
192
  const ixs = [];
185
- if (activeExpired && hasQueuedSlot) {
186
- // Expired active + queued.
193
+ if (activeExpired) {
194
+ // Settle first: the fee flush, CTF points, SAGE invalidate and discount
195
+ // refund only exist in `rental_close`. Without it `contract_close` sweeps
196
+ // the contract ATA to the owner (contract_close.rs:336-350).
187
197
  //
188
- // Order is load-bearing. `closeRental` must NOT promote the challenger
189
- // Path B would install a brand-new live rental and every close after it
190
- // would just re-latch `to_close`. Suppress the activation so the rental
191
- // ends and the slot stays empty (Path A), drop the thread so the
192
- // immediate-close branch isn't blocked by `ThreadStillExists`, then let a
193
- // single `closeContract` force-refund the challenger and close for real.
194
- // 1. Settle the expired active without promoting the queued challenger.
198
+ // `activateQueued` must stay false Path B would install a new live
199
+ // rental and every close after it could only re-latch `to_close`.
195
200
  const closeRentalResult = await (0, closeRental_1.closeRental)({ payer: params.owner, contract: contractAddress, activateQueued: false }, config);
196
201
  ixs.push(...closeRentalResult.instructions);
197
- // 2. closeContractThread (if thread exists)
198
- if (hasThread) {
199
- ixs.push(await buildThreadCloseIx());
200
- }
201
- // 3. closeContract — force-refunds the queued challenger, then closes.
202
- ixs.push(await buildCloseContractIx(true));
203
- }
204
- else if (activeExpired && !hasQueuedSlot) {
205
- // Expired active only, no queued — settle then close
206
- const closeRentalResult = await (0, closeRental_1.closeRental)({ payer: params.owner, contract: contractAddress }, config);
207
- ixs.push(...closeRentalResult.instructions);
208
- if (hasThread) {
209
- ixs.push(await buildThreadCloseIx());
210
- }
211
- ixs.push(await buildCloseContractIx(false));
212
- }
213
- else if (!activeExpired && hasQueuedSlot) {
214
- // Non-expired active + queued — deferred close with queued borrower accounts
215
- ixs.push(await buildCloseContractIx(true));
216
202
  }
217
- else {
218
- // No active rental (or no rental at all) simple close
219
- if (hasThread) {
220
- ixs.push(await buildThreadCloseIx());
221
- }
222
- ixs.push(await buildCloseContractIx(false));
203
+ // Closing now means the thread must go first (ThreadStillExists); deferring
204
+ // means keeping it, since `contract_process` (:260 Signal::Close) is the
205
+ // only automated route from `to_close` to a closed contract.
206
+ if (hasThread && !willDefer) {
207
+ ixs.push(await buildThreadCloseIx());
223
208
  }
209
+ ixs.push(await buildCloseContractIx(hasQueuedSlot));
224
210
  return (0, instructions_2.prepareInstructions)(ixs, {
225
211
  computeUnits: params.computeUnits,
226
212
  PublicKey: finalConfig.PublicKey,
@@ -1 +1 @@
1
- {"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}
@@ -72,6 +72,42 @@ function mockExpiredActiveWithQueued(thread) {
72
72
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
73
  });
74
74
  }
75
+ /**
76
+ * A contract in an arbitrary slot state, with a thread. `activeEndTime` is
77
+ * only read when `active` is set: `1n` is long expired, a far-future value is
78
+ * still live.
79
+ */
80
+ function mockContractState(opts) {
81
+ const thread = opts.thread ?? THREAD_ADDR;
82
+ vitest_1.vi.mocked(contractSnapshot_1.resolveContractSnapshot).mockResolvedValue({
83
+ config: { data: makeConfig(), address: 'CFG' },
84
+ contract: {
85
+ data: makeContract({
86
+ activeRental: opts.active ? ACTIVE_ADDR : SYSTEM,
87
+ queuedRental: opts.queued ? QUEUED_ADDR : SYSTEM,
88
+ thread,
89
+ }),
90
+ address: CONTRACT_ADDR,
91
+ },
92
+ activeRental: opts.active
93
+ ? { data: makeRental({ endTime: opts.activeEndTime ?? 1n }), address: ACTIVE_ADDR }
94
+ : null,
95
+ queuedRental: opts.queued ? { data: makeRental(), address: QUEUED_ADDR } : null,
96
+ nowSeconds: 1_700_000_000,
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ });
99
+ vitest_1.vi.mocked(closeRental_1.closeRental).mockResolvedValue({
100
+ instructions: [{ programAddress: CONTRACT_ADDR, accounts: [], data: new Uint8Array() }],
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ });
103
+ vitest_1.vi.mocked(thread_1.fetchThreadByAddress).mockResolvedValue({
104
+ data: { fiberIds: [0, 1] },
105
+ address: thread,
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ });
108
+ }
109
+ /** Far enough out that the rental is unambiguously still running. */
110
+ const STILL_LIVE = 9999999999n;
75
111
  (0, vitest_1.beforeEach)(() => {
76
112
  vitest_1.vi.clearAllMocks();
77
113
  });
@@ -114,4 +150,56 @@ function mockExpiredActiveWithQueued(thread) {
114
150
  (0, vitest_1.expect)(thread_1.fetchThreadByAddress).not.toHaveBeenCalled();
115
151
  });
116
152
  });
153
+ (0, vitest_1.describe)('closeContract — the thread survives a deferred close', () => {
154
+ // A live rental latches `to_close` and leaves the contract standing.
155
+ // `contract_process` is the only automated path from that flag to a closed
156
+ // contract, so closing the thread here strands it.
157
+ (0, vitest_1.it)('keeps the thread when a live active rental defers the close', async () => {
158
+ mockContractState({ active: true, queued: false, activeEndTime: STILL_LIVE });
159
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
160
+ (0, vitest_1.expect)(thread_1.fetchThreadByAddress).not.toHaveBeenCalled();
161
+ });
162
+ (0, vitest_1.it)('keeps the thread when a live active rental defers alongside a queued one', async () => {
163
+ mockContractState({ active: true, queued: true, activeEndTime: STILL_LIVE });
164
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
165
+ (0, vitest_1.expect)(thread_1.fetchThreadByAddress).not.toHaveBeenCalled();
166
+ });
167
+ (0, vitest_1.it)('does not settle a rental that is still running', async () => {
168
+ // Only an expired rental gets a `closeRental`. Settling a live one would
169
+ // close it out from under its borrower.
170
+ mockContractState({ active: true, queued: false, activeEndTime: STILL_LIVE });
171
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
172
+ (0, vitest_1.expect)(closeRental_1.closeRental).not.toHaveBeenCalled();
173
+ });
174
+ });
175
+ (0, vitest_1.describe)('closeContract — the thread goes when the close finishes now', () => {
176
+ // The mirror: the immediate branch requires the thread gone or it fails with
177
+ // ThreadStillExists.
178
+ (0, vitest_1.it)('closes the thread when the slot is empty', async () => {
179
+ mockContractState({ active: false, queued: false });
180
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
181
+ (0, vitest_1.expect)(thread_1.fetchThreadByAddress).toHaveBeenCalledTimes(1);
182
+ (0, vitest_1.expect)(closeRental_1.closeRental).not.toHaveBeenCalled();
183
+ });
184
+ (0, vitest_1.it)('closes the thread when the slot is empty but a reservation is queued', async () => {
185
+ // Previously missed: a queued reservation with no active rental still
186
+ // closes immediately, so it needs the thread gone just as much.
187
+ mockContractState({ active: false, queued: true });
188
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
189
+ (0, vitest_1.expect)(thread_1.fetchThreadByAddress).toHaveBeenCalledTimes(1);
190
+ });
191
+ (0, vitest_1.it)('closes the thread when the active rental has expired', async () => {
192
+ mockContractState({ active: true, queued: false, activeEndTime: 1n });
193
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
194
+ (0, vitest_1.expect)(thread_1.fetchThreadByAddress).toHaveBeenCalledTimes(1);
195
+ });
196
+ (0, vitest_1.it)('settles an expired rental before closing, exactly once', async () => {
197
+ // The settlement carries the fee flush, CTF points, SAGE invalidate and
198
+ // discount refund. `contract_close` has no equivalent — its immediate
199
+ // branch would sweep the escrow to the owner instead.
200
+ mockContractState({ active: true, queued: false, activeEndTime: 1n });
201
+ await (0, closeContract_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
202
+ (0, vitest_1.expect)(closeRental_1.closeRental).toHaveBeenCalledTimes(1);
203
+ });
204
+ });
117
205
  //# sourceMappingURL=closeContract.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"closeContract.test.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"closeContract.test.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.test.ts"],"names":[],"mappings":"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"}
@@ -42,10 +42,10 @@ async function closeContractThread(params, config) {
42
42
  // Fetch thread account to read actual fiber_ids
43
43
  const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
44
44
  const fiberIds = Array.from(threadAccount.data.fiberIds);
45
- // Only the fibers that still exist `fiber_ids` tracks indices, not
46
- // accounts, and a tracked-but-destroyed fiber makes the close unsendable.
47
- // See `existingFiberAccounts`.
48
- const fiberAccounts = await (0, fibers_1.existingFiberAccounts)(contractThread, fiberIds, finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
45
+ // One account per tracked id, existing or not. Which of them still have
46
+ // anything to close is the thread program's call — see
47
+ // `trackedFiberAccounts`.
48
+ const fiberAccounts = await (0, fibers_1.trackedFiberAccounts)(contractThread, fiberIds);
49
49
  const kitInstruction = await (0, instructions_1.getCloseContractThreadInstructionAsync)({
50
50
  owner: ownerSigner,
51
51
  contract: contractAddress,
@@ -1 +1 @@
1
- {"version":3,"file":"closeContractThread.js","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAwCH,kDAmDC;AAzFD,qCAAiE;AACjE,mEAA0F;AAC1F,4CAAuF;AACvF,4CAA4E;AAC5E,wDAA4D;AAC5D,+CAA0D;AAC1D,0CAAqD;AACrD,4CAAwD;AACxD,wCAAqD;AAsBrD;;;;;;;GAOG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAiC,EACjC,MAA2B;IAE3B,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,aAAO,EAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,IAAA,8BAAqB,EAC/C,cAAc,EACd,QAAQ,EACR,WAAW,CAAC,MAAM,IAAI,IAAA,kBAAS,EAAC,MAAM,CAAC,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,qDAAsC,EACjE;QACE,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"closeContractThread.js","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAwCH,kDA+CC;AArFD,qCAAiE;AACjE,mEAA0F;AAC1F,4CAA4E;AAC5E,4CAA4E;AAC5E,wDAA4D;AAC5D,+CAA0D;AAC1D,0CAAqD;AACrD,4CAAuD;AACvD,wCAAqD;AAsBrD;;;;;;;GAOG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAiC,EACjC,MAA2B;IAE3B,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,aAAO,EAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,wEAAwE;IACxE,uDAAuD;IACvD,0BAA0B;IAC1B,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAE3E,MAAM,cAAc,GAAG,MAAM,IAAA,qDAAsC,EACjE;QACE,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -142,7 +142,18 @@ async function closeRental(params, config) {
142
142
  closeRentalFiber: closeRentalFiberAddress,
143
143
  sageProgram,
144
144
  }, { programAddress });
145
- return (0, instructions_2.prepareInstructions)(kitInstruction, {
145
+ // The program address in an account slot is Anchor's `None` sentinel, but
146
+ // codama stamps it with the role the real account would carry — so
147
+ // `queuedRental` comes back WRITABLE, asking for a write lock on the program
148
+ // being invoked. The runtime demotes it silently; @solana/kit refuses to
149
+ // compile the message at all. Nothing is written through a sentinel.
150
+ const instruction = {
151
+ ...kitInstruction,
152
+ accounts: kitInstruction.accounts.map(account => account.address === programAddress && (0, kit_1.isWritableRole)(account.role)
153
+ ? { ...account, role: (0, kit_1.downgradeRoleToReadonly)(account.role) }
154
+ : account),
155
+ };
156
+ return (0, instructions_2.prepareInstructions)(instruction, {
146
157
  computeUnits: params.computeUnits,
147
158
  PublicKey: finalConfig.PublicKey,
148
159
  });
@@ -1 +1 @@
1
- {"version":3,"file":"closeRental.js","sourceRoot":"","sources":["../../../src/instructions/closeRental.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"closeRental.js","sourceRoot":"","sources":["../../../src/instructions/closeRental.ts"],"names":[],"mappings":"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"}
@@ -44,10 +44,10 @@ async function deleteContractThread(params, config) {
44
44
  // Fetch thread account to read actual fiber_ids
45
45
  const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
46
46
  const fiberIds = Array.from(threadAccount.data.fiberIds);
47
- // Only the fibers that still exist `fiber_ids` tracks indices, not
48
- // accounts, and a tracked-but-destroyed fiber makes the close unsendable.
49
- // See `existingFiberAccounts`.
50
- const fiberAccounts = await (0, fibers_1.existingFiberAccounts)(contractThread, fiberIds, finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
47
+ // One account per tracked id, existing or not. Which of them still have
48
+ // anything to close is the thread program's call — see
49
+ // `trackedFiberAccounts`.
50
+ const fiberAccounts = await (0, fibers_1.trackedFiberAccounts)(contractThread, fiberIds);
51
51
  const kitInstruction = await (0, instructions_1.getDeleteContractThreadInstructionAsync)({
52
52
  admin: adminSigner,
53
53
  thread: contractThread,
@@ -1 +1 @@
1
- {"version":3,"file":"deleteContractThread.js","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAyCH,oDAkDC;AAzFD,qCAAiE;AACjE,mEAA2F;AAC3F,4CAAuF;AACvF,4CAA4E;AAC5E,wDAA4D;AAC5D,+CAA0D;AAC1D,0CAAqD;AACrD,4CAAwD;AACxD,wCAAqD;AAsBrD;;;;;;;;GAQG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAkC,EAClC,MAA2B;IAE3B,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,aAAO,EAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,IAAA,8BAAqB,EAC/C,cAAc,EACd,QAAQ,EACR,WAAW,CAAC,MAAM,IAAI,IAAA,kBAAS,EAAC,MAAM,CAAC,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,sDAAuC,EAClE;QACE,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"deleteContractThread.js","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAyCH,oDA8CC;AArFD,qCAAiE;AACjE,mEAA2F;AAC3F,4CAA4E;AAC5E,4CAA4E;AAC5E,wDAA4D;AAC5D,+CAA0D;AAC1D,0CAAqD;AACrD,4CAAuD;AACvD,wCAAqD;AAsBrD;;;;;;;;GAQG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAkC,EAClC,MAA2B;IAE3B,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,aAAO,EAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,wEAAwE;IACxE,uDAAuD;IACvD,0BAA0B;IAC1B,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAE3E,MAAM,cAAc,GAAG,MAAM,IAAA,sDAAuC,EAClE;QACE,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * The legacy subpath only converts: one instruction in, one out, in order. A
5
+ * duplicate here would be invisible at the call site and land two identical
6
+ * `rental_close` instructions in one transaction.
7
+ */
8
+ const vitest_1 = require("vitest");
9
+ vitest_1.vi.mock('../utils/contractSnapshot', () => ({
10
+ resolveContractSnapshot: vitest_1.vi.fn(),
11
+ }));
12
+ vitest_1.vi.mock('../instructions/closeRental', () => ({
13
+ closeRental: vitest_1.vi.fn(),
14
+ }));
15
+ const contractSnapshot_1 = require("../utils/contractSnapshot");
16
+ const closeRental_1 = require("../instructions/closeRental");
17
+ const index_1 = require("./index");
18
+ const closeContract_1 = require("../generated/codama/instructions/closeContract");
19
+ const SYSTEM = '11111111111111111111111111111111';
20
+ const CONTRACT_ADDR = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
21
+ const ACTIVE_ADDR = 'So11111111111111111111111111111111111111112';
22
+ const OWNER_ADDR = 'BPFLoader2111111111111111111111111111111111';
23
+ const MINT_ADDR = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
24
+ /** Minimal stand-in for web3.js PublicKey — `toLegacy` only stringifies. */
25
+ class StubPublicKey {
26
+ value;
27
+ constructor(value) {
28
+ this.value = String(value);
29
+ }
30
+ toString() {
31
+ return this.value;
32
+ }
33
+ }
34
+ const OWNER_SIGNER = {
35
+ address: OWNER_ADDR,
36
+ signTransactionMessage: vitest_1.vi.fn(),
37
+ };
38
+ /** Marker for the instruction `closeContract` folds in from `closeRental`. */
39
+ const RENTAL_MARKER = new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]);
40
+ /** Expired active rental, no queued reservation, thread already gone. */
41
+ function mockExpiredActiveNoThread() {
42
+ vitest_1.vi.mocked(contractSnapshot_1.resolveContractSnapshot).mockResolvedValue({
43
+ config: {
44
+ data: { atlasMint: MINT_ADDR, slyvault: MINT_ADDR },
45
+ address: 'CFG',
46
+ },
47
+ contract: {
48
+ data: {
49
+ owner: OWNER_ADDR,
50
+ fleet: MINT_ADDR,
51
+ gameId: MINT_ADDR,
52
+ activeRental: ACTIVE_ADDR,
53
+ queuedRental: SYSTEM,
54
+ thread: SYSTEM,
55
+ managedTokenAccount: MINT_ADDR,
56
+ },
57
+ address: CONTRACT_ADDR,
58
+ },
59
+ activeRental: {
60
+ data: {
61
+ borrower: OWNER_ADDR,
62
+ borrowerProfile: MINT_ADDR,
63
+ endTime: 1n,
64
+ },
65
+ address: ACTIVE_ADDR,
66
+ },
67
+ queuedRental: null,
68
+ nowSeconds: 1_700_000_000,
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ });
71
+ vitest_1.vi.mocked(closeRental_1.closeRental).mockResolvedValue({
72
+ instructions: [{ programAddress: CONTRACT_ADDR, accounts: [], data: RENTAL_MARKER }],
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ });
75
+ }
76
+ (0, vitest_1.beforeEach)(() => {
77
+ vitest_1.vi.clearAllMocks();
78
+ (0, index_1.setSdkConfig)({ PublicKey: StubPublicKey });
79
+ });
80
+ (0, vitest_1.describe)('legacy closeContract — conversion does not duplicate', () => {
81
+ (0, vitest_1.it)('builds the underlying rental close exactly once', async () => {
82
+ mockExpiredActiveNoThread();
83
+ await (0, index_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
84
+ (0, vitest_1.expect)(closeRental_1.closeRental).toHaveBeenCalledTimes(1);
85
+ });
86
+ (0, vitest_1.it)('returns one legacy instruction per kit instruction, in order', async () => {
87
+ mockExpiredActiveNoThread();
88
+ const ixs = await (0, index_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
89
+ const startsWith = (data, prefix) => prefix.every((b, i) => data[i] === b);
90
+ (0, vitest_1.expect)(ixs).toHaveLength(2);
91
+ (0, vitest_1.expect)(startsWith(ixs[0].data, RENTAL_MARKER)).toBe(true);
92
+ (0, vitest_1.expect)(startsWith(ixs[1].data, closeContract_1.CLOSE_CONTRACT_DISCRIMINATOR)).toBe(true);
93
+ });
94
+ (0, vitest_1.it)('converts to web3.js shape without cloning entries', async () => {
95
+ mockExpiredActiveNoThread();
96
+ const ixs = await (0, index_1.closeContract)({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
97
+ // Every entry carries a PublicKey-shaped programId and a keys array —
98
+ // the legacy contract — and there are no repeats of the same data buffer.
99
+ const seen = ixs.map(ix => String(ix.programId) + ':' + Array.from(ix.data).join());
100
+ (0, vitest_1.expect)(new Set(seen).size).toBe(ixs.length);
101
+ for (const ix of ixs) {
102
+ (0, vitest_1.expect)(ix.programId).toBeInstanceOf(StubPublicKey);
103
+ (0, vitest_1.expect)(Array.isArray(ix.keys)).toBe(true);
104
+ }
105
+ });
106
+ });
107
+ //# sourceMappingURL=closeContract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closeContract.test.js","sourceRoot":"","sources":["../../../src/legacy/closeContract.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sly-rentals/core",
3
- "version": "5.5.2",
3
+ "version": "6.1.0",
4
4
  "description": "TypeScript SDK for SRSLY",
5
5
  "sideEffects": false,
6
6
  "publishConfig": {
@@ -3,36 +3,32 @@
3
3
  * Resolving a thread's fiber accounts for instructions that close them.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.existingFiberAccounts = existingFiberAccounts;
6
+ exports.trackedFiberAccounts = trackedFiberAccounts;
7
7
  const kit_1 = require("@solana/kit");
8
8
  const thread_1 = require("../pda/thread");
9
- const rpc_1 = require("./rpc");
10
9
  /**
11
10
  * The fiber accounts a close instruction should carry, given what a thread
12
- * tracks.
11
+ * tracks: one per entry in `fiber_ids`, whether or not the account it names
12
+ * still exists.
13
13
  *
14
14
  * `fiber_ids` records the indices a thread *tracks*, and nothing on chain
15
15
  * keeps that list in agreement with the accounts it names — a fiber account
16
16
  * can be closed out from under a thread that still lists it, which is what
17
17
  * the 2026-08-26 rent sweep did to 623 of them.
18
18
  *
19
- * Passing an index whose account is gone makes the fiber program deserialize
20
- * an empty buffer and fail with `InvalidFiberData`, from the `buf.len() < 8`
21
- * branch rather than the discriminator one. It reads like a schema problem
22
- * and is not one, and no caller can work around it, so a contract tracking a
23
- * destroyed fiber becomes impossible to close by anyone.
19
+ * Reconciling the two is the thread program's job, not ours. It is the only
20
+ * participant that can see the list and the accounts *and* edit the list;
21
+ * dropping an index here asserts it needs no accounting for, which is not
22
+ * ours to assert and which `thread_close` rejects it requires every tracked
23
+ * id to be accounted for and fails with `MissingFiberAccounts` otherwise.
24
+ * Passing the account is how an id whose account is gone gets accounted for.
24
25
  *
25
- * A tracked-but-absent fiber has nothing to close, so dropping it is the
26
- * whole remedy. One `getMultipleAccounts` for the batch.
26
+ * Deriving an address is pure computation, so this needs no RPC.
27
27
  */
28
- async function existingFiberAccounts(thread, fiberIds, rpcUrl) {
28
+ async function trackedFiberAccounts(thread, fiberIds) {
29
29
  if (!fiberIds.length)
30
30
  return [];
31
31
  const addresses = await Promise.all(fiberIds.map(id => (0, thread_1.deriveFiber)(thread, id)));
32
- const rpc = (0, rpc_1.createRpc)(rpcUrl);
33
- const { value } = await rpc.getMultipleAccounts(addresses, { encoding: 'base64' }).send();
34
- return addresses
35
- .filter((_, i) => value[i] !== null)
36
- .map(address => ({ address, role: kit_1.AccountRole.WRITABLE }));
32
+ return addresses.map(address => ({ address, role: kit_1.AccountRole.WRITABLE }));
37
33
  }
38
34
  //# sourceMappingURL=fibers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fibers.js","sourceRoot":"","sources":["../../../src/utils/fibers.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAwBH,sDAcC;AApCD,qCAAwD;AACxD,0CAA4C;AAC5C,+BAAkC;AAElC;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,qBAAqB,CACzC,MAAe,EACf,QAAkB,EAClB,MAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,oBAAW,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,IAAA,eAAS,EAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1F,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;SACnC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAW,CAAC,QAAiB,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"fibers.js","sourceRoot":"","sources":["../../../src/utils/fibers.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAwBH,oDASC;AA/BD,qCAAwD;AACxD,0CAA4C;AAE5C;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAe,EACf,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,oBAAW,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAW,CAAC,QAAiB,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC"}