@misofm/platform 0.0.0 → 0.19.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 (168) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +686 -3
  3. package/dist/auth.d.ts +73 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +193 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/catalog.d.ts +48 -0
  8. package/dist/catalog.d.ts.map +1 -0
  9. package/dist/catalog.js +92 -0
  10. package/dist/catalog.js.map +1 -0
  11. package/dist/client.d.ts +459 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +783 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/contracts.d.ts +33 -0
  16. package/dist/contracts.d.ts.map +1 -0
  17. package/dist/contracts.js +48 -0
  18. package/dist/contracts.js.map +1 -0
  19. package/dist/cover.d.ts +69 -0
  20. package/dist/cover.d.ts.map +1 -0
  21. package/dist/cover.js +132 -0
  22. package/dist/cover.js.map +1 -0
  23. package/dist/credits.d.ts +200 -0
  24. package/dist/credits.d.ts.map +1 -0
  25. package/dist/credits.js +465 -0
  26. package/dist/credits.js.map +1 -0
  27. package/dist/deployments.d.ts +221 -0
  28. package/dist/deployments.d.ts.map +1 -0
  29. package/dist/deployments.js +176 -0
  30. package/dist/deployments.js.map +1 -0
  31. package/dist/execute.d.ts +30 -0
  32. package/dist/execute.d.ts.map +1 -0
  33. package/dist/execute.js +31 -0
  34. package/dist/execute.js.map +1 -0
  35. package/dist/index.d.ts +21 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +52 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal.d.ts +13 -0
  40. package/dist/internal.d.ts.map +1 -0
  41. package/dist/internal.js +41 -0
  42. package/dist/internal.js.map +1 -0
  43. package/dist/mix.d.ts +144 -0
  44. package/dist/mix.d.ts.map +1 -0
  45. package/dist/mix.js +656 -0
  46. package/dist/mix.js.map +1 -0
  47. package/dist/pressing.d.ts +137 -0
  48. package/dist/pressing.d.ts.map +1 -0
  49. package/dist/pressing.js +390 -0
  50. package/dist/pressing.js.map +1 -0
  51. package/dist/publication.d.ts +215 -0
  52. package/dist/publication.d.ts.map +1 -0
  53. package/dist/publication.js +864 -0
  54. package/dist/publication.js.map +1 -0
  55. package/dist/queries.d.ts +2 -0
  56. package/dist/queries.d.ts.map +1 -0
  57. package/dist/queries.js +8 -0
  58. package/dist/queries.js.map +1 -0
  59. package/dist/read/artist.d.ts +18 -0
  60. package/dist/read/artist.d.ts.map +1 -0
  61. package/dist/read/artist.js +86 -0
  62. package/dist/read/artist.js.map +1 -0
  63. package/dist/read/catalog.d.ts +93 -0
  64. package/dist/read/catalog.d.ts.map +1 -0
  65. package/dist/read/catalog.js +441 -0
  66. package/dist/read/catalog.js.map +1 -0
  67. package/dist/read/client.d.ts +37 -0
  68. package/dist/read/client.d.ts.map +1 -0
  69. package/dist/read/client.js +50 -0
  70. package/dist/read/client.js.map +1 -0
  71. package/dist/read/config.d.ts +68 -0
  72. package/dist/read/config.d.ts.map +1 -0
  73. package/dist/read/config.js +63 -0
  74. package/dist/read/config.js.map +1 -0
  75. package/dist/read/genres.d.ts +7 -0
  76. package/dist/read/genres.d.ts.map +1 -0
  77. package/dist/read/genres.js +38 -0
  78. package/dist/read/genres.js.map +1 -0
  79. package/dist/read/index.d.ts +14 -0
  80. package/dist/read/index.d.ts.map +1 -0
  81. package/dist/read/index.js +23 -0
  82. package/dist/read/index.js.map +1 -0
  83. package/dist/read/internal/scalars.d.ts +23 -0
  84. package/dist/read/internal/scalars.d.ts.map +1 -0
  85. package/dist/read/internal/scalars.js +57 -0
  86. package/dist/read/internal/scalars.js.map +1 -0
  87. package/dist/read/internal/walrus.d.ts +6 -0
  88. package/dist/read/internal/walrus.d.ts.map +1 -0
  89. package/dist/read/internal/walrus.js +29 -0
  90. package/dist/read/internal/walrus.js.map +1 -0
  91. package/dist/read/receipts.d.ts +41 -0
  92. package/dist/read/receipts.d.ts.map +1 -0
  93. package/dist/read/receipts.js +398 -0
  94. package/dist/read/receipts.js.map +1 -0
  95. package/dist/read/types.d.ts +328 -0
  96. package/dist/read/types.d.ts.map +1 -0
  97. package/dist/read/types.js +21 -0
  98. package/dist/read/types.js.map +1 -0
  99. package/dist/read/wallet.d.ts +74 -0
  100. package/dist/read/wallet.d.ts.map +1 -0
  101. package/dist/read/wallet.js +578 -0
  102. package/dist/read/wallet.js.map +1 -0
  103. package/dist/read/works.d.ts +29 -0
  104. package/dist/read/works.d.ts.map +1 -0
  105. package/dist/read/works.js +191 -0
  106. package/dist/read/works.js.map +1 -0
  107. package/dist/recording-extensions.d.ts +58 -0
  108. package/dist/recording-extensions.d.ts.map +1 -0
  109. package/dist/recording-extensions.js +148 -0
  110. package/dist/recording-extensions.js.map +1 -0
  111. package/dist/release-extensions.d.ts +93 -0
  112. package/dist/release-extensions.d.ts.map +1 -0
  113. package/dist/release-extensions.js +190 -0
  114. package/dist/release-extensions.js.map +1 -0
  115. package/dist/release-graph.d.ts +65 -0
  116. package/dist/release-graph.d.ts.map +1 -0
  117. package/dist/release-graph.js +136 -0
  118. package/dist/release-graph.js.map +1 -0
  119. package/dist/share-template.d.ts +3 -0
  120. package/dist/share-template.d.ts.map +1 -0
  121. package/dist/share-template.js +46 -0
  122. package/dist/share-template.js.map +1 -0
  123. package/dist/share.d.ts +67 -0
  124. package/dist/share.d.ts.map +1 -0
  125. package/dist/share.js +157 -0
  126. package/dist/share.js.map +1 -0
  127. package/dist/transactions.d.ts +216 -0
  128. package/dist/transactions.d.ts.map +1 -0
  129. package/dist/transactions.js +314 -0
  130. package/dist/transactions.js.map +1 -0
  131. package/dist/vault.d.ts +364 -0
  132. package/dist/vault.d.ts.map +1 -0
  133. package/dist/vault.js +507 -0
  134. package/dist/vault.js.map +1 -0
  135. package/package.json +145 -5
  136. package/src/auth.ts +275 -0
  137. package/src/catalog.ts +189 -0
  138. package/src/client.ts +1310 -0
  139. package/src/contracts.ts +53 -0
  140. package/src/cover.ts +240 -0
  141. package/src/credits.ts +906 -0
  142. package/src/deployments.ts +354 -0
  143. package/src/execute.ts +52 -0
  144. package/src/index.ts +69 -0
  145. package/src/internal.ts +46 -0
  146. package/src/mix.ts +910 -0
  147. package/src/pressing.ts +705 -0
  148. package/src/publication.ts +1205 -0
  149. package/src/queries.ts +9 -0
  150. package/src/read/artist.ts +118 -0
  151. package/src/read/catalog.ts +668 -0
  152. package/src/read/client.ts +87 -0
  153. package/src/read/config.ts +138 -0
  154. package/src/read/genres.ts +37 -0
  155. package/src/read/index.ts +85 -0
  156. package/src/read/internal/scalars.ts +59 -0
  157. package/src/read/internal/walrus.ts +42 -0
  158. package/src/read/receipts.ts +476 -0
  159. package/src/read/types.ts +415 -0
  160. package/src/read/wallet.ts +687 -0
  161. package/src/read/works.ts +297 -0
  162. package/src/recording-extensions.ts +241 -0
  163. package/src/release-extensions.ts +311 -0
  164. package/src/release-graph.ts +219 -0
  165. package/src/share-template.ts +55 -0
  166. package/src/share.ts +261 -0
  167. package/src/transactions.ts +542 -0
  168. package/src/vault.ts +1009 -0
package/dist/vault.js ADDED
@@ -0,0 +1,507 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { deriveObjectID, normalizeStructTag } from "@mysten/sui/utils";
4
+ import * as vault from "@misofm/protocol/contracts/vault/vault";
5
+ import * as releaseRevenueDistributor from "@misofm/protocol/contracts/release_revenue_distributor/release_revenue_distributor";
6
+ import * as compositionRoyaltyPoolPlugin from "@misofm/protocol/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin";
7
+ import * as recordingRoyaltyPoolPlugin from "@misofm/protocol/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin";
8
+ import * as releaseRevenueDistributorPlugin from "@misofm/protocol/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin";
9
+ import * as routedStake from "@misofm/protocol/contracts/routed_stake/routed_stake";
10
+ /** The framework singleton read by `balance::settled_funds_value`. */
11
+ export const SUI_ACCUMULATOR_ROOT_OBJECT_ID = "0xacc";
12
+ function object(tx, value) {
13
+ return typeof value === "string" ? tx.object(value) : value;
14
+ }
15
+ export function directAdminCap(adminCap) {
16
+ return { kind: "direct", adminCap };
17
+ }
18
+ function requiredVaultResult(result, index, command) {
19
+ const value = result[index];
20
+ if (value === undefined)
21
+ throw new Error(`${command} did not return result ${index}`);
22
+ return value;
23
+ }
24
+ export function vaultAdminCap(authority) {
25
+ return { kind: "vault", ...authority };
26
+ }
27
+ /**
28
+ * Invoke one cap-authorized Move call without exposing a borrowed cap to JS.
29
+ * The returned PTB result belongs to `call.target`, never to the Vault borrow.
30
+ */
31
+ export function invokeWithAdminCap(tx, authority, call) {
32
+ if (call.adminCapIndex < 0 || call.adminCapIndex > call.arguments.length) {
33
+ throw new Error("admin cap argument index is out of range");
34
+ }
35
+ const invoke = (adminCap) => tx.moveCall({
36
+ target: call.target,
37
+ typeArguments: call.typeArguments,
38
+ arguments: [
39
+ ...call.arguments.slice(0, call.adminCapIndex),
40
+ adminCap,
41
+ ...call.arguments.slice(call.adminCapIndex),
42
+ ],
43
+ });
44
+ if (authority.kind === "direct")
45
+ return invoke(object(tx, authority.adminCap));
46
+ const borrowed = tx.add(vault.borrowAsAdmin({
47
+ package: authority.vaultPackageId,
48
+ typeArguments: [authority.capType],
49
+ arguments: [object(tx, authority.vault), object(tx, authority.vaultAdminCap)],
50
+ }));
51
+ const adminCap = borrowed[0];
52
+ const receipt = borrowed[1];
53
+ if (adminCap === undefined || receipt === undefined) {
54
+ throw new Error("vault::borrow_as_admin returned an incomplete result");
55
+ }
56
+ const result = invoke(adminCap);
57
+ tx.add(vault.putBack({
58
+ package: authority.vaultPackageId,
59
+ typeArguments: [authority.capType],
60
+ arguments: [authority.vault, adminCap, receipt],
61
+ }));
62
+ return result;
63
+ }
64
+ /** Explicitly transfer a new cap or custody it before the PTB finishes. */
65
+ export function disposeNewAdminCap(tx, adminCap, custody) {
66
+ if (custody.kind === "direct") {
67
+ tx.transferObjects([adminCap], custody.owner);
68
+ return;
69
+ }
70
+ custodyNewAdminCap(tx, {
71
+ adminCap,
72
+ vaultRegistry: custody.vaultRegistry,
73
+ capType: custody.capType,
74
+ vaultPackageId: custody.vaultPackageId,
75
+ owner: custody.owner,
76
+ configure: custody.configure,
77
+ });
78
+ }
79
+ /** Withdraw the raw capability while leaving its canonical Vault shell intact. */
80
+ export function withdrawVaultCapability(tx, params) {
81
+ return tx.add(vault.withdrawCap({
82
+ package: params.vaultPackageId,
83
+ typeArguments: [params.capType],
84
+ arguments: [object(tx, params.vault), object(tx, params.vaultAdminCap)],
85
+ }));
86
+ }
87
+ /** Restore the one exact capability permanently assigned to a Vault. */
88
+ export function restoreVaultCapability(tx, params) {
89
+ tx.add(vault.restoreCap({
90
+ package: params.vaultPackageId,
91
+ typeArguments: [params.capType],
92
+ arguments: [
93
+ object(tx, params.vault),
94
+ object(tx, params.vaultAdminCap),
95
+ object(tx, params.adminCap),
96
+ ],
97
+ }));
98
+ }
99
+ /** Transfer the `key + store` VaultAdminCap to its next owner. */
100
+ export function transferVaultAdminCap(tx, params) {
101
+ tx.transferObjects([object(tx, params.vaultAdminCap)], params.owner);
102
+ }
103
+ /**
104
+ * Custody a freshly-created raw admin cap, optionally configure it, share the
105
+ * Vault, then transfer only the VaultAdminCap to its owner.
106
+ */
107
+ export function custodyNewAdminCap(tx, params) {
108
+ const created = tx.add(vault._new({
109
+ package: params.vaultPackageId,
110
+ typeArguments: [params.capType],
111
+ arguments: [object(tx, params.vaultRegistry), params.adminCap],
112
+ }));
113
+ const vaultObject = requiredVaultResult(created, 0, "vault::_new");
114
+ const vaultAdminCap = requiredVaultResult(created, 1, "vault::_new");
115
+ params.configure?.(vaultObject, vaultAdminCap);
116
+ tx.add(vault.share({
117
+ package: params.vaultPackageId,
118
+ typeArguments: [params.capType],
119
+ arguments: [vaultObject],
120
+ }));
121
+ transferVaultAdminCap(tx, {
122
+ vaultAdminCap,
123
+ owner: params.owner,
124
+ capType: params.capType,
125
+ vaultPackageId: params.vaultPackageId,
126
+ });
127
+ }
128
+ /** Derive the canonical Vault ID without an RPC lookup. */
129
+ export function deriveVaultId(params) {
130
+ const keyType = normalizeStructTag(`${params.vaultPackageId}::vault::VaultKey<${params.capType}>`);
131
+ return deriveObjectID(params.vaultRegistryId, keyType, vault.VaultKey.serialize([params.capId]).toBytes());
132
+ }
133
+ /** Derive the canonical VaultAdminCap ID from its Vault ID. */
134
+ export function deriveVaultAdminCapId(vaultId, vaultPackageId) {
135
+ return deriveObjectID(vaultId, `${vaultPackageId}::vault::VaultAdminCapKey`, vault.VaultAdminCapKey.serialize([false]).toBytes());
136
+ }
137
+ /** Install the composition royalty-pool plugin; its witness stays internal. */
138
+ export function installCompositionRoyaltyPoolPlugin(tx, params) {
139
+ tx.add(compositionRoyaltyPoolPlugin.install({
140
+ package: params.pluginPackageId,
141
+ typeArguments: [params.compositionShareType],
142
+ arguments: [params.vault, params.vaultAdminCap],
143
+ }));
144
+ }
145
+ export function uninstallCompositionRoyaltyPoolPlugin(tx, params) {
146
+ tx.add(compositionRoyaltyPoolPlugin.uninstall({
147
+ package: params.pluginPackageId,
148
+ typeArguments: [params.compositionShareType],
149
+ arguments: [params.vault, params.vaultAdminCap],
150
+ }));
151
+ }
152
+ /** Create the canonical pool without sharing it so callers can configure fresh stakes first. */
153
+ export function newCompositionRoyaltyPool(tx, params) {
154
+ return invokeWithAdminCap(tx, params.authority, {
155
+ target: `${params.actionPackageId}::composition_royalty_pool::new_pool`,
156
+ typeArguments: [params.compositionShareType, params.currencyType],
157
+ arguments: [params.composition],
158
+ adminCapIndex: 1,
159
+ });
160
+ }
161
+ /** Validate an SDK scalar before serializing it as a Move u64. */
162
+ export function asU64(name, value) {
163
+ if (typeof value === "number" && (!Number.isSafeInteger(value) || value < 0)) {
164
+ throw new Error(`${name}: number must be a non-negative safe integer; use bigint or decimal string`);
165
+ }
166
+ if (typeof value === "string" && !/^(0|[1-9][0-9]*)$/.test(value)) {
167
+ throw new Error(`${name}: expected an unsigned decimal u64`);
168
+ }
169
+ const parsed = typeof value === "bigint" ? value : BigInt(value);
170
+ if (parsed < 0n || parsed > 18446744073709551615n) {
171
+ throw new Error(`${name}: value is outside u64`);
172
+ }
173
+ return parsed;
174
+ }
175
+ function asU64Argument(tx, name, value) {
176
+ if (typeof value === "bigint" ||
177
+ typeof value === "string" ||
178
+ typeof value === "number") {
179
+ return tx.pure.u64(asU64(name, value));
180
+ }
181
+ return value;
182
+ }
183
+ /** Read the commit-settled accumulator balance for an address inside this PTB. */
184
+ export function settledFundsValue(tx, params) {
185
+ return tx.moveCall({
186
+ target: "0x2::balance::settled_funds_value",
187
+ typeArguments: [params.currencyType],
188
+ arguments: [
189
+ object(tx, params.accumulatorRoot ?? SUI_ACCUMULATOR_ROOT_OBJECT_ID),
190
+ typeof params.address === "string"
191
+ ? tx.pure.address(params.address)
192
+ : params.address,
193
+ ],
194
+ });
195
+ }
196
+ /** Permissionless crank: redeem an exact Composition amount into its pool. */
197
+ export function redeemAndDepositCompositionRoyaltyPool(tx, params) {
198
+ tx.add(compositionRoyaltyPoolPlugin.redeemAndDeposit({
199
+ package: params.pluginPackageId,
200
+ typeArguments: [params.compositionShareType, params.currencyType],
201
+ arguments: [
202
+ params.vault,
203
+ params.composition,
204
+ params.pool,
205
+ asU64Argument(tx, "value", params.value),
206
+ ],
207
+ }));
208
+ }
209
+ /** Redeem exactly the framework-reported settled Composition funds. */
210
+ export function settleCompositionRoyaltyPool(tx, params) {
211
+ const value = settledFundsValue(tx, {
212
+ address: params.compositionId,
213
+ currencyType: params.currencyType,
214
+ accumulatorRoot: params.accumulatorRoot,
215
+ });
216
+ redeemAndDepositCompositionRoyaltyPool(tx, {
217
+ ...params,
218
+ composition: tx.object(params.compositionId),
219
+ value,
220
+ });
221
+ }
222
+ /** Permissionless crank: receive selected Composition-owned coins into the pool. */
223
+ export function receiveCompositionRoyaltyPool(tx, params) {
224
+ tx.add(compositionRoyaltyPoolPlugin.receiveAndDeposit({
225
+ package: params.pluginPackageId,
226
+ typeArguments: [params.compositionShareType, params.currencyType],
227
+ arguments: [
228
+ params.vault,
229
+ params.composition,
230
+ params.pool,
231
+ receivingCoins(tx, params.currencyType, params.coins),
232
+ ],
233
+ }));
234
+ }
235
+ export function installRecordingRoyaltyPoolPlugin(tx, params) {
236
+ tx.add(recordingRoyaltyPoolPlugin.install({
237
+ package: params.pluginPackageId,
238
+ typeArguments: [params.recordingShareType],
239
+ arguments: [params.vault, params.vaultAdminCap],
240
+ }));
241
+ }
242
+ /** Receive selected Party-owned coins and return their merged Balance. */
243
+ export function receivePartyWalletBalance(tx, params) {
244
+ return invokeWithAdminCap(tx, params.authority, {
245
+ target: `${params.actionPackageId}::party_wallet::receive_balance`,
246
+ typeArguments: [params.currencyType],
247
+ arguments: [params.party, receivingCoins(tx, params.currencyType, params.coins)],
248
+ adminCapIndex: 1,
249
+ });
250
+ }
251
+ /** Redeem an exact Party accumulator amount and return its Balance. */
252
+ export function redeemPartyWalletBalance(tx, params) {
253
+ return invokeWithAdminCap(tx, params.authority, {
254
+ target: `${params.actionPackageId}::party_wallet::redeem_balance`,
255
+ typeArguments: [params.currencyType],
256
+ arguments: [params.party, asU64Argument(tx, "value", params.value)],
257
+ adminCapIndex: 1,
258
+ });
259
+ }
260
+ /** Redeem exactly the framework-reported settled Party funds. */
261
+ export function settlePartyWalletBalance(tx, params) {
262
+ const value = settledFundsValue(tx, {
263
+ address: params.partyId,
264
+ currencyType: params.currencyType,
265
+ accumulatorRoot: params.accumulatorRoot,
266
+ });
267
+ return redeemPartyWalletBalance(tx, {
268
+ ...params,
269
+ party: tx.object(params.partyId),
270
+ value,
271
+ });
272
+ }
273
+ export function uninstallRecordingRoyaltyPoolPlugin(tx, params) {
274
+ tx.add(recordingRoyaltyPoolPlugin.uninstall({
275
+ package: params.pluginPackageId,
276
+ typeArguments: [params.recordingShareType],
277
+ arguments: [params.vault, params.vaultAdminCap],
278
+ }));
279
+ }
280
+ /** Create the canonical pool without sharing it so callers can configure fresh stakes first. */
281
+ export function newRecordingRoyaltyPool(tx, params) {
282
+ return invokeWithAdminCap(tx, params.authority, {
283
+ target: `${params.actionPackageId}::recording_royalty_pool::new_pool`,
284
+ typeArguments: [
285
+ params.recordingShareType,
286
+ params.compositionShareType,
287
+ params.currencyType,
288
+ ],
289
+ arguments: [params.recording],
290
+ adminCapIndex: 1,
291
+ });
292
+ }
293
+ /** Permissionless crank: redeem an exact Recording amount into its pool. */
294
+ export function redeemAndDepositRecordingRoyaltyPool(tx, params) {
295
+ tx.add(recordingRoyaltyPoolPlugin.redeemAndDeposit({
296
+ package: params.pluginPackageId,
297
+ typeArguments: [
298
+ params.recordingShareType,
299
+ params.compositionShareType,
300
+ params.currencyType,
301
+ ],
302
+ arguments: [
303
+ params.vault,
304
+ params.recording,
305
+ params.pool,
306
+ asU64Argument(tx, "value", params.value),
307
+ ],
308
+ }));
309
+ }
310
+ /** Redeem exactly the framework-reported settled Recording funds. */
311
+ export function settleRecordingRoyaltyPool(tx, params) {
312
+ const value = settledFundsValue(tx, {
313
+ address: params.recordingId,
314
+ currencyType: params.currencyType,
315
+ accumulatorRoot: params.accumulatorRoot,
316
+ });
317
+ redeemAndDepositRecordingRoyaltyPool(tx, {
318
+ ...params,
319
+ recording: tx.object(params.recordingId),
320
+ value,
321
+ });
322
+ }
323
+ /** Permissionless crank: receive selected Recording-owned coins into the pool. */
324
+ export function receiveRecordingRoyaltyPool(tx, params) {
325
+ tx.add(recordingRoyaltyPoolPlugin.receiveAndDeposit({
326
+ package: params.pluginPackageId,
327
+ typeArguments: [
328
+ params.recordingShareType,
329
+ params.compositionShareType,
330
+ params.currencyType,
331
+ ],
332
+ arguments: [
333
+ params.vault,
334
+ params.recording,
335
+ params.pool,
336
+ receivingCoins(tx, params.currencyType, params.coins),
337
+ ],
338
+ }));
339
+ }
340
+ export function installReleaseRevenueDistributorPlugin(tx, params) {
341
+ tx.add(releaseRevenueDistributorPlugin.install({
342
+ package: params.pluginPackageId,
343
+ arguments: [params.vault, params.vaultAdminCap],
344
+ }));
345
+ }
346
+ export function uninstallReleaseRevenueDistributorPlugin(tx, params) {
347
+ tx.add(releaseRevenueDistributorPlugin.uninstall({ package: params.pluginPackageId, arguments: [params.vault, params.vaultAdminCap] }));
348
+ }
349
+ /** Raw-admin composition: redeem an explicit amount and route it by track BPS. */
350
+ export function redeemAndDistributeReleaseRevenue(tx, params) {
351
+ invokeWithAdminCap(tx, params.authority, {
352
+ target: `${params.actionPackageId}::release_revenue_distributor::redeem_and_distribute`,
353
+ typeArguments: [params.currencyType],
354
+ arguments: [params.release, asU64Argument(tx, "value", params.value)],
355
+ adminCapIndex: 1,
356
+ });
357
+ }
358
+ /** Fixed permissionless crank: redeem the commit-settled Release balance. */
359
+ export function redeemAllAndDistributeReleaseRevenue(tx, params) {
360
+ tx.add(releaseRevenueDistributorPlugin.redeemAllAndDistribute({
361
+ package: params.pluginPackageId,
362
+ typeArguments: [params.currencyType],
363
+ arguments: [
364
+ params.vault,
365
+ params.release,
366
+ object(tx, params.accumulatorRoot ?? SUI_ACCUMULATOR_ROOT_OBJECT_ID),
367
+ ],
368
+ }));
369
+ }
370
+ /** Convenience form of the fixed crank for a known Release object ID. */
371
+ export function settleAndDistributeReleaseRevenue(tx, params) {
372
+ redeemAllAndDistributeReleaseRevenue(tx, {
373
+ ...params,
374
+ release: tx.object(params.releaseId),
375
+ });
376
+ }
377
+ /** Permissionless crank: receive release-owned coins and route them by track BPS. */
378
+ export function receiveAndDistributeReleaseRevenue(tx, params) {
379
+ tx.add(releaseRevenueDistributorPlugin.receiveAndDistribute({
380
+ package: params.pluginPackageId,
381
+ typeArguments: [params.currencyType],
382
+ arguments: [
383
+ params.vault,
384
+ params.release,
385
+ receivingCoins(tx, params.currencyType, params.coins),
386
+ ],
387
+ }));
388
+ }
389
+ export function createCompositionRoutedStake(tx, params) {
390
+ return invokeWithAdminCap(tx, params.authority, {
391
+ target: `${params.actionPackageId}::composition_routed_stake::create_stake`,
392
+ typeArguments: [params.recordingShareType, params.compositionShareType],
393
+ arguments: [params.composition, params.recording, tx.pure.u64(asU64("value", params.value))],
394
+ adminCapIndex: 1,
395
+ });
396
+ }
397
+ /** Register the routed stake with the matching Recording royalty pool. */
398
+ export function registerCompositionRoutedStake(tx, params) {
399
+ invokeWithAdminCap(tx, params.authority, {
400
+ target: `${params.actionPackageId}::composition_routed_stake::register`,
401
+ typeArguments: [params.recordingShareType, params.compositionShareType, params.currencyType],
402
+ arguments: [params.composition, params.recording, params.routedStake, params.royaltyPool],
403
+ adminCapIndex: 1,
404
+ });
405
+ }
406
+ /** Share a configured routed stake so anyone can sweep its rewards to the parent pool. */
407
+ export function shareRoutedStake(tx, params) {
408
+ tx.add(routedStake.share({
409
+ package: params.routedStakePackageId,
410
+ typeArguments: [params.stakeShareType, params.poolShareType],
411
+ arguments: [params.routedStake],
412
+ }));
413
+ }
414
+ /** Unregister a routed stake after pending rewards have been swept. */
415
+ export function unregisterCompositionRoutedStake(tx, params) {
416
+ invokeWithAdminCap(tx, params.authority, {
417
+ target: `${params.actionPackageId}::composition_routed_stake::unregister`,
418
+ typeArguments: [params.recordingShareType, params.compositionShareType, params.currencyType],
419
+ arguments: [params.composition, params.recording, params.routedStake, params.royaltyPool],
420
+ adminCapIndex: 1,
421
+ });
422
+ }
423
+ /** Unstake and return the routed principal for caller-selected composition. */
424
+ export function unstakeCompositionRoutedStake(tx, params) {
425
+ return invokeWithAdminCap(tx, params.authority, {
426
+ target: `${params.actionPackageId}::composition_routed_stake::unstake`,
427
+ typeArguments: [params.recordingShareType, params.compositionShareType],
428
+ arguments: [params.composition, params.routedStake],
429
+ adminCapIndex: 1,
430
+ });
431
+ }
432
+ /** Refill an empty routed stake with caller-supplied Recording shares. */
433
+ export function restakeCompositionRoutedStake(tx, params) {
434
+ invokeWithAdminCap(tx, params.authority, {
435
+ target: `${params.actionPackageId}::composition_routed_stake::restake`,
436
+ typeArguments: [params.recordingShareType, params.compositionShareType],
437
+ arguments: [params.composition, params.routedStake, params.shares],
438
+ adminCapIndex: 1,
439
+ });
440
+ }
441
+ /** Permissionlessly sweep a routed stake's accrued rewards into its parent pool. */
442
+ export function sweepRoutedStake(tx, params) {
443
+ tx.add(routedStake.sweep({
444
+ package: params.routedStakePackageId,
445
+ typeArguments: [params.stakeShareType, params.poolShareType, params.currencyType],
446
+ arguments: [object(tx, params.routedStake), object(tx, params.stakePool), object(tx, params.royaltyPool), params.parentId],
447
+ }));
448
+ }
449
+ /** Parse a VaultAdminCap whose phantom capability does not affect BCS layout. */
450
+ export function parseVaultAdminCap(content) {
451
+ return vault.VaultAdminCap.parse(content);
452
+ }
453
+ /** Parse lifecycle events whose phantom type parameters do not affect BCS. */
454
+ export function parseVaultCreatedEvent(content) {
455
+ return vault.VaultCreatedEvent.parse(content);
456
+ }
457
+ /** Parse the release-distribution summary event into JSON-safe quantities. */
458
+ export function parseReleaseRevenueDistributedEvent(content) {
459
+ const event = releaseRevenueDistributor.ReleaseRevenueDistributedEvent.parse(content);
460
+ return {
461
+ releaseId: event.release_id,
462
+ totalInput: event.total_input.toString(),
463
+ totalDistributed: event.total_distributed.toString(),
464
+ remainder: event.remainder.toString(),
465
+ };
466
+ }
467
+ /** Parse one per-track routing event, retaining its u64 values as strings. */
468
+ export function parseReleaseTrackRevenueDistributedEvent(content) {
469
+ const event = releaseRevenueDistributor.ReleaseTrackRevenueDistributedEvent.parse(content);
470
+ return {
471
+ releaseId: event.release_id,
472
+ trackIndex: event.track_index.toString(),
473
+ recordingId: event.recording_id,
474
+ amount: event.amount.toString(),
475
+ };
476
+ }
477
+ /** Read and BCS-parse an owner-held VaultAdminCap. */
478
+ export async function getVaultAdminCap(client, vaultAdminCapId, expected) {
479
+ const { object } = await client.core.getObject({
480
+ objectId: vaultAdminCapId,
481
+ include: { content: true },
482
+ });
483
+ if (!object || object instanceof Error || !object.content)
484
+ return null;
485
+ const expectedType = normalizeStructTag(`${expected.vaultPackageId}::vault::VaultAdminCap<${expected.capType}>`);
486
+ if (!object.type || normalizeStructTag(object.type) !== expectedType) {
487
+ throw new Error(`getVaultAdminCap: expected ${expectedType}, received ${object.type ?? "unknown"}`);
488
+ }
489
+ return parseVaultAdminCap(object.content);
490
+ }
491
+ /** Resolve owned coins to the exact references required by a Receiving input. */
492
+ export async function resolveReceivingCoins(client, coinIds) {
493
+ const { objects } = await client.core.getObjects({ objectIds: [...coinIds] });
494
+ return objects.map((coin, index) => {
495
+ if (coin instanceof Error || !coin) {
496
+ throw new Error(`resolveReceivingCoins: could not resolve ${coinIds[index]}`);
497
+ }
498
+ return { objectId: coin.objectId, version: coin.version, digest: coin.digest };
499
+ });
500
+ }
501
+ export function receivingCoins(tx, currencyType, coins) {
502
+ return tx.makeMoveVec({
503
+ type: `0x2::transfer::Receiving<0x2::coin::Coin<${currencyType}>>`,
504
+ elements: coins.map((coin) => tx.receivingRef(coin)),
505
+ });
506
+ }
507
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sCAAsC;AAoBtC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAC;AAChE,OAAO,KAAK,yBAAyB,MAAM,oFAAoF,CAAC;AAChI,OAAO,KAAK,4BAA4B,MAAM,4FAA4F,CAAC;AAC3I,OAAO,KAAK,0BAA0B,MAAM,wFAAwF,CAAC;AACrI,OAAO,KAAK,+BAA+B,MAAM,kGAAkG,CAAC;AACpJ,OAAO,KAAK,WAAW,MAAM,sDAAsD,CAAC;AAMpF,sEAAsE;AACtE,MAAM,CAAC,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAEtD,SAAS,MAAM,CAAC,EAAe,EAAE,KAAkB;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9D,CAAC;AAsBD,MAAM,UAAU,cAAc,CAC5B,QAAqB;IAErB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAmD,EACnD,KAAa,EACb,OAAe;IAEf,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,0BAA0B,KAAK,EAAE,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAA+C;IAE/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;AACzC,CAAC;AAqBD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAe,EACf,SAA4B,EAC5B,IAAsB;IAEtB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,QAA6B,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC5D,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,SAAS,EAAE;YACT,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;YAC9C,QAAQ;YACR,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;SAC5C;KACF,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/E,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CACrB,KAAK,CAAC,aAAa,CAAC;QAClB,OAAO,EAAE,SAAS,CAAC,cAAc;QACjC,aAAa,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;QAClC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;KAC9E,CAAC,CACH,CAAC;IACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,EAAE,CAAC,GAAG,CACJ,KAAK,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,SAAS,CAAC,cAAc;QACjC,aAAa,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;QAClC,SAAS,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;KAChD,CAAC,CACH,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AA8BD,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAChC,EAAe,EACf,QAAmC,EACnC,OAAwB;IAExB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,kBAAkB,CAAC,EAAE,EAAE;QACrB,QAAQ;QACR,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,uBAAuB,CACrC,EAAe,EACf,MAKC;IAED,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC,cAAc;QAC9B,aAAa,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;KACxE,CAAC,CAAC,CAAC;AACN,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,sBAAsB,CACpC,EAAe,EACf,MAMC;IAED,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC,cAAc;QAC9B,aAAa,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,SAAS,EAAE;YACT,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;YACxB,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC;YAChC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;SAC5B;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CACnC,EAAe,EACf,MAKC;IAED,EAAE,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAe,EACf,MAAgC;IAEhC,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CACpB,KAAK,CAAC,IAAI,CAAC;QACT,OAAO,EAAE,MAAM,CAAC,cAAc;QAC9B,aAAa,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;KAC/D,CAAC,CACH,CAAC;IACF,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/C,EAAE,CAAC,GAAG,CACJ,KAAK,CAAC,KAAK,CAAC;QACV,OAAO,EAAE,MAAM,CAAC,cAAc;QAC9B,aAAa,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,SAAS,EAAE,CAAC,WAAW,CAAC;KACzB,CAAC,CACH,CAAC;IACF,qBAAqB,CAAC,EAAE,EAAE;QACxB,aAAa;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;AACL,CAAC;AASD,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,MAAM,OAAO,GAAG,kBAAkB,CAChC,GAAG,MAAM,CAAC,cAAc,qBAAqB,MAAM,CAAC,OAAO,GAAG,CAC/D,CAAC;IACF,OAAO,cAAc,CACnB,MAAM,CAAC,eAAe,EACtB,OAAO,EACP,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CACnD,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,cAAsB;IAEtB,OAAO,cAAc,CACnB,OAAO,EACP,GAAG,cAAc,2BAA2B,EAC5C,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CACpD,CAAC;AACJ,CAAC;AASD,+EAA+E;AAC/E,MAAM,UAAU,mCAAmC,CACjD,EAAe,EACf,MAA0C;IAE1C,EAAE,CAAC,GAAG,CACJ,4BAA4B,CAAC,OAAO,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC5C,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,EAAe,EACf,MAA0C;IAE1C,EAAE,CAAC,GAAG,CACJ,4BAA4B,CAAC,SAAS,CAAC;QACrC,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC5C,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC,CACH,CAAC;AACJ,CAAC;AAUD,gGAAgG;AAChG,MAAM,UAAU,yBAAyB,CACvC,EAAe,EACf,MAAuC;IAEvC,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,sCAAsC;QACvE,aAAa,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,YAAY,CAAC;QACjE,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QAC/B,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAiBD,kEAAkE;AAClE,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,KAAe;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4EAA4E,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oCAAoC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,qBAA2B,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,EAAe,EAAE,IAAY,EAAE,KAAkB;IACtE,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAC/B,EAAe,EACf,MAIC;IAED,OAAO,EAAE,CAAC,QAAQ,CAAC;QACjB,MAAM,EAAE,mCAAmC;QAC3C,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE;YACT,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,eAAe,IAAI,8BAA8B,CAAC;YACpE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;gBAChC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBACjC,CAAC,CAAC,MAAM,CAAC,OAAO;SACnB;KACF,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,sCAAsC,CACpD,EAAe,EACf,MAEC;IAED,EAAE,CAAC,GAAG,CACJ,4BAA4B,CAAC,gBAAgB,CAAC;QAC5C,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,YAAY,CAAC;QACjE,SAAS,EAAE;YACT,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,WAAW;YAClB,MAAM,CAAC,IAAI;YACX,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACzC;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,4BAA4B,CAC1C,EAAe,EACf,MAGC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC,aAAa;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC,CAAC;IACH,sCAAsC,CAAC,EAAE,EAAE;QACzC,GAAG,MAAM;QACT,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC5C,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,6BAA6B,CAC3C,EAAe,EACf,MAA6F;IAE7F,EAAE,CAAC,GAAG,CACJ,4BAA4B,CAAC,iBAAiB,CAAC;QAC7C,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,YAAY,CAAC;QACjE,SAAS,EAAE;YACT,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,WAAW;YAClB,MAAM,CAAC,IAAI;YACX,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;SACtD;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,iCAAiC,CAC/C,EAAe,EACf,MAAwC;IAExC,EAAE,CAAC,GAAG,CACJ,0BAA0B,CAAC,OAAO,CAAC;QACjC,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAC1C,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC,CACH,CAAC;AACJ,CAAC;AASD,0EAA0E;AAC1E,MAAM,UAAU,yBAAyB,CACvC,EAAe,EACf,MAAkF;IAElF,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,iCAAiC;QAClE,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAChF,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,wBAAwB,CACtC,EAAe,EACf,MAAgE;IAEhE,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,gCAAgC;QACjE,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CACtC,EAAe,EACf,MAGC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC,CAAC;IACH,OAAO,wBAAwB,CAAC,EAAE,EAAE;QAClC,GAAG,MAAM;QACT,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAChC,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,EAAe,EACf,MAAwC;IAExC,EAAE,CAAC,GAAG,CACJ,0BAA0B,CAAC,SAAS,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAC1C,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC,CACH,CAAC;AACJ,CAAC;AAWD,gGAAgG;AAChG,MAAM,UAAU,uBAAuB,CACrC,EAAe,EACf,MAAqC;IAErC,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,oCAAoC;QACrE,aAAa,EAAE;YACb,MAAM,CAAC,kBAAkB;YACzB,MAAM,CAAC,oBAAoB;YAC3B,MAAM,CAAC,YAAY;SACpB;QACD,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7B,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAYD,4EAA4E;AAC5E,MAAM,UAAU,oCAAoC,CAClD,EAAe,EACf,MAEC;IAED,EAAE,CAAC,GAAG,CACJ,0BAA0B,CAAC,gBAAgB,CAAC;QAC1C,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE;YACb,MAAM,CAAC,kBAAkB;YACzB,MAAM,CAAC,oBAAoB;YAC3B,MAAM,CAAC,YAAY;SACpB;QACD,SAAS,EAAE;YACT,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,IAAI;YACX,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACzC;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,0BAA0B,CACxC,EAAe,EACf,MAGC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE;QAClC,OAAO,EAAE,MAAM,CAAC,WAAW;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC,CAAC;IACH,oCAAoC,CAAC,EAAE,EAAE;QACvC,GAAG,MAAM;QACT,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACxC,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,2BAA2B,CACzC,EAAe,EACf,MAA2F;IAE3F,EAAE,CAAC,GAAG,CACJ,0BAA0B,CAAC,iBAAiB,CAAC;QAC3C,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE;YACb,MAAM,CAAC,kBAAkB;YACzB,MAAM,CAAC,oBAAoB;YAC3B,MAAM,CAAC,YAAY;SACpB;QACD,SAAS,EAAE;YACT,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,IAAI;YACX,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;SACtD;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,sCAAsC,CACpD,EAAe,EACf,MAA6C;IAE7C,EAAE,CAAC,GAAG,CACJ,+BAA+B,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;KAChD,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,EAAe,EACf,MAA6C;IAE7C,EAAE,CAAC,GAAG,CAAC,+BAA+B,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1I,CAAC;AASD,kFAAkF;AAClF,MAAM,UAAU,iCAAiC,CAC/C,EAAe,EACf,MAEC;IAED,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,sDAAsD;QACvF,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACrE,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,oCAAoC,CAClD,EAAe,EACf,MAIC;IAED,EAAE,CAAC,GAAG,CACJ,+BAA+B,CAAC,sBAAsB,CAAC;QACrD,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE;YACT,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,eAAe,IAAI,8BAA8B,CAAC;SACrE;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iCAAiC,CAC/C,EAAe,EACf,MAIC;IAED,oCAAoC,CAAC,EAAE,EAAE;QACvC,GAAG,MAAM;QACT,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,kCAAkC,CAChD,EAAe,EACf,MAIC;IAED,EAAE,CAAC,GAAG,CACJ,+BAA+B,CAAC,oBAAoB,CAAC;QACnD,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE;YACT,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,OAAO;YACd,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;SACtD;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAgBD,MAAM,UAAU,4BAA4B,CAC1C,EAAe,EACf,MAA0C;IAE1C,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,0CAA0C;QAC3E,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC;QACvE,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAYD,0EAA0E;AAC1E,MAAM,UAAU,8BAA8B,CAC5C,EAAe,EACf,MAA0C;IAE1C,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,sCAAsC;QACvE,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,YAAY,CAAC;QAC5F,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;QACzF,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAC9B,EAAe,EACf,MAKC;IAED,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,oBAAoB;QACpC,aAAa,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;QAC5D,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;KAChC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,gCAAgC,CAC9C,EAAe,EACf,MAA0C;IAE1C,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,wCAAwC;QACzE,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,YAAY,CAAC;QAC5F,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;QACzF,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,6BAA6B,CAC3C,EAAe,EACf,MAA8F;IAE9F,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,qCAAqC;QACtE,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC;QACvE,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;QACnD,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,6BAA6B,CAC3C,EAAe,EACf,MAEC;IAED,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,qCAAqC;QACtE,aAAa,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC;QACvE,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;QAClE,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;AACL,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAC9B,EAAe,EACf,MAUC;IAED,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,oBAAoB;QACpC,aAAa,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC;QACjF,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;KAC3H,CAAC,CAAC,CAAC;AACN,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,OAAmB;IACpD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,OAAmB;IACxD,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mCAAmC,CAAC,OAAmB;IACrE,MAAM,KAAK,GAAG,yBAAyB,CAAC,8BAA8B,CAAC,KAAK,CAC1E,OAAO,CACR,CAAC;IACF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;QACxC,gBAAgB,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE;QACpD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;KACtC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,wCAAwC,CAAC,OAAmB;IAC1E,MAAM,KAAK,GAAG,yBAAyB,CAAC,mCAAmC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3F,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;QACxC,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;KAChC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAyB,EACzB,eAAuB,EACvB,QAAuE;IAEvE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7C,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,IAAI,MAAM,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,YAAY,GAAG,kBAAkB,CACrC,GAAG,QAAQ,CAAC,cAAc,0BAA0B,QAAQ,CAAC,OAAO,GAAG,CACxE,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACb,8BAA8B,YAAY,cAAc,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAaD,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAyB,EACzB,OAA0B;IAE1B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,IAAI,YAAY,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAe,EACf,YAAoB,EACpB,KAAoC;IAEpC,OAAO,EAAE,CAAC,WAAW,CAAC;QACpB,IAAI,EAAE,4CAA4C,YAAY,IAAI;QAClE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACrD,CAAC,CAAC;AACL,CAAC"}