@wormhole-foundation/sdk-route-ntt 6.3.0 → 7.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +13 -20
- package/dist/cjs/executor/consts.d.ts +0 -4
- package/dist/cjs/executor/consts.d.ts.map +0 -1
- package/dist/cjs/executor/consts.js +0 -32
- package/dist/cjs/executor/consts.js.map +0 -1
- package/dist/cjs/executor/executor.d.ts +0 -112
- package/dist/cjs/executor/executor.d.ts.map +0 -1
- package/dist/cjs/executor/executor.js +0 -575
- package/dist/cjs/executor/executor.js.map +0 -1
- package/dist/cjs/executor/multiToken.d.ts +0 -113
- package/dist/cjs/executor/multiToken.d.ts.map +0 -1
- package/dist/cjs/executor/multiToken.js +0 -386
- package/dist/cjs/executor/multiToken.js.map +0 -1
- package/dist/cjs/executor/utils.d.ts +0 -175
- package/dist/cjs/executor/utils.d.ts.map +0 -1
- package/dist/cjs/executor/utils.js +0 -147
- package/dist/cjs/executor/utils.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -6
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -22
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/manual.d.ts +0 -60
- package/dist/cjs/manual.d.ts.map +0 -1
- package/dist/cjs/manual.js +0 -309
- package/dist/cjs/manual.js.map +0 -1
- package/dist/cjs/multiTokenManual.d.ts +0 -65
- package/dist/cjs/multiTokenManual.d.ts.map +0 -1
- package/dist/cjs/multiTokenManual.js +0 -181
- package/dist/cjs/multiTokenManual.js.map +0 -1
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/tracking.d.ts +0 -5
- package/dist/cjs/tracking.d.ts.map +0 -1
- package/dist/cjs/tracking.js +0 -106
- package/dist/cjs/tracking.js.map +0 -1
- package/dist/cjs/types.d.ts +0 -116
- package/dist/cjs/types.d.ts.map +0 -1
- package/dist/cjs/types.js +0 -515
- package/dist/cjs/types.js.map +0 -1
|
@@ -1,575 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.NttExecutorRoute = void 0;
|
|
37
|
-
exports.nttExecutorRoute = nttExecutorRoute;
|
|
38
|
-
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
39
|
-
const routes = __importStar(require("@wormhole-foundation/sdk-connect/routes"));
|
|
40
|
-
const types_js_1 = require("../types.js");
|
|
41
|
-
const utils_js_1 = require("./utils.js");
|
|
42
|
-
const sdk_definitions_1 = require("@wormhole-foundation/sdk-definitions");
|
|
43
|
-
const consts_js_1 = require("./consts.js");
|
|
44
|
-
function buildRelayFee(fromChain, estimatedCost, feeToken, feeTokenDecimals) {
|
|
45
|
-
if (!feeToken) {
|
|
46
|
-
return {
|
|
47
|
-
token: (0, sdk_connect_1.nativeTokenId)(fromChain.chain),
|
|
48
|
-
amount: sdk_connect_1.amount.fromBaseUnits(estimatedCost, fromChain.config.nativeTokenDecimals),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
// Invariant: fetchExecutorQuote sets feeToken and feeTokenDecimals together.
|
|
52
|
-
return {
|
|
53
|
-
token: sdk_connect_1.Wormhole.tokenId(fromChain.chain, feeToken),
|
|
54
|
-
amount: sdk_connect_1.amount.fromBaseUnits(estimatedCost, feeTokenDecimals),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
function nttExecutorRoute(config) {
|
|
58
|
-
class NttExecutorRouteImpl extends NttExecutorRoute {
|
|
59
|
-
static config = config;
|
|
60
|
-
}
|
|
61
|
-
return NttExecutorRouteImpl;
|
|
62
|
-
}
|
|
63
|
-
class NttExecutorRoute extends routes.AutomaticRoute {
|
|
64
|
-
// executor supports gas drop-off
|
|
65
|
-
static NATIVE_GAS_DROPOFF_SUPPORTED = true;
|
|
66
|
-
// @ts-ignore
|
|
67
|
-
// Since we set the config on the static class, access it with this param
|
|
68
|
-
// the NttExecutorRoute.config will always be empty
|
|
69
|
-
staticConfig = this.constructor.config;
|
|
70
|
-
static config = { ntt: { tokens: {} } };
|
|
71
|
-
static meta = { name: "NttExecutorRoute" };
|
|
72
|
-
static supportedNetworks() {
|
|
73
|
-
return types_js_1.NttRoute.resolveSupportedNetworks(this.config.ntt);
|
|
74
|
-
}
|
|
75
|
-
static supportedChains(network) {
|
|
76
|
-
return types_js_1.NttRoute.resolveSupportedChains(this.config.ntt, network);
|
|
77
|
-
}
|
|
78
|
-
static async supportedSourceTokens(fromChain) {
|
|
79
|
-
return types_js_1.NttRoute.resolveSourceTokens(this.config.ntt, fromChain);
|
|
80
|
-
}
|
|
81
|
-
static async supportedDestinationTokens(sourceToken, fromChain, toChain) {
|
|
82
|
-
return types_js_1.NttRoute.resolveDestinationTokens(this.config.ntt, sourceToken, fromChain, toChain);
|
|
83
|
-
}
|
|
84
|
-
static isProtocolSupported(chain) {
|
|
85
|
-
return chain.supportsProtocol("Ntt");
|
|
86
|
-
}
|
|
87
|
-
getDefaultOptions() {
|
|
88
|
-
return {
|
|
89
|
-
nativeGas: 0,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
async validate(request, params) {
|
|
93
|
-
const options = params.options ?? this.getDefaultOptions();
|
|
94
|
-
if (options.nativeGas !== undefined &&
|
|
95
|
-
(options.nativeGas < 0 || options.nativeGas > 1)) {
|
|
96
|
-
return {
|
|
97
|
-
valid: false,
|
|
98
|
-
error: new Error("Invalid native gas percentage"),
|
|
99
|
-
params,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
const parsedAmount = sdk_connect_1.amount.parse(params.amount, request.source.decimals);
|
|
103
|
-
// IMPORTANT: The EVM NttManager will revert if there is dust. This is not the case for Solana,
|
|
104
|
-
// but we want to be consistent across chains.
|
|
105
|
-
const trimmedAmount = types_js_1.NttRoute.trimAmount(parsedAmount, request.destination.decimals);
|
|
106
|
-
const { srcContracts, dstContracts } = types_js_1.NttRoute.resolveNttContracts(this.staticConfig.ntt, request.source.id, request.destination.id);
|
|
107
|
-
let transferTokenFee = 0n;
|
|
108
|
-
let nativeTokenFee = 0n;
|
|
109
|
-
let referrerAddress;
|
|
110
|
-
if (this.staticConfig.getFee) {
|
|
111
|
-
const result = await this.staticConfig.getFee({
|
|
112
|
-
amount: sdk_connect_1.amount.units(trimmedAmount),
|
|
113
|
-
sourceChain: request.source.id.chain,
|
|
114
|
-
sourceToken: (0, sdk_connect_1.canonicalAddress)(request.source.id),
|
|
115
|
-
destinationChain: request.destination.id.chain,
|
|
116
|
-
destinationToken: (0, sdk_connect_1.canonicalAddress)(request.destination.id),
|
|
117
|
-
});
|
|
118
|
-
transferTokenFee = result.transferTokenFee;
|
|
119
|
-
nativeTokenFee = result.nativeTokenFee;
|
|
120
|
-
referrerAddress = sdk_connect_1.Wormhole.chainAddress(request.source.id.chain, result.referrerAddress);
|
|
121
|
-
}
|
|
122
|
-
const validatedParams = {
|
|
123
|
-
amount: params.amount,
|
|
124
|
-
normalizedParams: {
|
|
125
|
-
amount: trimmedAmount,
|
|
126
|
-
sourceContracts: srcContracts,
|
|
127
|
-
destinationContracts: dstContracts,
|
|
128
|
-
transferTokenFee,
|
|
129
|
-
nativeTokenFee,
|
|
130
|
-
referrerAddress,
|
|
131
|
-
},
|
|
132
|
-
options,
|
|
133
|
-
};
|
|
134
|
-
return { valid: true, params: validatedParams };
|
|
135
|
-
}
|
|
136
|
-
async quote(request, params) {
|
|
137
|
-
const { fromChain, toChain } = request;
|
|
138
|
-
try {
|
|
139
|
-
const executorQuote = await this.fetchExecutorQuote(request, params);
|
|
140
|
-
const { remainingAmount, estimatedCost, gasDropOff, expires, feeToken, feeTokenDecimals, } = executorQuote;
|
|
141
|
-
const receivedAmount = sdk_connect_1.amount.scale(sdk_connect_1.amount.fromBaseUnits(remainingAmount, request.source.decimals), request.destination.decimals);
|
|
142
|
-
const relayFee = buildRelayFee(fromChain, estimatedCost, feeToken, feeTokenDecimals);
|
|
143
|
-
const result = {
|
|
144
|
-
success: true,
|
|
145
|
-
params,
|
|
146
|
-
sourceToken: {
|
|
147
|
-
token: request.source.id,
|
|
148
|
-
amount: params.normalizedParams.amount,
|
|
149
|
-
},
|
|
150
|
-
destinationToken: {
|
|
151
|
-
token: request.destination.id,
|
|
152
|
-
amount: receivedAmount,
|
|
153
|
-
},
|
|
154
|
-
relayFee,
|
|
155
|
-
destinationNativeGas: sdk_connect_1.amount.fromBaseUnits(gasDropOff, toChain.config.nativeTokenDecimals),
|
|
156
|
-
eta: params.normalizedParams.sourceContracts.eta ??
|
|
157
|
-
sdk_connect_1.finality.estimateFinalityTime(request.fromChain.chain) +
|
|
158
|
-
sdk_connect_1.guardians.guardianAttestationEta * 1000,
|
|
159
|
-
expires,
|
|
160
|
-
details: executorQuote,
|
|
161
|
-
};
|
|
162
|
-
const dstNtt = await toChain.getProtocol("Ntt", {
|
|
163
|
-
ntt: params.normalizedParams.destinationContracts,
|
|
164
|
-
});
|
|
165
|
-
const duration = await dstNtt.getRateLimitDuration();
|
|
166
|
-
if (duration > 0n) {
|
|
167
|
-
const capacity = await dstNtt.getCurrentInboundCapacity(fromChain.chain);
|
|
168
|
-
if (types_js_1.NttRoute.isCapacityThresholdExceeded(sdk_connect_1.amount.units(receivedAmount), capacity)) {
|
|
169
|
-
result.warnings = [
|
|
170
|
-
{
|
|
171
|
-
type: "DestinationCapacityWarning",
|
|
172
|
-
delayDurationSec: Number(duration),
|
|
173
|
-
},
|
|
174
|
-
];
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return result;
|
|
178
|
-
}
|
|
179
|
-
catch (e) {
|
|
180
|
-
return {
|
|
181
|
-
success: false,
|
|
182
|
-
error: e instanceof Error ? e : new Error(String(e)),
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
async fetchExecutorQuote(request, params) {
|
|
187
|
-
const { fromChain, toChain } = request;
|
|
188
|
-
const referrer = params.normalizedParams.referrerAddress ??
|
|
189
|
-
(0, consts_js_1.getDefaultReferrerAddress)(fromChain.chain);
|
|
190
|
-
const nativeTokenFee = params.normalizedParams.nativeTokenFee;
|
|
191
|
-
const transferAmount = sdk_connect_1.amount.units(params.normalizedParams.amount);
|
|
192
|
-
// Trim the fee to destination decimals to avoid dust on the remaining amount.
|
|
193
|
-
const transferTokenFee = sdk_connect_1.amount.units(types_js_1.NttRoute.trimAmount(sdk_connect_1.amount.fromBaseUnits(params.normalizedParams.transferTokenFee, request.source.decimals), request.destination.decimals));
|
|
194
|
-
const remainingAmount = transferAmount - transferTokenFee;
|
|
195
|
-
if (remainingAmount <= 0n) {
|
|
196
|
-
throw new Error("Amount after fee <= 0");
|
|
197
|
-
}
|
|
198
|
-
const capabilities = await (0, utils_js_1.fetchCapabilities)(fromChain.network);
|
|
199
|
-
const srcCapabilities = capabilities[(0, sdk_connect_1.toChainId)(fromChain.chain)];
|
|
200
|
-
if (!srcCapabilities) {
|
|
201
|
-
throw new Error("Unsupported source chain");
|
|
202
|
-
}
|
|
203
|
-
let feeToken = params.options.feeToken;
|
|
204
|
-
let feeTokenDecimals;
|
|
205
|
-
// Default to token-fee when the chain only advertises allowedFeeTokens
|
|
206
|
-
// (no native-fee executor): prefer the native token, else the first
|
|
207
|
-
// allowed token. Callers can override via options.feeToken.
|
|
208
|
-
if (!feeToken && srcCapabilities.allowedFeeTokens) {
|
|
209
|
-
const allowed = srcCapabilities.allowedFeeTokens;
|
|
210
|
-
const allowedKeys = Object.keys(allowed);
|
|
211
|
-
if (allowedKeys.length > 0) {
|
|
212
|
-
const nativeAddr = (0, sdk_connect_1.canonicalAddress)((0, sdk_connect_1.nativeTokenId)(fromChain.chain)).toLowerCase();
|
|
213
|
-
feeToken = allowed[nativeAddr] ? nativeAddr : allowedKeys[0];
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
if (feeToken) {
|
|
217
|
-
const entry = srcCapabilities.allowedFeeTokens?.[feeToken.toLowerCase()];
|
|
218
|
-
if (!entry) {
|
|
219
|
-
throw new Error(`feeToken ${feeToken} is not an allowed fee token on ${fromChain.chain}`);
|
|
220
|
-
}
|
|
221
|
-
feeTokenDecimals = entry.decimals;
|
|
222
|
-
}
|
|
223
|
-
const dstCapabilities = capabilities[(0, sdk_connect_1.toChainId)(toChain.chain)];
|
|
224
|
-
if (!dstCapabilities || !dstCapabilities.requestPrefixes.includes("ERN1")) {
|
|
225
|
-
throw new Error("Unsupported destination chain");
|
|
226
|
-
}
|
|
227
|
-
const { recipient } = request;
|
|
228
|
-
const dstNttWithExec = await toChain.getProtocol("NttWithExecutor", {
|
|
229
|
-
ntt: params.normalizedParams.destinationContracts,
|
|
230
|
-
});
|
|
231
|
-
// Calculate the gas dropOff value
|
|
232
|
-
const gasDropOffLimit = BigInt(dstCapabilities.gasDropOffLimit);
|
|
233
|
-
const dropOff = params.options.nativeGas && gasDropOffLimit > 0n
|
|
234
|
-
? (BigInt(Math.round(params.options.nativeGas * 100)) *
|
|
235
|
-
gasDropOffLimit) /
|
|
236
|
-
100n
|
|
237
|
-
: 0n;
|
|
238
|
-
const estimate = await dstNttWithExec.estimateMsgValueAndGasLimit(recipient);
|
|
239
|
-
const msgValue = params.options.msgValue ?? estimate.msgValue;
|
|
240
|
-
const gasLimit = params.options.gasLimit ?? estimate.gasLimit;
|
|
241
|
-
const relayRequests = [];
|
|
242
|
-
// Add the gas instruction
|
|
243
|
-
relayRequests.push({
|
|
244
|
-
request: {
|
|
245
|
-
type: "GasInstruction",
|
|
246
|
-
gasLimit,
|
|
247
|
-
msgValue,
|
|
248
|
-
},
|
|
249
|
-
});
|
|
250
|
-
// Add the gas drop-off instruction if applicable
|
|
251
|
-
if (dropOff > 0n) {
|
|
252
|
-
relayRequests.push({
|
|
253
|
-
request: {
|
|
254
|
-
type: "GasDropOffInstruction",
|
|
255
|
-
dropOff,
|
|
256
|
-
// If the recipient is undefined (e.g. the user hasn’t connected their wallet yet),
|
|
257
|
-
// we temporarily use a dummy address to fetch a quote.
|
|
258
|
-
// The recipient address is validated later in the `initiate` method, which will throw if it's still missing.
|
|
259
|
-
recipient: recipient
|
|
260
|
-
? recipient.address.toUniversalAddress()
|
|
261
|
-
: new sdk_connect_1.UniversalAddress(new Uint8Array(32)),
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
const relayInstructions = (0, sdk_connect_1.serializeLayout)(sdk_definitions_1.relayInstructionsLayout, {
|
|
266
|
-
requests: relayRequests,
|
|
267
|
-
});
|
|
268
|
-
const quote = await (0, utils_js_1.fetchSignedQuote)(fromChain.network, fromChain.chain, toChain.chain, sdk_connect_1.encoding.hex.encode(relayInstructions, true), feeToken);
|
|
269
|
-
if (!quote.estimatedCost) {
|
|
270
|
-
throw new Error("No estimated cost");
|
|
271
|
-
}
|
|
272
|
-
const estimatedCost = BigInt(quote.estimatedCost);
|
|
273
|
-
const signedQuoteBytes = sdk_connect_1.encoding.hex.decode(quote.signedQuote);
|
|
274
|
-
const { payeeAddress, expiryTime } = (0, utils_js_1.deserializeSignedQuoteWithToken)(signedQuoteBytes);
|
|
275
|
-
return {
|
|
276
|
-
signedQuote: signedQuoteBytes,
|
|
277
|
-
relayInstructions: relayInstructions,
|
|
278
|
-
estimatedCost,
|
|
279
|
-
payeeAddress,
|
|
280
|
-
referrer,
|
|
281
|
-
transferTokenFee,
|
|
282
|
-
nativeTokenFee,
|
|
283
|
-
remainingAmount,
|
|
284
|
-
expires: expiryTime,
|
|
285
|
-
gasDropOff: dropOff,
|
|
286
|
-
...(feeToken ? { feeToken, feeTokenDecimals } : {}),
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
async _buildInitiateXfer(request, sender, to, quote) {
|
|
290
|
-
if (!quote.details) {
|
|
291
|
-
throw new Error("Missing quote details");
|
|
292
|
-
}
|
|
293
|
-
const { params, details } = quote;
|
|
294
|
-
const relayInstructions = (0, sdk_connect_1.deserializeLayout)(sdk_definitions_1.relayInstructionsLayout, details.relayInstructions);
|
|
295
|
-
// Make sure that the gas drop-off recipient matches the actual recipient
|
|
296
|
-
relayInstructions.requests.forEach(({ request }) => {
|
|
297
|
-
if (request.type === "GasDropOffInstruction" &&
|
|
298
|
-
!request.recipient.equals(to.address.toUniversalAddress())) {
|
|
299
|
-
throw new Error("Gas drop-off recipient does not match");
|
|
300
|
-
}
|
|
301
|
-
});
|
|
302
|
-
const { fromChain } = request;
|
|
303
|
-
const senderAddress = sdk_connect_1.Wormhole.parseAddress(sender.chain, sender.address.toString());
|
|
304
|
-
const nttWithExec = await fromChain.getProtocol("NttWithExecutor", {
|
|
305
|
-
ntt: params.normalizedParams.sourceContracts,
|
|
306
|
-
});
|
|
307
|
-
const ntt = await fromChain.getProtocol("Ntt", {
|
|
308
|
-
ntt: params.normalizedParams.sourceContracts,
|
|
309
|
-
});
|
|
310
|
-
const wrapNative = (0, sdk_definitions_1.isNative)(request.source.id.address);
|
|
311
|
-
return nttWithExec.transfer(senderAddress, to, sdk_connect_1.amount.units(params.normalizedParams.amount), details, ntt, wrapNative);
|
|
312
|
-
}
|
|
313
|
-
async buildInitiateTransactions(request, sender, recipient, quote) {
|
|
314
|
-
const xfer = await this._buildInitiateXfer(request, sender, recipient, quote);
|
|
315
|
-
const txs = await (0, utils_js_1.collectTransactions)(xfer);
|
|
316
|
-
return txs;
|
|
317
|
-
}
|
|
318
|
-
async initiate(request, signer, quote, to) {
|
|
319
|
-
const sender = sdk_connect_1.Wormhole.chainAddress(signer.chain(), signer.address());
|
|
320
|
-
const xfer = await this._buildInitiateXfer(request, sender, to, quote);
|
|
321
|
-
const { fromChain } = request;
|
|
322
|
-
const txids = await (0, sdk_connect_1.signSendWait)(fromChain, xfer, signer);
|
|
323
|
-
// Status the transfer immediately before returning
|
|
324
|
-
let statusAttempts = 0;
|
|
325
|
-
const statusTransferImmediately = async () => {
|
|
326
|
-
while (statusAttempts < 20) {
|
|
327
|
-
try {
|
|
328
|
-
const [txStatus] = await (0, utils_js_1.fetchStatus)(fromChain.network, txids.at(-1).txid, fromChain.chain);
|
|
329
|
-
if (txStatus) {
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
catch (_) {
|
|
334
|
-
// is ok we just try again!
|
|
335
|
-
}
|
|
336
|
-
statusAttempts++;
|
|
337
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
338
|
-
}
|
|
339
|
-
};
|
|
340
|
-
// Spawn a loop in the background that will status this transfer until
|
|
341
|
-
// the API gives a successful response. We don't await the result
|
|
342
|
-
// here because we don't need it for the return value.
|
|
343
|
-
statusTransferImmediately();
|
|
344
|
-
return {
|
|
345
|
-
from: fromChain.chain,
|
|
346
|
-
to: to.chain,
|
|
347
|
-
state: sdk_connect_1.TransferState.SourceInitiated,
|
|
348
|
-
originTxs: txids,
|
|
349
|
-
params: quote.params,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
async _buildCompleteXfer(sender, receipt) {
|
|
353
|
-
if (!(0, sdk_connect_1.isAttested)(receipt) && !(0, sdk_connect_1.isFailed)(receipt)) {
|
|
354
|
-
if ((0, sdk_connect_1.isRedeemed)(receipt))
|
|
355
|
-
return null;
|
|
356
|
-
throw new Error("The source must be finalized in order to complete the transfer");
|
|
357
|
-
}
|
|
358
|
-
if (!receipt.attestation) {
|
|
359
|
-
throw new Error("No attestation found for the transfer");
|
|
360
|
-
}
|
|
361
|
-
const toChain = this.wh.getChain(receipt.to);
|
|
362
|
-
const ntt = await toChain.getProtocol("Ntt", {
|
|
363
|
-
ntt: receipt.params.normalizedParams.destinationContracts,
|
|
364
|
-
});
|
|
365
|
-
const senderAddress = sdk_connect_1.Wormhole.parseAddress(sender.chain, sender.address.toString());
|
|
366
|
-
return ntt.redeem([receipt.attestation.attestation], senderAddress);
|
|
367
|
-
}
|
|
368
|
-
async buildCompleteTransactions(sender, receipt) {
|
|
369
|
-
const xfer = await this._buildCompleteXfer(sender, receipt);
|
|
370
|
-
if (xfer === null)
|
|
371
|
-
return [];
|
|
372
|
-
const txs = await (0, utils_js_1.collectTransactions)(xfer);
|
|
373
|
-
return txs;
|
|
374
|
-
}
|
|
375
|
-
async complete(signer, receipt) {
|
|
376
|
-
const sender = sdk_connect_1.Wormhole.chainAddress(signer.chain(), signer.address());
|
|
377
|
-
const xfer = await this._buildCompleteXfer(sender, receipt);
|
|
378
|
-
if (xfer === null)
|
|
379
|
-
return receipt;
|
|
380
|
-
const toChain = this.wh.getChain(receipt.to);
|
|
381
|
-
const txids = await (0, sdk_connect_1.signSendWait)(toChain, xfer, signer);
|
|
382
|
-
return {
|
|
383
|
-
...receipt,
|
|
384
|
-
state: sdk_connect_1.TransferState.DestinationInitiated,
|
|
385
|
-
destinationTxs: txids,
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
async resume(tx) {
|
|
389
|
-
const vaa = await this.wh.getVaa(tx.txid, "Ntt:WormholeTransfer");
|
|
390
|
-
if (!vaa)
|
|
391
|
-
throw new Error("No VAA found for transaction: " + tx.txid);
|
|
392
|
-
const msgId = {
|
|
393
|
-
chain: vaa.emitterChain,
|
|
394
|
-
emitter: vaa.emitterAddress,
|
|
395
|
-
sequence: vaa.sequence,
|
|
396
|
-
};
|
|
397
|
-
const { recipientChain, trimmedAmount } = vaa.payload["nttManagerPayload"].payload;
|
|
398
|
-
const token = (0, sdk_connect_1.canonicalAddress)({
|
|
399
|
-
chain: vaa.emitterChain,
|
|
400
|
-
address: vaa.payload["nttManagerPayload"].payload.sourceToken,
|
|
401
|
-
});
|
|
402
|
-
const manager = (0, sdk_connect_1.canonicalAddress)({
|
|
403
|
-
chain: vaa.emitterChain,
|
|
404
|
-
address: vaa.payload["sourceNttManager"],
|
|
405
|
-
});
|
|
406
|
-
const whTransceiver = (0, sdk_connect_1.chainToPlatform)(vaa.emitterChain) === "Solana"
|
|
407
|
-
? manager
|
|
408
|
-
: (0, sdk_connect_1.canonicalAddress)({
|
|
409
|
-
chain: vaa.emitterChain,
|
|
410
|
-
address: vaa.emitterAddress,
|
|
411
|
-
});
|
|
412
|
-
const dstInfo = types_js_1.NttRoute.resolveDestinationNttContracts(this.staticConfig.ntt, {
|
|
413
|
-
chain: vaa.emitterChain,
|
|
414
|
-
address: vaa.payload["sourceNttManager"],
|
|
415
|
-
}, recipientChain);
|
|
416
|
-
const amt = sdk_connect_1.amount.fromBaseUnits(trimmedAmount.amount, trimmedAmount.decimals);
|
|
417
|
-
return {
|
|
418
|
-
from: vaa.emitterChain,
|
|
419
|
-
to: recipientChain,
|
|
420
|
-
state: sdk_connect_1.TransferState.Attested,
|
|
421
|
-
originTxs: [tx],
|
|
422
|
-
attestation: {
|
|
423
|
-
id: msgId,
|
|
424
|
-
attestation: vaa,
|
|
425
|
-
},
|
|
426
|
-
params: {
|
|
427
|
-
amount: sdk_connect_1.amount.display(amt),
|
|
428
|
-
options: {},
|
|
429
|
-
normalizedParams: {
|
|
430
|
-
amount: amt,
|
|
431
|
-
sourceContracts: {
|
|
432
|
-
token,
|
|
433
|
-
manager,
|
|
434
|
-
transceiver: {
|
|
435
|
-
wormhole: whTransceiver,
|
|
436
|
-
},
|
|
437
|
-
},
|
|
438
|
-
destinationContracts: {
|
|
439
|
-
token: dstInfo.token,
|
|
440
|
-
manager: dstInfo.manager,
|
|
441
|
-
transceiver: {
|
|
442
|
-
wormhole: dstInfo.transceiver["wormhole"],
|
|
443
|
-
},
|
|
444
|
-
},
|
|
445
|
-
transferTokenFee: 0n,
|
|
446
|
-
nativeTokenFee: 0n,
|
|
447
|
-
},
|
|
448
|
-
},
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
// Even though this is an automatic route, the transfer may need to be
|
|
452
|
-
// manually finalized if it was queued
|
|
453
|
-
async _buildFinalizeXfer(sender, receipt) {
|
|
454
|
-
if (!(0, sdk_connect_1.isDestinationQueued)(receipt)) {
|
|
455
|
-
throw new Error("The transfer must be destination queued in order to finalize");
|
|
456
|
-
}
|
|
457
|
-
const { attestation: { attestation: vaa }, } = receipt;
|
|
458
|
-
const toChain = this.wh.getChain(receipt.to);
|
|
459
|
-
const ntt = await toChain.getProtocol("Ntt", {
|
|
460
|
-
ntt: receipt.params.normalizedParams.destinationContracts,
|
|
461
|
-
});
|
|
462
|
-
return ntt.completeInboundQueuedTransfer(receipt.from, vaa.payload["nttManagerPayload"], sender.address);
|
|
463
|
-
}
|
|
464
|
-
async buildFinalizeTransactions(sender, receipt) {
|
|
465
|
-
const txs = await (0, utils_js_1.collectTransactions)(await this._buildFinalizeXfer(sender, receipt));
|
|
466
|
-
return txs;
|
|
467
|
-
}
|
|
468
|
-
async finalize(signer, receipt) {
|
|
469
|
-
if (!(0, sdk_connect_1.isDestinationQueued)(receipt)) {
|
|
470
|
-
throw new Error("The transfer must be destination queued in order to finalize");
|
|
471
|
-
}
|
|
472
|
-
const sender = sdk_connect_1.Wormhole.chainAddress(signer.chain(), signer.address());
|
|
473
|
-
const xfer = await this._buildFinalizeXfer(sender, receipt);
|
|
474
|
-
const toChain = this.wh.getChain(receipt.to);
|
|
475
|
-
const finalizeTxids = await (0, sdk_connect_1.signSendWait)(toChain, xfer, signer);
|
|
476
|
-
return {
|
|
477
|
-
...receipt,
|
|
478
|
-
state: sdk_connect_1.TransferState.DestinationFinalized,
|
|
479
|
-
destinationTxs: [...(receipt.destinationTxs ?? []), ...finalizeTxids],
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
async *track(receipt, timeout) {
|
|
483
|
-
// First we fetch the attestation (VAA) for the transfer
|
|
484
|
-
if ((0, sdk_connect_1.isSourceInitiated)(receipt) || (0, sdk_connect_1.isSourceFinalized)(receipt)) {
|
|
485
|
-
// On XRPL, originTxs[0] is the NTT payment (Wormhole message) and
|
|
486
|
-
// originTxs[1] is the executor request. Wormholescan only indexes the
|
|
487
|
-
// NTT payment, so use originTxs[0] for XRPL.
|
|
488
|
-
const { txid } = receipt.originTxs.at((0, sdk_connect_1.chainToPlatform)(receipt.from) === "Xrpl" ? 0 : -1);
|
|
489
|
-
const vaa = await this.wh.getVaa(txid, "Ntt:WormholeTransfer", timeout);
|
|
490
|
-
if (!vaa)
|
|
491
|
-
throw new Error("No VAA found for transaction: " + txid);
|
|
492
|
-
const msgId = {
|
|
493
|
-
chain: vaa.emitterChain,
|
|
494
|
-
emitter: vaa.emitterAddress,
|
|
495
|
-
sequence: vaa.sequence,
|
|
496
|
-
};
|
|
497
|
-
receipt = {
|
|
498
|
-
...receipt,
|
|
499
|
-
state: sdk_connect_1.TransferState.Attested,
|
|
500
|
-
attestation: {
|
|
501
|
-
id: msgId,
|
|
502
|
-
attestation: vaa,
|
|
503
|
-
},
|
|
504
|
-
};
|
|
505
|
-
yield receipt;
|
|
506
|
-
}
|
|
507
|
-
const toChain = this.wh.getChain(receipt.to);
|
|
508
|
-
const ntt = await toChain.getProtocol("Ntt", {
|
|
509
|
-
ntt: receipt.params.normalizedParams.destinationContracts,
|
|
510
|
-
});
|
|
511
|
-
// Check if the relay was successful or failed
|
|
512
|
-
if ((0, sdk_connect_1.isAttested)(receipt) && !(0, sdk_connect_1.isFailed)(receipt)) {
|
|
513
|
-
const [txStatus] = await (0, utils_js_1.fetchStatus)(this.wh.network, receipt.originTxs.at(-1).txid, receipt.from);
|
|
514
|
-
if (!txStatus)
|
|
515
|
-
throw new Error("No transaction status found");
|
|
516
|
-
const relayStatus = txStatus.status;
|
|
517
|
-
if ((0, utils_js_1.isRelayStatusFailed)(relayStatus)) {
|
|
518
|
-
receipt = {
|
|
519
|
-
...receipt,
|
|
520
|
-
state: sdk_connect_1.TransferState.Failed,
|
|
521
|
-
error: new routes.RelayFailedError(`Relay failed with status: ${relayStatus}`),
|
|
522
|
-
};
|
|
523
|
-
yield receipt;
|
|
524
|
-
}
|
|
525
|
-
else if ((0, sdk_connect_1.chainToPlatform)(receipt.to) === "Xrpl") {
|
|
526
|
-
// XRPL has no on-chain state to verify redemption; the executor
|
|
527
|
-
// status is the only source of truth. If the relay didn't fail,
|
|
528
|
-
// treat the transfer as finalized.
|
|
529
|
-
receipt = {
|
|
530
|
-
...receipt,
|
|
531
|
-
state: sdk_connect_1.TransferState.DestinationFinalized,
|
|
532
|
-
};
|
|
533
|
-
yield receipt;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
// Check if the transfer was redeemed
|
|
537
|
-
if ((0, sdk_connect_1.isAttested)(receipt) || (0, sdk_connect_1.isFailed)(receipt)) {
|
|
538
|
-
if (!receipt.attestation) {
|
|
539
|
-
throw new Error("No attestation found");
|
|
540
|
-
}
|
|
541
|
-
const { attestation: { attestation: vaa }, } = receipt;
|
|
542
|
-
if (await ntt.getIsApproved(vaa)) {
|
|
543
|
-
receipt = {
|
|
544
|
-
...receipt,
|
|
545
|
-
state: sdk_connect_1.TransferState.DestinationInitiated,
|
|
546
|
-
attestation: receipt.attestation,
|
|
547
|
-
// TODO: check for destination event transactions to get dest Txids
|
|
548
|
-
};
|
|
549
|
-
yield receipt;
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
if ((0, sdk_connect_1.isRedeemed)(receipt) || (0, sdk_connect_1.isDestinationQueued)(receipt)) {
|
|
553
|
-
const { attestation: { attestation: vaa }, } = receipt;
|
|
554
|
-
const queuedTransfer = await ntt.getInboundQueuedTransfer(vaa.emitterChain, vaa.payload["nttManagerPayload"]);
|
|
555
|
-
if (queuedTransfer !== null) {
|
|
556
|
-
receipt = {
|
|
557
|
-
...receipt,
|
|
558
|
-
state: sdk_connect_1.TransferState.DestinationQueued,
|
|
559
|
-
queueReleaseTime: new Date(queuedTransfer.rateLimitExpiryTimestamp * 1000),
|
|
560
|
-
};
|
|
561
|
-
yield receipt;
|
|
562
|
-
}
|
|
563
|
-
else if (await ntt.getIsExecuted(vaa)) {
|
|
564
|
-
receipt = {
|
|
565
|
-
...receipt,
|
|
566
|
-
state: sdk_connect_1.TransferState.DestinationFinalized,
|
|
567
|
-
};
|
|
568
|
-
yield receipt;
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
yield receipt;
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
exports.NttExecutorRoute = NttExecutorRoute;
|
|
575
|
-
//# sourceMappingURL=executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/executor/executor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IA,4CAKC;AAnJD,kEAmC0C;AAC1C,gFAAkE;AAClE,0CAAuC;AACvC,yCAOoB;AAEpB,0EAG8C;AAC9C,2CAAwD;AAqExD,SAAS,aAAa,CACpB,SAA0B,EAC1B,aAAqB,EACrB,QAA4B,EAC5B,gBAAoC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,KAAK,EAAE,IAAA,2BAAa,EAAC,SAAS,CAAC,KAAK,CAAC;YACrC,MAAM,EAAE,oBAAM,CAAC,aAAa,CAC1B,aAAa,EACb,SAAS,CAAC,MAAM,CAAC,mBAAmB,CACrC;SACF,CAAC;IACJ,CAAC;IACD,6EAA6E;IAC7E,OAAO;QACL,KAAK,EAAE,sBAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC;QAClD,MAAM,EAAE,oBAAM,CAAC,aAAa,CAAC,aAAa,EAAE,gBAAiB,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAA+B;IAC9D,MAAM,oBAAwC,SAAQ,gBAAmB;QACvE,MAAM,CAAU,MAAM,GAAG,MAAM,CAAC;;IAElC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAa,gBACX,SAAQ,MAAM,CAAC,cAA4B;IAG3C,iCAAiC;IACjC,MAAM,CAAC,4BAA4B,GAAY,IAAI,CAAC;IAEpD,aAAa;IACb,yEAAyE;IACzE,mDAAmD;IAC1C,YAAY,GAA4B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACzE,MAAM,CAAC,MAAM,GAA4B,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;IAEjE,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAE3C,MAAM,CAAC,iBAAiB;QACtB,OAAO,mBAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAgB;QACrC,OAAO,mBAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAChC,SAAgC;QAEhC,OAAO,mBAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,0BAA0B,CACrC,WAAoB,EACpB,SAA0B,EAC1B,OAAwB;QAExB,OAAO,mBAAQ,CAAC,wBAAwB,CACtC,IAAI,CAAC,MAAM,CAAC,GAAG,EACf,WAAW,EACX,SAAS,EACT,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,mBAAmB,CACxB,KAAsB;QAEtB,OAAO,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAuC,EACvC,MAAU;QAEV,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE3D,IACE,OAAO,CAAC,SAAS,KAAK,SAAS;YAC/B,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,EAChD,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI,KAAK,CAAC,+BAA+B,CAAC;gBACjD,MAAM;aACP,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,oBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE1E,+FAA+F;QAC/F,8CAA8C;QAC9C,MAAM,aAAa,GAAG,mBAAQ,CAAC,UAAU,CACvC,YAAY,EACZ,OAAO,CAAC,WAAW,CAAC,QAAQ,CAC7B,CAAC;QAEF,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,mBAAQ,CAAC,mBAAmB,CACjE,IAAI,CAAC,YAAY,CAAC,GAAG,EACrB,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,OAAO,CAAC,WAAW,CAAC,EAAE,CACvB,CAAC;QAEF,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,eAAyC,CAAC;QAE9C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC5C,MAAM,EAAE,oBAAM,CAAC,KAAK,CAAC,aAAa,CAAC;gBACnC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK;gBACpC,WAAW,EAAE,IAAA,8BAAgB,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK;gBAC9C,gBAAgB,EAAE,IAAA,8BAAgB,EAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;aAC3D,CAAC,CAAC;YACH,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC3C,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YACvC,eAAe,GAAG,sBAAQ,CAAC,YAAY,CACrC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EACvB,MAAM,CAAC,eAAe,CACvB,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAO;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,gBAAgB,EAAE;gBAChB,MAAM,EAAE,aAAa;gBACrB,eAAe,EAAE,YAAY;gBAC7B,oBAAoB,EAAE,YAAY;gBAClC,gBAAgB;gBAChB,cAAc;gBACd,eAAe;aAChB;YACD,OAAO;SACR,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,KAAK,CACT,OAAuC,EACvC,MAAU;QAEV,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAErE,MAAM,EACJ,eAAe,EACf,aAAa,EACb,UAAU,EACV,OAAO,EACP,QAAQ,EACR,gBAAgB,GACjB,GAAG,aAAa,CAAC;YAElB,MAAM,cAAc,GAAG,oBAAM,CAAC,KAAK,CACjC,oBAAM,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC9D,OAAO,CAAC,WAAW,CAAC,QAAQ,CAC7B,CAAC;YAEF,MAAM,QAAQ,GAAG,aAAa,CAC5B,SAAS,EACT,aAAa,EACb,QAAQ,EACR,gBAAgB,CACjB,CAAC;YAEF,MAAM,MAAM,GAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,MAAM;gBACN,WAAW,EAAE;oBACX,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;oBACxB,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;iBACvC;gBACD,gBAAgB,EAAE;oBAChB,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE;oBAC7B,MAAM,EAAE,cAAc;iBACvB;gBACD,QAAQ;gBACR,oBAAoB,EAAE,oBAAM,CAAC,aAAa,CACxC,UAAU,EACV,OAAO,CAAC,MAAM,CAAC,mBAAmB,CACnC;gBACD,GAAG,EACD,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG;oBAC3C,sBAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;wBACpD,uBAAS,CAAC,sBAAsB,GAAG,IAAI;gBAC3C,OAAO;gBACP,OAAO,EAAE,aAAa;aACvB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE;gBAC9C,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,oBAAoB;aAClD,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,yBAAyB,CACrD,SAAS,CAAC,KAAK,CAChB,CAAC;gBACF,IACE,mBAAQ,CAAC,2BAA2B,CAClC,oBAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAC5B,QAAQ,CACT,EACD,CAAC;oBACD,MAAM,CAAC,QAAQ,GAAG;wBAChB;4BACE,IAAI,EAAE,4BAA4B;4BAClC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC;yBACnC;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,OAAuC,EACvC,MAAU;QAEV,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAEvC,MAAM,QAAQ,GACZ,MAAM,CAAC,gBAAgB,CAAC,eAAe;YACvC,IAAA,qCAAyB,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE7C,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;QAC9D,MAAM,cAAc,GAAG,oBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpE,8EAA8E;QAC9E,MAAM,gBAAgB,GAAG,oBAAM,CAAC,KAAK,CACnC,mBAAQ,CAAC,UAAU,CACjB,oBAAM,CAAC,aAAa,CAClB,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,EACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CACxB,EACD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAC7B,CACF,CAAC;QACF,MAAM,eAAe,GAAG,cAAc,GAAG,gBAAgB,CAAC;QAC1D,IAAI,eAAe,IAAI,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAA,4BAAiB,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,YAAY,CAAC,IAAA,uBAAS,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,IAAI,gBAAoC,CAAC;QACzC,uEAAuE;QACvE,oEAAoE;QACpE,4DAA4D;QAC5D,IAAI,CAAC,QAAQ,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,eAAe,CAAC,gBAAgB,CAAC;YACjD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,IAAA,8BAAgB,EACjC,IAAA,2BAAa,EAAC,SAAS,CAAC,KAAK,CAAC,CAC/B,CAAC,WAAW,EAAE,CAAC;gBAChB,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,eAAe,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,YAAY,QAAQ,mCAAmC,SAAS,CAAC,KAAK,EAAE,CACzE,CAAC;YACJ,CAAC;YACD,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC;QACpC,CAAC;QAED,MAAM,eAAe,GAAG,YAAY,CAAC,IAAA,uBAAS,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAE9B,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE;YAClE,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,oBAAoB;SAClD,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAChE,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,eAAe,GAAG,EAAE;YAC9C,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;gBACjD,eAAe,CAAC;gBAClB,IAAI;YACN,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,QAAQ,GACZ,MAAM,cAAc,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QAE9D,MAAM,aAAa,GAAG,EAAE,CAAC;QAEzB,0BAA0B;QAC1B,aAAa,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAyB;gBAC/B,QAAQ;gBACR,QAAQ;aACT;SACF,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE;oBACP,IAAI,EAAE,uBAAgC;oBACtC,OAAO;oBACP,mFAAmF;oBACnF,uDAAuD;oBACvD,6GAA6G;oBAC7G,SAAS,EAAE,SAAS;wBAClB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;wBACxC,CAAC,CAAC,IAAI,8BAAgB,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;iBAC7C;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAA,6BAAe,EAAC,yCAAuB,EAAE;YACjE,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAgB,EAClC,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,KAAK,EACf,OAAO,CAAC,KAAK,EACb,sBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAC5C,QAAQ,CACT,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAElD,MAAM,gBAAgB,GAAG,sBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAChC,IAAA,0CAA+B,EAAC,gBAAgB,CAAC,CAAC;QAEpD,OAAO;YACL,WAAW,EAAE,gBAAgB;YAC7B,iBAAiB,EAAE,iBAAiB;YACpC,aAAa;YACb,YAAY;YACZ,QAAQ;YACR,gBAAgB;YAChB,cAAc;YACd,eAAe;YACf,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,OAAO;YACnB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,OAAuC,EACvC,MAAoB,EACpB,EAAgB,EAChB,KAAQ;QAER,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAElC,MAAM,iBAAiB,GAAG,IAAA,+BAAiB,EACzC,yCAAuB,EACvB,OAAO,CAAC,iBAAiB,CAC1B,CAAC;QAEF,yEAAyE;QACzE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACjD,IACE,OAAO,CAAC,IAAI,KAAK,uBAAuB;gBACxC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,EAC1D,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,aAAa,GAAG,sBAAQ,CAAC,YAAY,CACzC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAC1B,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,iBAAiB,EAAE;YACjE,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,eAAe;SAC7C,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;YAC7C,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,eAAe;SAC7C,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAA,0BAAQ,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAEvD,OAAO,WAAW,CAAC,QAAQ,CACzB,aAAa,EACb,EAAE,EACF,oBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAC5C,OAAO,EACP,GAAG,EACH,UAAU,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,OAAuC,EACvC,MAAoB,EACpB,SAAuB,EACvB,KAAQ;QAER,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CACxC,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,CACN,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,IAAA,8BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,GAAsC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAuC,EACvC,MAAc,EACd,KAAQ,EACR,EAAgB;QAEhB,MAAM,MAAM,GAAG,sBAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAEvE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAA,0BAAY,EAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE1D,mDAAmD;QACnD,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,MAAM,yBAAyB,GAAG,KAAK,IAAI,EAAE;YAC3C,OAAO,cAAc,GAAG,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAA,sBAAW,EAClC,SAAS,CAAC,OAAO,EACjB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAClB,SAAS,CAAC,KAAK,CAChB,CAAC;oBAEF,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,2BAA2B;gBAC7B,CAAC;gBACD,cAAc,EAAE,CAAC;gBACjB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;QAEF,sEAAsE;QACtE,iEAAiE;QACjE,sDAAsD;QACtD,yBAAyB,EAAE,CAAC;QAE5B,OAAO;YACL,IAAI,EAAE,SAAS,CAAC,KAAK;YACrB,EAAE,EAAE,EAAE,CAAC,KAAK;YACZ,KAAK,EAAE,2BAAa,CAAC,eAAe;YACpC,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAAoB,EAAE,OAAU;QACvD,IAAI,CAAC,IAAA,wBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,IAAA,sBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAA,wBAAU,EAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE;YAC3C,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB;SAC1D,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,sBAAQ,CAAC,YAAY,CACzC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAC1B,CAAC;QACF,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAAoB,EACpB,OAAU;QAEV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAA,8BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,GAAsC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAU;QACvC,MAAM,MAAM,GAAG,sBAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAA,0BAAY,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO;YACL,GAAG,OAAO;YACV,KAAK,EAAE,2BAAa,CAAC,oBAAoB;YACzC,cAAc,EAAE,KAAK;SACjB,CAAC;IACT,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAiB;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEtE,MAAM,KAAK,GAAsB;YAC/B,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,OAAO,EAAE,GAAG,CAAC,cAAc;YAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC;QAEF,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GACrC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC;QAE3C,MAAM,KAAK,GAAG,IAAA,8BAAgB,EAAC;YAC7B,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,WAAW;SAC9D,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,8BAAgB,EAAC;YAC/B,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC;SACzC,CAAC,CAAC;QACH,MAAM,aAAa,GACjB,IAAA,6BAAe,EAAC,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ;YAC5C,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAA,8BAAgB,EAAC;gBACf,KAAK,EAAE,GAAG,CAAC,YAAY;gBACvB,OAAO,EAAE,GAAG,CAAC,cAAc;aAC5B,CAAC,CAAC;QAET,MAAM,OAAO,GAAG,mBAAQ,CAAC,8BAA8B,CACrD,IAAI,CAAC,YAAY,CAAC,GAAG,EACrB;YACE,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC;SACzC,EACD,cAAc,CACf,CAAC;QAEF,MAAM,GAAG,GAAG,oBAAM,CAAC,aAAa,CAC9B,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,QAAQ,CACvB,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,YAAY;YACtB,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,2BAAa,CAAC,QAAQ;YAC7B,SAAS,EAAE,CAAC,EAAE,CAAC;YACf,WAAW,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,GAAG;aACjB;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,oBAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC3B,OAAO,EAAE,EAAE;gBACX,gBAAgB,EAAE;oBAChB,MAAM,EAAE,GAAG;oBACX,eAAe,EAAE;wBACf,KAAK;wBACL,OAAO;wBACP,WAAW,EAAE;4BACX,QAAQ,EAAE,aAAa;yBACxB;qBACF;oBACD,oBAAoB,EAAE;wBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,WAAW,EAAE;4BACX,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAE;yBAC3C;qBACF;oBACD,gBAAgB,EAAE,EAAE;oBACpB,cAAc,EAAE,EAAE;iBACnB;aACF;SACF,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,sCAAsC;IACtC,KAAK,CAAC,kBAAkB,CAAC,MAAoB,EAAE,OAAU;QACvD,IAAI,CAAC,IAAA,iCAAmB,EAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,EACJ,WAAW,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAClC,GAAG,OAAO,CAAC;QAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE;YAC3C,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB;SAC1D,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,6BAA6B,CACtC,OAAO,CAAC,IAAI,EACZ,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAChC,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAAoB,EACpB,OAAU;QAEV,MAAM,GAAG,GAAG,MAAM,IAAA,8BAAmB,EACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/C,CAAC;QACF,OAAO,GAAsC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAU;QACvC,IAAI,CAAC,IAAA,iCAAmB,EAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,sBAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,MAAM,IAAA,0BAAY,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO;YACL,GAAG,OAAO;YACV,KAAK,EAAE,2BAAa,CAAC,oBAAoB;YACzC,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC;SACtE,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,CAAC,KAAK,CAAC,OAAU,EAAE,OAAgB;QACvD,wDAAwD;QACxD,IAAI,IAAA,+BAAiB,EAAC,OAAO,CAAC,IAAI,IAAA,+BAAiB,EAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,kEAAkE;YAClE,sEAAsE;YACtE,6CAA6C;YAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CACnC,IAAA,6BAAe,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;YAEnE,MAAM,KAAK,GAAsB;gBAC/B,KAAK,EAAE,GAAG,CAAC,YAAY;gBACvB,OAAO,EAAE,GAAG,CAAC,cAAc;gBAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,CAAC;YAEF,OAAO,GAAG;gBACR,GAAG,OAAO;gBACV,KAAK,EAAE,2BAAa,CAAC,QAAQ;gBAC7B,WAAW,EAAE;oBACX,EAAE,EAAE,KAAK;oBACT,WAAW,EAAE,GAAG;iBACjB;aACwE,CAAC;YAE5E,MAAM,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE;YAC3C,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB;SAC1D,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAI,IAAA,wBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,IAAA,sBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAA,sBAAW,EAClC,IAAI,CAAC,EAAE,CAAC,OAAO,EACf,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAC9B,OAAO,CAAC,IAAI,CACb,CAAC;YACF,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAE9D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;YACpC,IAAI,IAAA,8BAAmB,EAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,OAAO,GAAG;oBACR,GAAG,OAAO;oBACV,KAAK,EAAE,2BAAa,CAAC,MAAM;oBAC3B,KAAK,EAAE,IAAI,MAAM,CAAC,gBAAgB,CAChC,6BAA6B,WAAW,EAAE,CAC3C;iBACF,CAAC;gBACF,MAAM,OAAO,CAAC;YAChB,CAAC;iBAAM,IAAI,IAAA,6BAAe,EAAC,OAAO,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;gBAClD,gEAAgE;gBAChE,iEAAiE;gBACjE,mCAAmC;gBACnC,OAAO,GAAG;oBACR,GAAG,OAAO;oBACV,KAAK,EAAE,2BAAa,CAAC,oBAAoB;iBACiC,CAAC;gBAC7E,MAAM,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAA,wBAAU,EAAC,OAAO,CAAC,IAAI,IAAA,sBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,EACJ,WAAW,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAClC,GAAG,OAAO,CAAC;YAEZ,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG;oBACR,GAAG,OAAO;oBACV,KAAK,EAAE,2BAAa,CAAC,oBAAoB;oBACzC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,mEAAmE;iBACC,CAAC;gBACvE,MAAM,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,IAAA,wBAAU,EAAC,OAAO,CAAC,IAAI,IAAA,iCAAmB,EAAC,OAAO,CAAC,EAAE,CAAC;YACxD,MAAM,EACJ,WAAW,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAClC,GAAG,OAAO,CAAC;YAEZ,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,wBAAwB,CACvD,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CACjC,CAAC;YACF,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,OAAO,GAAG;oBACR,GAAG,OAAO;oBACV,KAAK,EAAE,2BAAa,CAAC,iBAAiB;oBACtC,gBAAgB,EAAE,IAAI,IAAI,CACxB,cAAc,CAAC,wBAAwB,GAAG,IAAI,CAC/C;iBAC4E,CAAC;gBAChF,MAAM,OAAO,CAAC;YAChB,CAAC;iBAAM,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,GAAG;oBACR,GAAG,OAAO;oBACV,KAAK,EAAE,2BAAa,CAAC,oBAAoB;iBAC4B,CAAC;gBACxE,MAAM,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,OAAO,CAAC;IAChB,CAAC;;AA9vBH,4CA+vBC"}
|