@marigoldlabs/web3-tester 0.1.2 → 0.4.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/.env.example +26 -17
- package/LICENSE +21 -0
- package/README.md +480 -48
- package/dist/anvil.d.ts +90 -2
- package/dist/anvil.d.ts.map +1 -1
- package/dist/anvil.js +215 -13
- package/dist/anvil.js.map +1 -1
- package/dist/benchmark.d.ts +55 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +168 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/contracts/test-erc20.d.ts +227 -0
- package/dist/contracts/test-erc20.d.ts.map +1 -0
- package/dist/contracts/test-erc20.js +8 -0
- package/dist/contracts/test-erc20.js.map +1 -0
- package/dist/erc20.d.ts +38 -0
- package/dist/erc20.d.ts.map +1 -0
- package/dist/erc20.js +229 -0
- package/dist/erc20.js.map +1 -0
- package/dist/fixtures.d.ts +44 -2
- package/dist/fixtures.d.ts.map +1 -1
- package/dist/fixtures.js +162 -17
- package/dist/fixtures.js.map +1 -1
- package/dist/index.d.ts +26 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/injected-provider.d.ts.map +1 -1
- package/dist/injected-provider.js +863 -77
- package/dist/injected-provider.js.map +1 -1
- package/dist/live-fixtures.d.ts +32 -3
- package/dist/live-fixtures.d.ts.map +1 -1
- package/dist/live-fixtures.js +64 -27
- package/dist/live-fixtures.js.map +1 -1
- package/dist/matchers.d.ts +90 -0
- package/dist/matchers.d.ts.map +1 -0
- package/dist/matchers.js +268 -0
- package/dist/matchers.js.map +1 -0
- package/dist/metamask-extension.d.ts +34 -0
- package/dist/metamask-extension.d.ts.map +1 -0
- package/dist/metamask-extension.js +97 -0
- package/dist/metamask-extension.js.map +1 -0
- package/dist/mock-wallet-controller.d.ts +354 -4
- package/dist/mock-wallet-controller.d.ts.map +1 -1
- package/dist/mock-wallet-controller.js +1444 -58
- package/dist/mock-wallet-controller.js.map +1 -1
- package/dist/private-key-rpc-client.d.ts +1744 -2
- package/dist/private-key-rpc-client.d.ts.map +1 -1
- package/dist/private-key-rpc-client.js +245 -30
- package/dist/private-key-rpc-client.js.map +1 -1
- package/dist/real-wallet-cache.d.ts +103 -0
- package/dist/real-wallet-cache.d.ts.map +1 -0
- package/dist/real-wallet-cache.js +331 -0
- package/dist/real-wallet-cache.js.map +1 -0
- package/dist/real-wallet-extension-fixtures.d.ts +35 -0
- package/dist/real-wallet-extension-fixtures.d.ts.map +1 -0
- package/dist/real-wallet-extension-fixtures.js +96 -0
- package/dist/real-wallet-extension-fixtures.js.map +1 -0
- package/dist/real-wallet-extension.d.ts +86 -0
- package/dist/real-wallet-extension.d.ts.map +1 -0
- package/dist/real-wallet-extension.js +245 -0
- package/dist/real-wallet-extension.js.map +1 -0
- package/dist/real-wallet-fixtures.d.ts +52 -0
- package/dist/real-wallet-fixtures.d.ts.map +1 -0
- package/dist/real-wallet-fixtures.js +88 -0
- package/dist/real-wallet-fixtures.js.map +1 -0
- package/dist/real-wallet.d.ts +119 -19
- package/dist/real-wallet.d.ts.map +1 -1
- package/dist/real-wallet.js +1656 -144
- package/dist/real-wallet.js.map +1 -1
- package/dist/safe.d.ts +311 -0
- package/dist/safe.d.ts.map +1 -0
- package/dist/safe.js +743 -0
- package/dist/safe.js.map +1 -0
- package/dist/transactions.d.ts +118 -0
- package/dist/transactions.d.ts.map +1 -0
- package/dist/transactions.js +207 -0
- package/dist/transactions.js.map +1 -0
- package/dist/types.d.ts +36 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/wallet-personas.d.ts +99 -0
- package/dist/wallet-personas.d.ts.map +1 -0
- package/dist/wallet-personas.js +666 -0
- package/dist/wallet-personas.js.map +1 -0
- package/dist/walletconnect.d.ts +373 -0
- package/dist/walletconnect.d.ts.map +1 -0
- package/dist/walletconnect.js +799 -0
- package/dist/walletconnect.js.map +1 -0
- package/examples/live-sepolia.spec.ts +20 -1
- package/examples/playwright.config.ts +8 -0
- package/package.json +90 -8
- package/docs/API.md +0 -223
- package/docs/ARCHITECTURE.md +0 -81
- package/docs/CONSUMING_FROM_FJORD.md +0 -123
- package/docs/FJORD_LIVE_QA.md +0 -87
- package/docs/RELEASE_CHECKLIST.md +0 -55
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { performance } from 'node:perf_hooks';
|
|
4
|
+
export const WEB3_TESTER_BENCHMARK_ENV = 'WEB3_TESTER_BENCHMARK';
|
|
5
|
+
export const WEB3_TESTER_BENCHMARK_OUTPUT_ENV = 'WEB3_TESTER_BENCHMARK_OUTPUT';
|
|
6
|
+
export const WEB3_TESTER_BENCHMARK_VERBOSE_ENV = 'WEB3_TESTER_BENCHMARK_VERBOSE';
|
|
7
|
+
const testRecorders = new WeakMap();
|
|
8
|
+
export function benchmarkEnabled(env = process.env) {
|
|
9
|
+
const value = env[WEB3_TESTER_BENCHMARK_ENV]?.toLowerCase();
|
|
10
|
+
return value === '1' || value === 'true' || value === 'yes' || value === 'on';
|
|
11
|
+
}
|
|
12
|
+
export function benchmarkOutputPath(env = process.env) {
|
|
13
|
+
return path.resolve(env[WEB3_TESTER_BENCHMARK_OUTPUT_ENV] ?? path.join(process.cwd(), 'reports', 'web3-tester-benchmark.ndjson'));
|
|
14
|
+
}
|
|
15
|
+
export class BenchmarkRecorder {
|
|
16
|
+
enabled;
|
|
17
|
+
records = [];
|
|
18
|
+
attached = false;
|
|
19
|
+
outputPath;
|
|
20
|
+
suite;
|
|
21
|
+
testInfo;
|
|
22
|
+
constructor(options = {}) {
|
|
23
|
+
this.enabled = options.enabled ?? benchmarkEnabled();
|
|
24
|
+
this.outputPath = options.outputPath ?? (this.enabled ? benchmarkOutputPath() : undefined);
|
|
25
|
+
this.suite = options.suite;
|
|
26
|
+
this.testInfo = options.testInfo;
|
|
27
|
+
}
|
|
28
|
+
async measure(name, action, metadata) {
|
|
29
|
+
if (!this.enabled)
|
|
30
|
+
return action();
|
|
31
|
+
const startedAt = new Date();
|
|
32
|
+
const started = performance.now();
|
|
33
|
+
try {
|
|
34
|
+
const result = await action();
|
|
35
|
+
this.record({
|
|
36
|
+
durationMs: performance.now() - started,
|
|
37
|
+
endedAt: new Date().toISOString(),
|
|
38
|
+
metadata,
|
|
39
|
+
name,
|
|
40
|
+
startedAt: startedAt.toISOString(),
|
|
41
|
+
status: 'passed',
|
|
42
|
+
});
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
this.record({
|
|
47
|
+
durationMs: performance.now() - started,
|
|
48
|
+
endedAt: new Date().toISOString(),
|
|
49
|
+
error: serializeBenchmarkError(error),
|
|
50
|
+
metadata,
|
|
51
|
+
name,
|
|
52
|
+
startedAt: startedAt.toISOString(),
|
|
53
|
+
status: 'failed',
|
|
54
|
+
});
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async flush() {
|
|
59
|
+
if (!this.enabled || this.attached || !this.testInfo || this.records.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
this.attached = true;
|
|
62
|
+
const body = JSON.stringify(this.records, null, 2);
|
|
63
|
+
await this.testInfo
|
|
64
|
+
.attach('web3-tester-benchmark.json', {
|
|
65
|
+
body,
|
|
66
|
+
contentType: 'application/json',
|
|
67
|
+
})
|
|
68
|
+
.catch(() => undefined);
|
|
69
|
+
}
|
|
70
|
+
record(record) {
|
|
71
|
+
const fullRecord = {
|
|
72
|
+
...record,
|
|
73
|
+
durationMs: Number(record.durationMs.toFixed(2)),
|
|
74
|
+
suite: this.suite,
|
|
75
|
+
test: this.testInfo
|
|
76
|
+
? {
|
|
77
|
+
project: this.testInfo.project?.name,
|
|
78
|
+
retry: this.testInfo.retry,
|
|
79
|
+
title: benchmarkTestTitle(this.testInfo),
|
|
80
|
+
workerIndex: this.testInfo.workerIndex,
|
|
81
|
+
}
|
|
82
|
+
: undefined,
|
|
83
|
+
};
|
|
84
|
+
this.records.push(fullRecord);
|
|
85
|
+
appendBenchmarkRecord(fullRecord, this.outputPath);
|
|
86
|
+
if (process.env[WEB3_TESTER_BENCHMARK_VERBOSE_ENV] === 'true') {
|
|
87
|
+
process.stderr.write(`[web3-tester benchmark] ${fullRecord.name} ${fullRecord.status} ${fullRecord.durationMs}ms\n`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function createBenchmarkRecorder(options = {}) {
|
|
92
|
+
return new BenchmarkRecorder(options);
|
|
93
|
+
}
|
|
94
|
+
export function benchmarkForTest(testInfo, options = {}) {
|
|
95
|
+
if (!testInfo)
|
|
96
|
+
return createBenchmarkRecorder(options);
|
|
97
|
+
const existing = testRecorders.get(testInfo);
|
|
98
|
+
if (existing)
|
|
99
|
+
return existing;
|
|
100
|
+
const recorder = createBenchmarkRecorder({ ...options, testInfo });
|
|
101
|
+
testRecorders.set(testInfo, recorder);
|
|
102
|
+
return recorder;
|
|
103
|
+
}
|
|
104
|
+
export async function benchmarkStep(testInfo, name, action, metadata) {
|
|
105
|
+
return benchmarkForTest(testInfo, { suite: 'test' }).measure(name, action, metadata);
|
|
106
|
+
}
|
|
107
|
+
export async function flushBenchmark(testInfo) {
|
|
108
|
+
if (!testInfo)
|
|
109
|
+
return;
|
|
110
|
+
await benchmarkForTest(testInfo).flush();
|
|
111
|
+
}
|
|
112
|
+
export function benchmarkObjectMethods(target, recorder, options = {}) {
|
|
113
|
+
if (!recorder.enabled)
|
|
114
|
+
return target;
|
|
115
|
+
const include = options.include ? new Set(options.include) : undefined;
|
|
116
|
+
const exclude = new Set(options.exclude ?? []);
|
|
117
|
+
const prefix = options.prefix ? `${options.prefix}.` : '';
|
|
118
|
+
const wrapped = new Map();
|
|
119
|
+
return new Proxy(target, {
|
|
120
|
+
get(object, property, receiver) {
|
|
121
|
+
const value = Reflect.get(object, property, receiver);
|
|
122
|
+
if (typeof property !== 'string' || typeof value !== 'function')
|
|
123
|
+
return value;
|
|
124
|
+
if (include && !include.has(property))
|
|
125
|
+
return value.bind(object);
|
|
126
|
+
if (exclude.has(property))
|
|
127
|
+
return value.bind(object);
|
|
128
|
+
if (wrapped.has(property))
|
|
129
|
+
return wrapped.get(property);
|
|
130
|
+
const measured = (...args) => recorder.measure(`${prefix}${property}`, () => value.apply(object, args));
|
|
131
|
+
wrapped.set(property, measured);
|
|
132
|
+
return measured;
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function appendBenchmarkRecord(record, outputPath) {
|
|
137
|
+
if (!outputPath)
|
|
138
|
+
return;
|
|
139
|
+
try {
|
|
140
|
+
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
141
|
+
fs.appendFileSync(outputPath, `${JSON.stringify(record)}\n`);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Benchmarks are diagnostic-only and must never alter test behavior.
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function benchmarkTestTitle(testInfo) {
|
|
148
|
+
const titlePath = testInfo.titlePath;
|
|
149
|
+
if (Array.isArray(titlePath))
|
|
150
|
+
return titlePath.join(' > ');
|
|
151
|
+
if (typeof titlePath === 'function') {
|
|
152
|
+
const value = titlePath();
|
|
153
|
+
if (Array.isArray(value))
|
|
154
|
+
return value.join(' > ');
|
|
155
|
+
}
|
|
156
|
+
return testInfo.title;
|
|
157
|
+
}
|
|
158
|
+
function serializeBenchmarkError(error) {
|
|
159
|
+
if (error instanceof Error) {
|
|
160
|
+
return {
|
|
161
|
+
message: error.message,
|
|
162
|
+
name: error.name,
|
|
163
|
+
stack: error.stack,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return { message: String(error) };
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
export declare const TEST_ERC20_SOLC_VERSION = "0.8.24";
|
|
2
|
+
export declare const TEST_ERC20_SOURCE_SHA256 = "4e10f25dee64a793683527a62a5ffae1c4078eca896dd0962f7e0d2fa5a410a5";
|
|
3
|
+
export declare const TEST_ERC20_ABI: readonly [{
|
|
4
|
+
readonly type: "constructor";
|
|
5
|
+
readonly inputs: readonly [{
|
|
6
|
+
readonly name: "name_";
|
|
7
|
+
readonly type: "string";
|
|
8
|
+
readonly internalType: "string";
|
|
9
|
+
}, {
|
|
10
|
+
readonly name: "symbol_";
|
|
11
|
+
readonly type: "string";
|
|
12
|
+
readonly internalType: "string";
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "decimals_";
|
|
15
|
+
readonly type: "uint8";
|
|
16
|
+
readonly internalType: "uint8";
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "initialSupply_";
|
|
19
|
+
readonly type: "uint256";
|
|
20
|
+
readonly internalType: "uint256";
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "mintTo_";
|
|
23
|
+
readonly type: "address";
|
|
24
|
+
readonly internalType: "address";
|
|
25
|
+
}];
|
|
26
|
+
readonly stateMutability: "nonpayable";
|
|
27
|
+
}, {
|
|
28
|
+
readonly type: "function";
|
|
29
|
+
readonly name: "allowance";
|
|
30
|
+
readonly inputs: readonly [{
|
|
31
|
+
readonly name: "owner";
|
|
32
|
+
readonly type: "address";
|
|
33
|
+
readonly internalType: "address";
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "spender";
|
|
36
|
+
readonly type: "address";
|
|
37
|
+
readonly internalType: "address";
|
|
38
|
+
}];
|
|
39
|
+
readonly outputs: readonly [{
|
|
40
|
+
readonly name: "";
|
|
41
|
+
readonly type: "uint256";
|
|
42
|
+
readonly internalType: "uint256";
|
|
43
|
+
}];
|
|
44
|
+
readonly stateMutability: "view";
|
|
45
|
+
}, {
|
|
46
|
+
readonly type: "function";
|
|
47
|
+
readonly name: "approve";
|
|
48
|
+
readonly inputs: readonly [{
|
|
49
|
+
readonly name: "spender";
|
|
50
|
+
readonly type: "address";
|
|
51
|
+
readonly internalType: "address";
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "value";
|
|
54
|
+
readonly type: "uint256";
|
|
55
|
+
readonly internalType: "uint256";
|
|
56
|
+
}];
|
|
57
|
+
readonly outputs: readonly [{
|
|
58
|
+
readonly name: "";
|
|
59
|
+
readonly type: "bool";
|
|
60
|
+
readonly internalType: "bool";
|
|
61
|
+
}];
|
|
62
|
+
readonly stateMutability: "nonpayable";
|
|
63
|
+
}, {
|
|
64
|
+
readonly type: "function";
|
|
65
|
+
readonly name: "balanceOf";
|
|
66
|
+
readonly inputs: readonly [{
|
|
67
|
+
readonly name: "account";
|
|
68
|
+
readonly type: "address";
|
|
69
|
+
readonly internalType: "address";
|
|
70
|
+
}];
|
|
71
|
+
readonly outputs: readonly [{
|
|
72
|
+
readonly name: "";
|
|
73
|
+
readonly type: "uint256";
|
|
74
|
+
readonly internalType: "uint256";
|
|
75
|
+
}];
|
|
76
|
+
readonly stateMutability: "view";
|
|
77
|
+
}, {
|
|
78
|
+
readonly type: "function";
|
|
79
|
+
readonly name: "burn";
|
|
80
|
+
readonly inputs: readonly [{
|
|
81
|
+
readonly name: "from";
|
|
82
|
+
readonly type: "address";
|
|
83
|
+
readonly internalType: "address";
|
|
84
|
+
}, {
|
|
85
|
+
readonly name: "value";
|
|
86
|
+
readonly type: "uint256";
|
|
87
|
+
readonly internalType: "uint256";
|
|
88
|
+
}];
|
|
89
|
+
readonly outputs: readonly [];
|
|
90
|
+
readonly stateMutability: "nonpayable";
|
|
91
|
+
}, {
|
|
92
|
+
readonly type: "function";
|
|
93
|
+
readonly name: "decimals";
|
|
94
|
+
readonly inputs: readonly [];
|
|
95
|
+
readonly outputs: readonly [{
|
|
96
|
+
readonly name: "";
|
|
97
|
+
readonly type: "uint8";
|
|
98
|
+
readonly internalType: "uint8";
|
|
99
|
+
}];
|
|
100
|
+
readonly stateMutability: "view";
|
|
101
|
+
}, {
|
|
102
|
+
readonly type: "function";
|
|
103
|
+
readonly name: "mint";
|
|
104
|
+
readonly inputs: readonly [{
|
|
105
|
+
readonly name: "to";
|
|
106
|
+
readonly type: "address";
|
|
107
|
+
readonly internalType: "address";
|
|
108
|
+
}, {
|
|
109
|
+
readonly name: "value";
|
|
110
|
+
readonly type: "uint256";
|
|
111
|
+
readonly internalType: "uint256";
|
|
112
|
+
}];
|
|
113
|
+
readonly outputs: readonly [];
|
|
114
|
+
readonly stateMutability: "nonpayable";
|
|
115
|
+
}, {
|
|
116
|
+
readonly type: "function";
|
|
117
|
+
readonly name: "name";
|
|
118
|
+
readonly inputs: readonly [];
|
|
119
|
+
readonly outputs: readonly [{
|
|
120
|
+
readonly name: "";
|
|
121
|
+
readonly type: "string";
|
|
122
|
+
readonly internalType: "string";
|
|
123
|
+
}];
|
|
124
|
+
readonly stateMutability: "view";
|
|
125
|
+
}, {
|
|
126
|
+
readonly type: "function";
|
|
127
|
+
readonly name: "symbol";
|
|
128
|
+
readonly inputs: readonly [];
|
|
129
|
+
readonly outputs: readonly [{
|
|
130
|
+
readonly name: "";
|
|
131
|
+
readonly type: "string";
|
|
132
|
+
readonly internalType: "string";
|
|
133
|
+
}];
|
|
134
|
+
readonly stateMutability: "view";
|
|
135
|
+
}, {
|
|
136
|
+
readonly type: "function";
|
|
137
|
+
readonly name: "totalSupply";
|
|
138
|
+
readonly inputs: readonly [];
|
|
139
|
+
readonly outputs: readonly [{
|
|
140
|
+
readonly name: "";
|
|
141
|
+
readonly type: "uint256";
|
|
142
|
+
readonly internalType: "uint256";
|
|
143
|
+
}];
|
|
144
|
+
readonly stateMutability: "view";
|
|
145
|
+
}, {
|
|
146
|
+
readonly type: "function";
|
|
147
|
+
readonly name: "transfer";
|
|
148
|
+
readonly inputs: readonly [{
|
|
149
|
+
readonly name: "to";
|
|
150
|
+
readonly type: "address";
|
|
151
|
+
readonly internalType: "address";
|
|
152
|
+
}, {
|
|
153
|
+
readonly name: "value";
|
|
154
|
+
readonly type: "uint256";
|
|
155
|
+
readonly internalType: "uint256";
|
|
156
|
+
}];
|
|
157
|
+
readonly outputs: readonly [{
|
|
158
|
+
readonly name: "";
|
|
159
|
+
readonly type: "bool";
|
|
160
|
+
readonly internalType: "bool";
|
|
161
|
+
}];
|
|
162
|
+
readonly stateMutability: "nonpayable";
|
|
163
|
+
}, {
|
|
164
|
+
readonly type: "function";
|
|
165
|
+
readonly name: "transferFrom";
|
|
166
|
+
readonly inputs: readonly [{
|
|
167
|
+
readonly name: "from";
|
|
168
|
+
readonly type: "address";
|
|
169
|
+
readonly internalType: "address";
|
|
170
|
+
}, {
|
|
171
|
+
readonly name: "to";
|
|
172
|
+
readonly type: "address";
|
|
173
|
+
readonly internalType: "address";
|
|
174
|
+
}, {
|
|
175
|
+
readonly name: "value";
|
|
176
|
+
readonly type: "uint256";
|
|
177
|
+
readonly internalType: "uint256";
|
|
178
|
+
}];
|
|
179
|
+
readonly outputs: readonly [{
|
|
180
|
+
readonly name: "";
|
|
181
|
+
readonly type: "bool";
|
|
182
|
+
readonly internalType: "bool";
|
|
183
|
+
}];
|
|
184
|
+
readonly stateMutability: "nonpayable";
|
|
185
|
+
}, {
|
|
186
|
+
readonly type: "event";
|
|
187
|
+
readonly name: "Approval";
|
|
188
|
+
readonly inputs: readonly [{
|
|
189
|
+
readonly name: "owner";
|
|
190
|
+
readonly type: "address";
|
|
191
|
+
readonly indexed: true;
|
|
192
|
+
readonly internalType: "address";
|
|
193
|
+
}, {
|
|
194
|
+
readonly name: "spender";
|
|
195
|
+
readonly type: "address";
|
|
196
|
+
readonly indexed: true;
|
|
197
|
+
readonly internalType: "address";
|
|
198
|
+
}, {
|
|
199
|
+
readonly name: "value";
|
|
200
|
+
readonly type: "uint256";
|
|
201
|
+
readonly indexed: false;
|
|
202
|
+
readonly internalType: "uint256";
|
|
203
|
+
}];
|
|
204
|
+
readonly anonymous: false;
|
|
205
|
+
}, {
|
|
206
|
+
readonly type: "event";
|
|
207
|
+
readonly name: "Transfer";
|
|
208
|
+
readonly inputs: readonly [{
|
|
209
|
+
readonly name: "from";
|
|
210
|
+
readonly type: "address";
|
|
211
|
+
readonly indexed: true;
|
|
212
|
+
readonly internalType: "address";
|
|
213
|
+
}, {
|
|
214
|
+
readonly name: "to";
|
|
215
|
+
readonly type: "address";
|
|
216
|
+
readonly indexed: true;
|
|
217
|
+
readonly internalType: "address";
|
|
218
|
+
}, {
|
|
219
|
+
readonly name: "value";
|
|
220
|
+
readonly type: "uint256";
|
|
221
|
+
readonly indexed: false;
|
|
222
|
+
readonly internalType: "uint256";
|
|
223
|
+
}];
|
|
224
|
+
readonly anonymous: false;
|
|
225
|
+
}];
|
|
226
|
+
export declare const TEST_ERC20_BYTECODE: "0x60a06040523480156200001157600080fd5b5060405162000c4038038062000c408339810160408190526200003491620001cc565b60036200004286826200030d565b5060046200005185826200030d565b5060ff831660805281156200006c576200006c818362000077565b505050505062000401565b80600260008282546200008b9190620003d9565b90915550506001600160a01b03821660009081526020819052604081208054839290620000ba908490620003d9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200012c57600080fd5b81516001600160401b038082111562000149576200014962000104565b604051601f8301601f19908116603f0116810190828211818310171562000174576200017462000104565b81604052838152602092508660208588010111156200019257600080fd5b600091505b83821015620001b6578582018301518183018401529082019062000197565b6000602085830101528094505050505092915050565b600080600080600060a08688031215620001e557600080fd5b85516001600160401b0380821115620001fd57600080fd5b6200020b89838a016200011a565b965060208801519150808211156200022257600080fd5b5062000231888289016200011a565b945050604086015160ff811681146200024957600080fd5b6060870151608088015191945092506001600160a01b03811681146200026e57600080fd5b809150509295509295909350565b600181811c908216806200029157607f821691505b602082108103620002b257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000308576000816000526020600020601f850160051c81016020861015620002e35750805b601f850160051c820191505b818110156200030457828155600101620002ef565b5050505b505050565b81516001600160401b0381111562000329576200032962000104565b62000341816200033a84546200027c565b84620002b8565b602080601f831160018114620003795760008415620003605750858301515b600019600386901b1c1916600185901b17855562000304565b600085815260208120601f198616915b82811015620003aa5788860151825594840194600190910190840162000389565b5085821015620003c95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003fb57634e487b7160e01b600052601160045260246000fd5b92915050565b6080516108236200041d600039600061011901526108236000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461014d57806370a082311461016257806395d89b411461018b5780639dc29fac14610193578063a9059cbb146101a6578063dd62ed3e146101b957600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101f2565b6040516100c39190610687565b60405180910390f35b6100df6100da3660046106f2565b610280565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f36600461071c565b6102ed565b61013b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100c3565b61016061015b3660046106f2565b6103be565b005b6100f3610170366004610758565b6001600160a01b031660009081526020819052604090205490565b6100b66103cc565b6101606101a13660046106f2565b6103d9565b6100df6101b43660046106f2565b6104cd565b6100f36101c736600461077a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600380546101ff906107ad565b80601f016020809104026020016040519081016040528092919081815260200182805461022b906107ad565b80156102785780601f1061024d57610100808354040283529160200191610278565b820191906000526020600020905b81548152906001019060200180831161025b57829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102db9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260016020908152604080832033845290915281205460001981146103a857828110156103795760405162461bcd60e51b815260206004820152602160248201527f5465737445524332303a20696e73756666696369656e7420616c6c6f77616e636044820152606560f81b60648201526084015b60405180910390fd5b61038383826107fd565b6001600160a01b03861660009081526001602090815260408083203384529091529020555b6103b38585856104e3565b506001949350505050565b6103c88282610605565b5050565b600480546101ff906107ad565b6001600160a01b0382166000908152602081905260409020548111156104415760405162461bcd60e51b815260206004820152601f60248201527f5465737445524332303a206275726e20657863656564732062616c616e6365006044820152606401610370565b6001600160a01b038216600090815260208190526040812080548392906104699084906107fd565b92505081905550806002600082825461048291906107fd565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60006104da3384846104e3565b50600192915050565b6001600160a01b0383166000908152602081905260409020548111156105575760405162461bcd60e51b815260206004820152602360248201527f5465737445524332303a207472616e7366657220657863656564732062616c616044820152626e636560e81b6064820152608401610370565b6001600160a01b0383166000908152602081905260408120805483929061057f9084906107fd565b90915550506001600160a01b038216600090815260208190526040812080548392906105ac908490610810565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105f891815260200190565b60405180910390a3505050565b80600260008282546106179190610810565b90915550506001600160a01b03821660009081526020819052604081208054839290610644908490610810565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104c1565b60006020808352835180602085015260005b818110156106b557858101830151858201604001528201610699565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106ed57600080fd5b919050565b6000806040838503121561070557600080fd5b61070e836106d6565b946020939093013593505050565b60008060006060848603121561073157600080fd5b61073a846106d6565b9250610748602085016106d6565b9150604084013590509250925092565b60006020828403121561076a57600080fd5b610773826106d6565b9392505050565b6000806040838503121561078d57600080fd5b610796836106d6565b91506107a4602084016106d6565b90509250929050565b600181811c908216806107c157607f821691505b6020821081036107e157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102e7576102e76107e7565b808201808211156102e7576102e76107e756";
|
|
227
|
+
//# sourceMappingURL=test-erc20.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-erc20.d.ts","sourceRoot":"","sources":["../../src/contracts/test-erc20.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAChD,eAAO,MAAM,wBAAwB,qEAAqE,CAAC;AAC3G,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2oG,CAAC;AACvqG,eAAO,MAAM,mBAAmB,EAAG,ooMAA6oM,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// GENERATED by scripts/build-contracts.mjs — do not edit.
|
|
2
|
+
// solc 0.8.24+commit.e11b9ed9 via forge, profile contracts/foundry.toml.
|
|
3
|
+
// Source sha256: TestERC20.sol=4e10f25dee64a793683527a62a5ffae1c4078eca896dd0962f7e0d2fa5a410a5
|
|
4
|
+
export const TEST_ERC20_SOLC_VERSION = '0.8.24';
|
|
5
|
+
export const TEST_ERC20_SOURCE_SHA256 = '4e10f25dee64a793683527a62a5ffae1c4078eca896dd0962f7e0d2fa5a410a5';
|
|
6
|
+
export const TEST_ERC20_ABI = [{ "type": "constructor", "inputs": [{ "name": "name_", "type": "string", "internalType": "string" }, { "name": "symbol_", "type": "string", "internalType": "string" }, { "name": "decimals_", "type": "uint8", "internalType": "uint8" }, { "name": "initialSupply_", "type": "uint256", "internalType": "uint256" }, { "name": "mintTo_", "type": "address", "internalType": "address" }], "stateMutability": "nonpayable" }, { "type": "function", "name": "allowance", "inputs": [{ "name": "owner", "type": "address", "internalType": "address" }, { "name": "spender", "type": "address", "internalType": "address" }], "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], "stateMutability": "view" }, { "type": "function", "name": "approve", "inputs": [{ "name": "spender", "type": "address", "internalType": "address" }, { "name": "value", "type": "uint256", "internalType": "uint256" }], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "nonpayable" }, { "type": "function", "name": "balanceOf", "inputs": [{ "name": "account", "type": "address", "internalType": "address" }], "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], "stateMutability": "view" }, { "type": "function", "name": "burn", "inputs": [{ "name": "from", "type": "address", "internalType": "address" }, { "name": "value", "type": "uint256", "internalType": "uint256" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "decimals", "inputs": [], "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], "stateMutability": "view" }, { "type": "function", "name": "mint", "inputs": [{ "name": "to", "type": "address", "internalType": "address" }, { "name": "value", "type": "uint256", "internalType": "uint256" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "name", "inputs": [], "outputs": [{ "name": "", "type": "string", "internalType": "string" }], "stateMutability": "view" }, { "type": "function", "name": "symbol", "inputs": [], "outputs": [{ "name": "", "type": "string", "internalType": "string" }], "stateMutability": "view" }, { "type": "function", "name": "totalSupply", "inputs": [], "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], "stateMutability": "view" }, { "type": "function", "name": "transfer", "inputs": [{ "name": "to", "type": "address", "internalType": "address" }, { "name": "value", "type": "uint256", "internalType": "uint256" }], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "nonpayable" }, { "type": "function", "name": "transferFrom", "inputs": [{ "name": "from", "type": "address", "internalType": "address" }, { "name": "to", "type": "address", "internalType": "address" }, { "name": "value", "type": "uint256", "internalType": "uint256" }], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "nonpayable" }, { "type": "event", "name": "Approval", "inputs": [{ "name": "owner", "type": "address", "indexed": true, "internalType": "address" }, { "name": "spender", "type": "address", "indexed": true, "internalType": "address" }, { "name": "value", "type": "uint256", "indexed": false, "internalType": "uint256" }], "anonymous": false }, { "type": "event", "name": "Transfer", "inputs": [{ "name": "from", "type": "address", "indexed": true, "internalType": "address" }, { "name": "to", "type": "address", "indexed": true, "internalType": "address" }, { "name": "value", "type": "uint256", "indexed": false, "internalType": "uint256" }], "anonymous": false }];
|
|
7
|
+
export const TEST_ERC20_BYTECODE = '0x60a06040523480156200001157600080fd5b5060405162000c4038038062000c408339810160408190526200003491620001cc565b60036200004286826200030d565b5060046200005185826200030d565b5060ff831660805281156200006c576200006c818362000077565b505050505062000401565b80600260008282546200008b9190620003d9565b90915550506001600160a01b03821660009081526020819052604081208054839290620000ba908490620003d9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200012c57600080fd5b81516001600160401b038082111562000149576200014962000104565b604051601f8301601f19908116603f0116810190828211818310171562000174576200017462000104565b81604052838152602092508660208588010111156200019257600080fd5b600091505b83821015620001b6578582018301518183018401529082019062000197565b6000602085830101528094505050505092915050565b600080600080600060a08688031215620001e557600080fd5b85516001600160401b0380821115620001fd57600080fd5b6200020b89838a016200011a565b965060208801519150808211156200022257600080fd5b5062000231888289016200011a565b945050604086015160ff811681146200024957600080fd5b6060870151608088015191945092506001600160a01b03811681146200026e57600080fd5b809150509295509295909350565b600181811c908216806200029157607f821691505b602082108103620002b257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000308576000816000526020600020601f850160051c81016020861015620002e35750805b601f850160051c820191505b818110156200030457828155600101620002ef565b5050505b505050565b81516001600160401b0381111562000329576200032962000104565b62000341816200033a84546200027c565b84620002b8565b602080601f831160018114620003795760008415620003605750858301515b600019600386901b1c1916600185901b17855562000304565b600085815260208120601f198616915b82811015620003aa5788860151825594840194600190910190840162000389565b5085821015620003c95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003fb57634e487b7160e01b600052601160045260246000fd5b92915050565b6080516108236200041d600039600061011901526108236000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461014d57806370a082311461016257806395d89b411461018b5780639dc29fac14610193578063a9059cbb146101a6578063dd62ed3e146101b957600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101f2565b6040516100c39190610687565b60405180910390f35b6100df6100da3660046106f2565b610280565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f36600461071c565b6102ed565b61013b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100c3565b61016061015b3660046106f2565b6103be565b005b6100f3610170366004610758565b6001600160a01b031660009081526020819052604090205490565b6100b66103cc565b6101606101a13660046106f2565b6103d9565b6100df6101b43660046106f2565b6104cd565b6100f36101c736600461077a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600380546101ff906107ad565b80601f016020809104026020016040519081016040528092919081815260200182805461022b906107ad565b80156102785780601f1061024d57610100808354040283529160200191610278565b820191906000526020600020905b81548152906001019060200180831161025b57829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102db9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260016020908152604080832033845290915281205460001981146103a857828110156103795760405162461bcd60e51b815260206004820152602160248201527f5465737445524332303a20696e73756666696369656e7420616c6c6f77616e636044820152606560f81b60648201526084015b60405180910390fd5b61038383826107fd565b6001600160a01b03861660009081526001602090815260408083203384529091529020555b6103b38585856104e3565b506001949350505050565b6103c88282610605565b5050565b600480546101ff906107ad565b6001600160a01b0382166000908152602081905260409020548111156104415760405162461bcd60e51b815260206004820152601f60248201527f5465737445524332303a206275726e20657863656564732062616c616e6365006044820152606401610370565b6001600160a01b038216600090815260208190526040812080548392906104699084906107fd565b92505081905550806002600082825461048291906107fd565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60006104da3384846104e3565b50600192915050565b6001600160a01b0383166000908152602081905260409020548111156105575760405162461bcd60e51b815260206004820152602360248201527f5465737445524332303a207472616e7366657220657863656564732062616c616044820152626e636560e81b6064820152608401610370565b6001600160a01b0383166000908152602081905260408120805483929061057f9084906107fd565b90915550506001600160a01b038216600090815260208190526040812080548392906105ac908490610810565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105f891815260200190565b60405180910390a3505050565b80600260008282546106179190610810565b90915550506001600160a01b03821660009081526020819052604081208054839290610644908490610810565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104c1565b60006020808352835180602085015260005b818110156106b557858101830151858201604001528201610699565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106ed57600080fd5b919050565b6000806040838503121561070557600080fd5b61070e836106d6565b946020939093013593505050565b60008060006060848603121561073157600080fd5b61073a846106d6565b9250610748602085016106d6565b9150604084013590509250925092565b60006020828403121561076a57600080fd5b610773826106d6565b9392505050565b6000806040838503121561078d57600080fd5b610796836106d6565b91506107a4602084016106d6565b90509250929050565b600181811c908216806107c157607f821691505b6020821081036107e157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102e7576102e76107e7565b808201808211156102e7576102e76107e756';
|
|
8
|
+
//# sourceMappingURL=test-erc20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-erc20.js","sourceRoot":"","sources":["../../src/contracts/test-erc20.ts"],"names":[],"mappings":"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"}
|
package/dist/erc20.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Address } from 'viem';
|
|
2
|
+
import type { RpcClient } from './types.js';
|
|
3
|
+
export { TEST_ERC20_ABI, TEST_ERC20_BYTECODE, TEST_ERC20_SOLC_VERSION, TEST_ERC20_SOURCE_SHA256, } from './contracts/test-erc20.js';
|
|
4
|
+
export type Erc20StorageLayout = 'solidity' | 'vyper';
|
|
5
|
+
export type Erc20SlotInfo = {
|
|
6
|
+
layout: Erc20StorageLayout;
|
|
7
|
+
/** Mapping base slot: a small integer, or an ERC-7201 namespace root. */
|
|
8
|
+
balanceSlot: bigint;
|
|
9
|
+
/** Discovered lazily on first adjustTotalSupply use. */
|
|
10
|
+
totalSupplySlot?: bigint;
|
|
11
|
+
};
|
|
12
|
+
export type DealErc20Options = {
|
|
13
|
+
/** forge-std deal(token,to,give,adjust) parity: shift totalSupply by the balance delta. Default false. */
|
|
14
|
+
adjustTotalSupply?: boolean;
|
|
15
|
+
/** Highest integer mapping base slot probed per layout. Default 64. */
|
|
16
|
+
maxSlot?: number;
|
|
17
|
+
/** Skip discovery with a known mapping base slot. */
|
|
18
|
+
slot?: bigint | number;
|
|
19
|
+
/** Layout used with `slot`. Default 'solidity'. */
|
|
20
|
+
layout?: Erc20StorageLayout;
|
|
21
|
+
/** Contract whose storage holds balances when it differs from `token`. */
|
|
22
|
+
storageAddress?: Address;
|
|
23
|
+
};
|
|
24
|
+
export declare class Erc20DealError extends Error {
|
|
25
|
+
readonly token: Address;
|
|
26
|
+
/** Candidate slots tried across both layouts. */
|
|
27
|
+
readonly probedSlots: number;
|
|
28
|
+
constructor(message: string, token: Address,
|
|
29
|
+
/** Candidate slots tried across both layouts. */
|
|
30
|
+
probedSlots: number);
|
|
31
|
+
}
|
|
32
|
+
export declare function discoverErc20BalanceSlot(client: RpcClient, token: Address, holder: Address, options?: {
|
|
33
|
+
maxSlot?: number;
|
|
34
|
+
storageAddress?: Address;
|
|
35
|
+
}): Promise<Erc20SlotInfo>;
|
|
36
|
+
export declare function getErc20Balance(client: RpcClient, token: Address, account: Address): Promise<bigint>;
|
|
37
|
+
export declare function dealErc20(client: RpcClient, token: Address, account: Address, amount: bigint, options?: DealErc20Options, cache?: Map<string, Erc20SlotInfo>): Promise<void>;
|
|
38
|
+
//# sourceMappingURL=erc20.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,OAAO,EAEb,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0GAA0G;IAC1G,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,mDAAmD;IACnD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,qBAAa,cAAe,SAAQ,KAAK;IAGrC,QAAQ,CAAC,KAAK,EAAE,OAAO;IACvB,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAH5B,OAAO,EAAE,MAAM,EACN,KAAK,EAAE,OAAO;IACvB,iDAAiD;IACxC,WAAW,EAAE,MAAM;CAK/B;AAsFD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,EACf,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3D,OAAO,CAAC,aAAa,CAAC,CAkDxB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,gBAAqB,EAC9B,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAoFf"}
|