@latticexyz/common 2.2.22-5669ab13e650f496a60c780983866778ae8943a3 → 2.2.22-599ea71ff11bf2f1ea15dee14514dbfa301eb977
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/dist/chains.d.ts +7 -5
- package/dist/internal.d.ts +8 -5
- package/dist/internal.js +206 -145
- package/dist/internal.js.map +1 -1
- package/package.json +3 -3
package/dist/chains.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as viem_chains from 'viem/chains';
|
|
2
2
|
import { Chain } from 'viem/chains';
|
|
3
3
|
import * as viem from 'viem';
|
|
4
|
-
import * as viem_experimental from 'viem/experimental';
|
|
5
4
|
import * as viem_op_stack from 'viem/op-stack';
|
|
6
5
|
|
|
7
6
|
type MUDChain = Chain & {
|
|
@@ -36,6 +35,7 @@ declare const mudFoundry: {
|
|
|
36
35
|
multicall3?: viem.ChainContract | undefined;
|
|
37
36
|
universalSignatureVerifier?: viem.ChainContract | undefined;
|
|
38
37
|
} | undefined;
|
|
38
|
+
readonly ensTlds?: readonly string[] | undefined;
|
|
39
39
|
readonly id: 31337;
|
|
40
40
|
readonly name: "Foundry";
|
|
41
41
|
readonly nativeCurrency: {
|
|
@@ -106,6 +106,7 @@ declare const redstone: {
|
|
|
106
106
|
readonly address: "0x4200000000000000000000000000000000000016";
|
|
107
107
|
};
|
|
108
108
|
};
|
|
109
|
+
readonly ensTlds?: readonly string[] | undefined;
|
|
109
110
|
readonly id: 690;
|
|
110
111
|
readonly name: "Redstone";
|
|
111
112
|
readonly nativeCurrency: {
|
|
@@ -312,7 +313,7 @@ declare const redstone: {
|
|
|
312
313
|
value: bigint;
|
|
313
314
|
yParity: number;
|
|
314
315
|
accessList: viem.AccessList;
|
|
315
|
-
authorizationList:
|
|
316
|
+
authorizationList: viem.SignedAuthorizationList<number>;
|
|
316
317
|
blobVersionedHashes?: undefined;
|
|
317
318
|
chainId: number;
|
|
318
319
|
type: "eip7702";
|
|
@@ -419,6 +420,7 @@ declare const garnet: {
|
|
|
419
420
|
readonly address: "0x4200000000000000000000000000000000000016";
|
|
420
421
|
};
|
|
421
422
|
};
|
|
423
|
+
readonly ensTlds?: readonly string[] | undefined;
|
|
422
424
|
readonly id: 17069;
|
|
423
425
|
readonly name: "Garnet Testnet";
|
|
424
426
|
readonly nativeCurrency: {
|
|
@@ -619,7 +621,7 @@ declare const garnet: {
|
|
|
619
621
|
value: bigint;
|
|
620
622
|
yParity: number;
|
|
621
623
|
accessList: viem.AccessList;
|
|
622
|
-
authorizationList:
|
|
624
|
+
authorizationList: viem.SignedAuthorizationList<number>;
|
|
623
625
|
blobVersionedHashes?: undefined;
|
|
624
626
|
chainId: number;
|
|
625
627
|
type: "eip7702";
|
|
@@ -923,7 +925,7 @@ declare const rhodolite: {
|
|
|
923
925
|
value: bigint;
|
|
924
926
|
yParity: number;
|
|
925
927
|
accessList: viem.AccessList;
|
|
926
|
-
authorizationList:
|
|
928
|
+
authorizationList: viem.SignedAuthorizationList<number>;
|
|
927
929
|
blobVersionedHashes?: undefined;
|
|
928
930
|
chainId: number;
|
|
929
931
|
type: "eip7702";
|
|
@@ -1216,7 +1218,7 @@ declare const pyrope: {
|
|
|
1216
1218
|
value: bigint;
|
|
1217
1219
|
yParity: number;
|
|
1218
1220
|
accessList: viem.AccessList;
|
|
1219
|
-
authorizationList:
|
|
1221
|
+
authorizationList: viem.SignedAuthorizationList<number>;
|
|
1220
1222
|
blobVersionedHashes?: undefined;
|
|
1221
1223
|
chainId: number;
|
|
1222
1224
|
type: "eip7702";
|
package/dist/internal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Client, Transport, Chain, Account, Hex, Address
|
|
1
|
+
import { Client, Transport, Chain, Account, Hex, Address } from 'viem';
|
|
2
2
|
|
|
3
3
|
declare function waitForTransactions({ client, hashes, debugLabel, }: {
|
|
4
4
|
readonly client: Client<Transport, Chain | undefined, Account>;
|
|
@@ -34,10 +34,13 @@ declare function getContractAddress({ deployerAddress, bytecode, salt, }: {
|
|
|
34
34
|
declare function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined>;
|
|
35
35
|
|
|
36
36
|
type WiresawOptions<transport extends Transport> = {
|
|
37
|
-
wiresaw
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
/** wiresaw-compatible transport */
|
|
38
|
+
wiresawTransport: transport;
|
|
39
|
+
/** fallback transport for bundler RPC methods */
|
|
40
|
+
fallbackBundlerTransport?: Transport;
|
|
41
|
+
/** fallback transport for all other RPC methods */
|
|
42
|
+
fallbackDefaultTransport?: Transport;
|
|
40
43
|
};
|
|
41
|
-
declare function wiresaw<const wiresawTransport extends Transport>(
|
|
44
|
+
declare function wiresaw<const wiresawTransport extends Transport>(transports?: WiresawOptions<wiresawTransport>): wiresawTransport;
|
|
42
45
|
|
|
43
46
|
export { type Contract, ensureContract, ensureContractsDeployed, ensureDeployer, getContractAddress, getDeployer, waitForTransactions, wiresaw };
|
package/dist/internal.js
CHANGED
|
@@ -203,6 +203,9 @@ function getContractAddress({
|
|
|
203
203
|
return getCreate2Address2({ from: deployerAddress, bytecode, salt });
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
// src/transports/wiresaw.ts
|
|
207
|
+
import { http as http2 } from "viem";
|
|
208
|
+
|
|
206
209
|
// src/transports/methods/estimateUserOperationGas.ts
|
|
207
210
|
import {
|
|
208
211
|
decodeFunctionResult,
|
|
@@ -216,8 +219,8 @@ import {
|
|
|
216
219
|
toPackedUserOperation
|
|
217
220
|
} from "viem/account-abstraction";
|
|
218
221
|
|
|
219
|
-
// src/transports/
|
|
220
|
-
var
|
|
222
|
+
// src/transports/entryPointGasSimulations.ts
|
|
223
|
+
var entryPointGasSimulationsAbi = [
|
|
221
224
|
{
|
|
222
225
|
inputs: [
|
|
223
226
|
{
|
|
@@ -271,54 +274,34 @@ var entryPointSimulationsAbi = [
|
|
|
271
274
|
internalType: "struct PackedUserOperation",
|
|
272
275
|
name: "op",
|
|
273
276
|
type: "tuple"
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
internalType: "address",
|
|
277
|
-
name: "target",
|
|
278
|
-
type: "address"
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
internalType: "bytes",
|
|
282
|
-
name: "targetCallData",
|
|
283
|
-
type: "bytes"
|
|
284
277
|
}
|
|
285
278
|
],
|
|
286
|
-
name: "
|
|
279
|
+
name: "estimateGas",
|
|
287
280
|
outputs: [
|
|
288
281
|
{
|
|
289
282
|
components: [
|
|
290
283
|
{
|
|
291
284
|
internalType: "uint256",
|
|
292
|
-
name: "
|
|
285
|
+
name: "verificationGas",
|
|
293
286
|
type: "uint256"
|
|
294
287
|
},
|
|
295
288
|
{
|
|
296
289
|
internalType: "uint256",
|
|
297
|
-
name: "
|
|
290
|
+
name: "callGas",
|
|
298
291
|
type: "uint256"
|
|
299
292
|
},
|
|
300
293
|
{
|
|
301
294
|
internalType: "uint256",
|
|
302
|
-
name: "
|
|
295
|
+
name: "paymasterVerificationGas",
|
|
303
296
|
type: "uint256"
|
|
304
297
|
},
|
|
305
298
|
{
|
|
306
299
|
internalType: "uint256",
|
|
307
|
-
name: "
|
|
300
|
+
name: "paymasterPostOpGas",
|
|
308
301
|
type: "uint256"
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
internalType: "bool",
|
|
312
|
-
name: "targetSuccess",
|
|
313
|
-
type: "bool"
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
internalType: "bytes",
|
|
317
|
-
name: "targetResult",
|
|
318
|
-
type: "bytes"
|
|
319
302
|
}
|
|
320
303
|
],
|
|
321
|
-
internalType: "struct
|
|
304
|
+
internalType: "struct EntryPoint.GasInfo",
|
|
322
305
|
name: "",
|
|
323
306
|
type: "tuple"
|
|
324
307
|
}
|
|
@@ -327,10 +310,6 @@ var entryPointSimulationsAbi = [
|
|
|
327
310
|
type: "function"
|
|
328
311
|
}
|
|
329
312
|
];
|
|
330
|
-
var entryPointSimulationsDeployedBytecode = (
|
|
331
|
-
// eslint-disable-next-line max-len
|
|
332
|
-
"0x60806040526004361061016d5760003560e01c8063765e827f116100cb578063b760faf91161007f578063c3bce00911610059578063c3bce009146105ac578063dbed18e0146105d9578063fc7e286d146105f957600080fd5b8063b760faf914610564578063bb9fe6bf14610577578063c23a5cea1461058c57600080fd5b8063957122ab116100b0578063957122ab146104f757806397b2dcb9146105175780639b249f691461054457600080fd5b8063765e827f146104b7578063850aaf62146104d757600080fd5b8063205c28781161012257806335567e1a1161010757806335567e1a146102905780635287ce121461032557806370a082311461047457600080fd5b8063205c28781461025057806322cdde4c1461027057600080fd5b80630396cb60116101535780630396cb60146101e55780630bd28e3b146101f85780631b2e01b81461021857600080fd5b806242dc531461018257806301ffc9a7146101b557600080fd5b3661017d5761017b336106cb565b005b600080fd5b34801561018e57600080fd5b506101a261019d36600461423e565b6106ec565b6040519081526020015b60405180910390f35b3480156101c157600080fd5b506101d56101d0366004614304565b6108b7565b60405190151581526020016101ac565b61017b6101f3366004614346565b610a34565b34801561020457600080fd5b5061017b610213366004614394565b610dca565b34801561022457600080fd5b506101a26102333660046143af565b600160209081526000928352604080842090915290825290205481565b34801561025c57600080fd5b5061017b61026b3660046143e4565b610e12565b34801561027c57600080fd5b506101a261028b366004614429565b610fbc565b34801561029c57600080fd5b506101a26102ab3660046143af565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff8516845290915290819020549082901b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000161792915050565b34801561033157600080fd5b5061041261034036600461445e565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff1660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046dffffffffffffffffffffffffffff16928101929092526f01000000000000000000000000000000810463ffffffff166060830152730100000000000000000000000000000000000000900465ffffffffffff16608082015290565b6040516101ac9190600060a082019050825182526020830151151560208301526dffffffffffffffffffffffffffff604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561048057600080fd5b506101a261048f36600461445e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156104c357600080fd5b5061017b6104d23660046144c0565b610ffe565b3480156104e357600080fd5b5061017b6104f2366004614517565b61117b565b34801561050357600080fd5b5061017b61051236600461456c565b611220565b34801561052357600080fd5b506105376105323660046145f1565b611378565b6040516101ac91906146c1565b34801561055057600080fd5b5061017b61055f366004614710565b6114c4565b61017b61057236600461445e565b6106cb565b34801561058357600080fd5b5061017b6115af565b34801561059857600080fd5b5061017b6105a736600461445e565b61178f565b3480156105b857600080fd5b506105cc6105c7366004614429565b611a7c565b6040516101ac9190614752565b3480156105e557600080fd5b5061017b6105f43660046144c0565b611d80565b34801561060557600080fd5b5061068161061436600461445e565b6000602081905290815260409020805460019091015460ff81169061010081046dffffffffffffffffffffffffffff16906f01000000000000000000000000000000810463ffffffff1690730100000000000000000000000000000000000000900465ffffffffffff1685565b6040805195865293151560208601526dffffffffffffffffffffffffffff9092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a0016101ac565b60015b60058110156106df576001016106ce565b6106e88261222c565b5050565b6000805a9050333014610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b8451606081015160a082015181016127100160405a603f028161078557610785614832565b0410156107b6577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b8751600090156108575760006107d3846000015160008c86612282565b9050806108555760006107e761080061229a565b80519091501561084f57846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610846929190614861565b60405180910390a35b60019250505b505b600088608001515a86030190506108a7828a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506122c6915050565b955050505050505b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f60fc6b6e00000000000000000000000000000000000000000000000000000000148061094a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f915074d800000000000000000000000000000000000000000000000000000000145b8061099657507fffffffff0000000000000000000000000000000000000000000000000000000082167fcf28ef9700000000000000000000000000000000000000000000000000000000145b806109e257507fffffffff0000000000000000000000000000000000000000000000000000000082167f3e84f02100000000000000000000000000000000000000000000000000000000145b80610a2e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b33600090815260208190526040902063ffffffff8216610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152606401610757565b600181015463ffffffff6f0100000000000000000000000000000090910481169083161015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610757565b6001810154600090610b6390349061010090046dffffffffffffffffffffffffffff166148a9565b905060008111610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152606401610757565b6dffffffffffffffffffffffffffff811115610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152606401610757565b6040805160a08101825283548152600160208083018281526dffffffffffffffffffffffffffff86811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16730100000000000000000000000000000000000000027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff979094166f0100000000000000000000000000000002969096167fffffffffffffff00000000000000000000ffffffffffffffffffffffffffffff91909516610100027fffffffffffffffffffffffffffffffffff0000000000000000000000000000ff991515999099167fffffffffffffffffffffffffffffffffff00000000000000000000000000000090941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b33600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff851684529091528120805491610e0a836148bc565b919050555050565b3360009081526020819052604090208054821115610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152606401610757565b8054610e999083906148f4565b81556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610f46576040519150601f19603f3d011682016040523d82523d6000602084013e610f4b565b606091505b5050905080610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152606401610757565b50505050565b6000610fc7826124c2565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b6110066124db565b8160008167ffffffffffffffff81111561102257611022613fd1565b60405190808252806020026020018201604052801561105b57816020015b611048613e25565b8152602001906001900390816110405790505b50905060005b828110156110d457600082828151811061107d5761107d614907565b602002602001015190506000806110b8848a8a878181106110a0576110a0614907565b90506020028101906110b29190614936565b8561251c565b915091506110c9848383600061277b565b505050600101611061565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b8381101561115e576111528188888481811061112157611121614907565b90506020028101906111339190614936565b85848151811061114557611145614907565b60200260200101516129d0565b90910190600101611103565b506111698482612da6565b5050506111766001600255565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516111a5929190614974565b600060405180830381855af49150503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b509150915081816040517f99410554000000000000000000000000000000000000000000000000000000008152600401610757929190614984565b83158015611243575073ffffffffffffffffffffffffffffffffffffffff83163b155b156112aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006044820152606401610757565b6014811061133c5760006112c1601482848661499f565b6112ca916149c9565b60601c9050803b60000361133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610757565b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610757565b6113b36040518060c0016040528060008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6113bb6124db565b6113c3613e25565b6113cc86612eed565b6000806113db6000898561251c565b9150915060006113ed60008a866129d0565b90506000606073ffffffffffffffffffffffffffffffffffffffff8a161561147f578973ffffffffffffffffffffffffffffffffffffffff168989604051611436929190614974565b6000604051808303816000865af19150503d8060008114611473576040519150601f19603f3d011682016040523d82523d6000602084013e611478565b606091505b5090925090505b6040518060c001604052808760800151815260200184815260200186815260200185815260200183151581526020018281525096505050505050506108af6001600255565b60006114e560065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3684846040518363ffffffff1660e01b815260040161151f929190614a5a565b6020604051808303816000875af115801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190614a6e565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909150602401610757565b336000908152602081905260408120600181015490916f0100000000000000000000000000000090910463ffffffff169003611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152606401610757565b600181015460ff166116b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152606401610757565b60018101546000906116e0906f01000000000000000000000000000000900463ffffffff1642614a8b565b6001830180547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001673010000000000000000000000000000000000000065ffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046dffffffffffffffffffffffffffff168061181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152606401610757565b6001820154730100000000000000000000000000000000000000900465ffffffffffff166118a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610757565b60018201544273010000000000000000000000000000000000000090910465ffffffffffff161115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610757565b6001820180547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a0c576040519150601f19603f3d011682016040523d82523d6000602084013e611a11565b606091505b5050905080610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152606401610757565b611a84613ed7565b611a8c613e25565b611a9583612eed565b600080611aa46000868561251c565b845160e001516040805180820182526000808252602080830182815273ffffffffffffffffffffffffffffffffffffffff95861683528282528483206001908101546dffffffffffffffffffffffffffff6101008083048216885263ffffffff6f010000000000000000000000000000009384900481169095528e51518951808b018b5288815280880189815291909b168852878752898820909401549081049091168952049091169052835180850190945281845283015293955091935090366000611b7460408b018b614ab1565b909250905060006014821015611b8b576000611ba6565b611b9960146000848661499f565b611ba2916149c9565b60601c5b6040805180820182526000808252602080830182815273ffffffffffffffffffffffffffffffffffffffff86168352908290529290206001015461010081046dffffffffffffffffffffffffffff1682526f01000000000000000000000000000000900463ffffffff169091529091509350505050600085905060006040518060a001604052808960800151815260200189604001518152602001888152602001878152602001611c588a6060015190565b905260408051808201825260035473ffffffffffffffffffffffffffffffffffffffff908116825282518084019093526004548352600554602084810191909152820192909252919250831615801590611cc9575060018373ffffffffffffffffffffffffffffffffffffffff1614155b15611d4d5760408051808201825273ffffffffffffffffffffffffffffffffffffffff851680825282518084018452600080825260208083018281529382528181529490206001015461010081046dffffffffffffffffffffffffffff1682526f01000000000000000000000000000000900463ffffffff16909152909182015290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b611d886124db565b816000805b82811015611f7a5736868683818110611da857611da8614907565b9050602002810190611dba9190614b16565b9050366000611dc98380614b4a565b90925090506000611de0604085016020860161445e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff821601611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152606401610757565b73ffffffffffffffffffffffffffffffffffffffff811615611f5e5773ffffffffffffffffffffffffffffffffffffffff8116632dd811338484611ec86040890189614ab1565b6040518563ffffffff1660e01b8152600401611ee79493929190614d02565b60006040518083038186803b158015611eff57600080fd5b505afa925050508015611f10575060015b611f5e576040517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610757565b611f6882876148a9565b95505060019093019250611d8d915050565b5060008167ffffffffffffffff811115611f9657611f96613fd1565b604051908082528060200260200182016040528015611fcf57816020015b611fbc613e25565b815260200190600190039081611fb45790505b5090506000805b848110156120ac5736888883818110611ff157611ff1614907565b90506020028101906120039190614b16565b90503660006120128380614b4a565b90925090506000612029604085016020860161445e565b90508160005b8181101561209a57600089898151811061204b5761204b614907565b6020026020010151905060008061206e8b8989878181106110a0576110a0614907565b9150915061207e8483838961277b565b8a612088816148bc565b9b50506001909301925061202f915050565b505060019094019350611fd692505050565b506040517fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a150600080805b858110156121e757368989838181106120f7576120f7614907565b90506020028101906121099190614b16565b905061211b604082016020830161445e565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a236600061216a8380614b4a565b90925090508060005b818110156121d6576121b58885858481811061219157612191614907565b90506020028101906121a39190614936565b8b8b8151811061114557611145614907565b6121bf90886148a9565b9650876121cb816148bc565b985050600101612173565b5050600190930192506120dc915050565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a261221d8682612da6565b50505050506111766001600255565b600061223882346130db565b90508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161178391815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156122a85750815b604051602082018101604052818152816000602083013e9392505050565b6000805a8551909150600090816122dc8261311b565b60e083015190915073ffffffffffffffffffffffffffffffffffffffff81166123085782519350612403565b80935060008851111561240357868202955060028a600281111561232e5761232e614db9565b146124035760a08301516040517f7c627b2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831691637c627b2191612390908e908d908c908990600401614de8565b600060405180830381600088803b1580156123aa57600080fd5b5087f1935050505080156123bc575060015b6124035760006123cd61080061229a565b9050806040517fad7954bc0000000000000000000000000000000000000000000000000000000081526004016107579190614e4b565b5a60408a0151908603979097019682880296508681101561247f5760028b600281111561243257612432614db9565b03612455578096506124438a613145565b6124508a6000898b6131a1565b6124b4565b7fdeadaa510000000000000000000000000000000000000000000000000000000060005260206000fd5b86810361248c86826130db565b506000808d60028111156124a2576124a2614db9565b1490506124b18c828b8d6131a1565b50505b505050505050949350505050565b60006124cd82613229565b805190602001209050919050565b6002805403612516576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028055565b60008060005a845190915061253186826132ee565b61253a86610fbc565b6020860152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff8111156125e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152606401610757565b60006126138460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b90506126228a8a8a8487613439565b96506126368460000151856020015161367a565b6126a557896040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a8603111561271a57896040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60e084015160609073ffffffffffffffffffffffffffffffffffffffff161561274e576127498b8b8b856136d5565b975090505b604089018290528060608a015260a08a01355a870301896080018181525050505050505050935093915050565b6000806127878561392c565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461282957856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526014908201527f41413234207369676e6174757265206572726f72000000000000000000000000606082015260800190565b801561289a57856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b60006128a58561392c565b9250905073ffffffffffffffffffffffffffffffffffffffff81161561293057866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526014908201527f41413334207369676e6174757265206572726f72000000000000000000000000606082015260800190565b81156129c757866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560608201527f6500000000000000000000000000000000000000000000000000000000000000608082015260a00190565b50505050505050565b6000805a905060006129e3846060015190565b60405190915060009036826129fb60608a018a614ab1565b9150915060606000826003811115612a1257843591505b507f72288ed1000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612b525760008b8b60200151604051602401612a75929190614e5e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8dd7712f000000000000000000000000000000000000000000000000000000001790525190915030906242dc5390612b089084908f908d90602401614f44565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050925050612bc9565b3073ffffffffffffffffffffffffffffffffffffffff166242dc5385858d8b604051602401612b849493929190614f84565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505091505b602060008351602085016000305af19550600051985084604052505050505080612d9c5760003d80602003612c045760206000803e60005191505b507fdeaddead000000000000000000000000000000000000000000000000000000008103612c9757876040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052600f908201527f41413935206f7574206f66206761730000000000000000000000000000000000606082015260800190565b7fdeadaa51000000000000000000000000000000000000000000000000000000008103612d0157600086608001515a612cd090876148f4565b612cda91906148a9565b6040880151909150612ceb88613145565b612cf888600083856131a1565b9550612d9a9050565b8551805160208089015192015173ffffffffffffffffffffffffffffffffffffffff90911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479290612d5561080061229a565b604051612d63929190614861565b60405180910390a3600086608001515a612d7d90876148f4565b612d8791906148a9565b9050612d9660028886846122c6565b9550505b505b5050509392505050565b73ffffffffffffffffffffffffffffffffffffffff8216612e23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152606401610757565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612e7d576040519150601f19603f3d011682016040523d82523d6000602084013e612e82565b606091505b5050905080611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610757565b612fed6040517fd69400000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152600090603701604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905550565b3063957122ab6130006040840184614ab1565b61300d602086018661445e565b61301a60e0870187614ab1565b6040518663ffffffff1660e01b815260040161303a959493929190614fbb565b60006040518083038186803b15801561305257600080fd5b505afa925050508015613063575060015b6130d85761306f61500a565b806308c379a0036130cc5750613083615026565b8061308e57506130ce565b8051156106e8576000816040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757929190614861565b505b3d6000803e3d6000fd5b50565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054829061310f9085906148a9565b91829055509392505050565b61010081015161012082015160009190808203613139575092915050565b6108af8248830161397f565b805180516020808401519281015160405190815273ffffffffffffffffffffffffffffffffffffffff90921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e0810151815160208088015193015160405173ffffffffffffffffffffffffffffffffffffffff9384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f9161321b9189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006132496132446040870187614ab1565b613997565b9050600061325d6132446060880188614ab1565b9050608086013560a087013560c0880135600061328061324460e08c018c614ab1565b6040805173ffffffffffffffffffffffffffffffffffffffff9a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b6132fb602083018361445e565b73ffffffffffffffffffffffffffffffffffffffff168152602082810135908201526fffffffffffffffffffffffffffffffff6080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061337460e0850185614ab1565b9092509050801561341e5760348110156133ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610757565b6133f482826139aa565b60a0860152608085015273ffffffffffffffffffffffffffffffffffffffff1660e0840152610fb6565b600060e084018190526080840181905260a084015250505050565b8251805160009190613458888761345360408b018b614ab1565b613a1b565b60e0820151600073ffffffffffffffffffffffffffffffffffffffff82166134b65773ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548781116134af578088036134b2565b60005b9150505b60208801516040517f19822f7c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516916319822f7c918991613512918e919087906004016150ce565b60206040518083038160008887f19350505050801561356c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613569918101906150f3565b60015b6135b0578961357c61080061229a565b6040517f65c8fd4d00000000000000000000000000000000000000000000000000000000815260040161075792919061510c565b945073ffffffffffffffffffffffffffffffffffffffff821661366d5773ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020805480891115613667578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832084821c808552925282208054849167ffffffffffffffff83169190856136c7836148bc565b909155501495945050505050565b60606000805a855160e081015173ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604090208054939450919290919087811015613784578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b87810382600001819055506000846080015190508373ffffffffffffffffffffffffffffffffffffffff166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016137da939291906150ce565b60006040518083038160008887f19350505050801561383957506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526138369190810190615159565b60015b61387d578b61384961080061229a565b6040517f65c8fd4d0000000000000000000000000000000000000000000000000000000081526004016107579291906151e5565b9098509650805a8703111561391d578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760608201527f61734c696d697400000000000000000000000000000000000000000000000000608082015260a00190565b50505050505094509492505050565b6000808260000361394257506000928392509050565b600061394d84613da7565b9050806040015165ffffffffffff164211806139745750806020015165ffffffffffff1642105b905194909350915050565b600081831061398e5781613990565b825b9392505050565b6000604051828085833790209392505050565b600080806139bb601482868861499f565b6139c4916149c9565b60601c6139d560246014878961499f565b6139de91615232565b60801c6139ef60346024888a61499f565b6139f891615232565b9194506fffffffffffffffffffffffffffffffff16925060801c90509250925092565b8015610fb65782515173ffffffffffffffffffffffffffffffffffffffff81163b15613aac57846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b6000613acd60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516040015186866040518463ffffffff1660e01b8152600401613b10929190614a5a565b60206040518083038160008887f1158015613b2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b549190614a6e565b905073ffffffffffffffffffffffffffffffffffffffff8116613bdc57856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613c7957856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161075791815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b8073ffffffffffffffffffffffffffffffffffffffff163b600003613d0257856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161075791815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000613d11601482868861499f565b613d1a916149c9565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051613d9692919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003613de3575065ffffffffffff5b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6040518060a00160405280613eb2604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a00160405280613f146040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001613f36604051806040016040528060008152602001600081525090565b8152602001613f58604051806040016040528060008152602001600081525090565b8152602001613f7a604051806040016040528060008152602001600081525090565b8152602001613f87613f8c565b905290565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001613f87604051806040016040528060008152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810181811067ffffffffffffffff8211171561402057614020613fd1565b60405250565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561406a5761406a613fd1565b6040525050565b604051610140810167ffffffffffffffff8111828210171561409557614095613fd1565b60405290565b600067ffffffffffffffff8211156140b5576140b5613fd1565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff811681146130d857600080fd5b803561410e816140e1565b919050565b60008183036101c081121561412757600080fd5b60405161413381614000565b8092506101408083121561414657600080fd5b61414e614071565b925061415985614103565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015260a085013560a084015260c085013560c08401526141a360e08601614103565b60e084015261010085810135908401526101208086013590840152918152908301356020820152610160830135604082015261018083013560608201526101a090920135608090920191909152919050565b60008083601f84011261420757600080fd5b50813567ffffffffffffffff81111561421f57600080fd5b60208301915083602082850101111561423757600080fd5b9250929050565b600080600080610200858703121561425557600080fd5b843567ffffffffffffffff8082111561426d57600080fd5b818701915087601f83011261428157600080fd5b813561428c8161409b565b6040516142998282614026565b8281528a60208487010111156142ae57600080fd5b826020860160208301376000602084830101528098505050506142d48860208901614113565b94506101e08701359150808211156142eb57600080fd5b506142f8878288016141f5565b95989497509550505050565b60006020828403121561431657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461399057600080fd5b60006020828403121561435857600080fd5b813563ffffffff8116811461399057600080fd5b803577ffffffffffffffffffffffffffffffffffffffffffffffff8116811461410e57600080fd5b6000602082840312156143a657600080fd5b6139908261436c565b600080604083850312156143c257600080fd5b82356143cd816140e1565b91506143db6020840161436c565b90509250929050565b600080604083850312156143f757600080fd5b8235614402816140e1565b946020939093013593505050565b6000610120828403121561442357600080fd5b50919050565b60006020828403121561443b57600080fd5b813567ffffffffffffffff81111561445257600080fd5b6108af84828501614410565b60006020828403121561447057600080fd5b8135613990816140e1565b60008083601f84011261448d57600080fd5b50813567ffffffffffffffff8111156144a557600080fd5b6020830191508360208260051b850101111561423757600080fd5b6000806000604084860312156144d557600080fd5b833567ffffffffffffffff8111156144ec57600080fd5b6144f88682870161447b565b909450925050602084013561450c816140e1565b809150509250925092565b60008060006040848603121561452c57600080fd5b8335614537816140e1565b9250602084013567ffffffffffffffff81111561455357600080fd5b61455f868287016141f5565b9497909650939450505050565b60008060008060006060868803121561458457600080fd5b853567ffffffffffffffff8082111561459c57600080fd5b6145a889838a016141f5565b9097509550602088013591506145bd826140e1565b909350604087013590808211156145d357600080fd5b506145e0888289016141f5565b969995985093965092949392505050565b6000806000806060858703121561460757600080fd5b843567ffffffffffffffff8082111561461f57600080fd5b61462b88838901614410565b95506020870135915061463d826140e1565b909350604086013590808211156142eb57600080fd5b60005b8381101561466e578181015183820152602001614656565b50506000910152565b6000815180845261468f816020860160208601614653565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526080820151151560a0820152600060a083015160c0808401526108af60e0840182614677565b6000806020838503121561472357600080fd5b823567ffffffffffffffff81111561473a57600080fd5b614746858286016141f5565b90969095509350505050565b602080825282516101408383015280516101608401529081015161018083015260408101516101a083015260608101516101c08301526080015160a06101e08301526000906147a5610200840182614677565b905060208401516147c3604085018280518252602090810151910152565b506040840151805160808581019190915260209182015160a08601526060860151805160c087015282015160e0860152850151805173ffffffffffffffffffffffffffffffffffffffff1661010086015280820151805161012087015290910151610140850152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8281526040602082015260006108af6040830184614677565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a2e57610a2e61487a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148ed576148ed61487a565b5060010190565b81810381811115610a2e57610a2e61487a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261496a57600080fd5b9190910192915050565b8183823760009101908152919050565b82151581526040602082015260006108af6040830184614677565b600080858511156149af57600080fd5b838611156149bc57600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015614a095780818660140360031b1b83161692505b505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006108af602083018486614a11565b600060208284031215614a8057600080fd5b8151613990816140e1565b65ffffffffffff818116838216019080821115614aaa57614aaa61487a565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ae657600080fd5b83018035915067ffffffffffffffff821115614b0157600080fd5b60200191503681900382131561423757600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261496a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614b7f57600080fd5b83018035915067ffffffffffffffff821115614b9a57600080fd5b6020019150600581901b360382131561423757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614be757600080fd5b830160208101925035905067ffffffffffffffff811115614c0757600080fd5b80360382131561423757600080fd5b6000610120614c4284614c2885614103565b73ffffffffffffffffffffffffffffffffffffffff169052565b60208301356020850152614c596040840184614bb2565b826040870152614c6c8387018284614a11565b92505050614c7d6060840184614bb2565b8583036060870152614c90838284614a11565b925050506080830135608085015260a083013560a085015260c083013560c0850152614cbf60e0840184614bb2565b85830360e0870152614cd2838284614a11565b92505050610100614ce581850185614bb2565b86840383880152614cf7848284614a11565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b89811015614da2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087860301845282357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18c3603018112614d80578283fd5b614d8c868d8301614c16565b9550506020938401939290920191600101614d20565b505050508281036020840152614cf7818587614a11565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060038610614e21577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b85825260806020830152614e386080830186614677565b6040830194909452506060015292915050565b6020815260006139906020830184614677565b604081526000614e716040830185614c16565b90508260208301529392505050565b8051805173ffffffffffffffffffffffffffffffffffffffff1683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e0810151614eff60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010081810151908401526101209081015190830152602081015161014083015260408101516101608301526060810151610180830152608001516101a090910152565b6000610200808352614f5881840187614677565b9050614f676020840186614e80565b8281036101e0840152614f7a8185614677565b9695505050505050565b6000610200808352614f998184018789614a11565b9050614fa86020840186614e80565b8281036101e0840152614cf78185614677565b606081526000614fcf606083018789614a11565b73ffffffffffffffffffffffffffffffffffffffff861660208401528281036040840152614ffe818587614a11565b98975050505050505050565b600060033d11156150235760046000803e5060005160e01c5b90565b600060443d10156150345790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561508257505050505090565b828501915081518181111561509a5750505050505090565b843d87010160208285010111156150b45750505050505090565b6150c360208286010187614026565b509095945050505050565b6060815260006150e16060830186614c16565b60208301949094525060400152919050565b60006020828403121561510557600080fd5b5051919050565b82815260606020820152600d60608201527f4141323320726576657274656400000000000000000000000000000000000000608082015260a0604082015260006108af60a0830184614677565b6000806040838503121561516c57600080fd5b825167ffffffffffffffff81111561518357600080fd5b8301601f8101851361519457600080fd5b805161519f8161409b565b6040516151ac8282614026565b8281528760208486010111156151c157600080fd5b6151d2836020830160208701614653565b6020969096015195979596505050505050565b82815260606020820152600d60608201527f4141333320726576657274656400000000000000000000000000000000000000608082015260a0604082015260006108af60a0830184614677565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008135818116916010851015614a095760109490940360031b84901b169092169291505056fea2646970667358221220d91a0462bc7bb528fdf3ea5e6747c873aa8d3c3eb82ba653aef7f1948cad609264736f6c63430008170033"
|
|
333
|
-
);
|
|
334
313
|
|
|
335
314
|
// src/transports/methods/estimateUserOperationGas.ts
|
|
336
315
|
async function estimateUserOperationGas({
|
|
@@ -338,37 +317,19 @@ async function estimateUserOperationGas({
|
|
|
338
317
|
params
|
|
339
318
|
}) {
|
|
340
319
|
const userOp = formatUserOperation(params[0]);
|
|
341
|
-
const
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
320
|
+
const gasSimulation = await simulateGas({ userOp, request });
|
|
321
|
+
const gasLimits = {
|
|
322
|
+
verificationGasLimit: gasSimulation.verificationGas * 2n,
|
|
323
|
+
callGasLimit: bigIntMax(gasSimulation.callGas * 2n, 9000n),
|
|
324
|
+
paymasterVerificationGasLimit: gasSimulation.paymasterVerificationGas * 2n,
|
|
325
|
+
paymasterPostOpGasLimit: gasSimulation.paymasterPostOpGas * 2n,
|
|
326
|
+
preVerificationGas: 20000n
|
|
327
|
+
};
|
|
347
328
|
return formatUserOperationRequest({
|
|
348
|
-
...
|
|
329
|
+
...gasLimits
|
|
349
330
|
});
|
|
350
331
|
}
|
|
351
|
-
async function
|
|
352
|
-
userOp,
|
|
353
|
-
removePaymaster,
|
|
354
|
-
request
|
|
355
|
-
}) {
|
|
356
|
-
if (removePaymaster) {
|
|
357
|
-
const {
|
|
358
|
-
/* eslint-disable */
|
|
359
|
-
paymaster,
|
|
360
|
-
paymasterData,
|
|
361
|
-
paymasterPostOpGasLimit,
|
|
362
|
-
paymasterVerificationGasLimit,
|
|
363
|
-
/* eslint-enable */
|
|
364
|
-
...userOpWithoutPaymaster
|
|
365
|
-
} = userOp;
|
|
366
|
-
userOp = userOpWithoutPaymaster;
|
|
367
|
-
}
|
|
368
|
-
const paymasterGasLimits = userOp.paymaster && !removePaymaster ? {
|
|
369
|
-
paymasterPostOpGasLimit: 2000000n,
|
|
370
|
-
paymasterVerificationGasLimit: 5000000n
|
|
371
|
-
} : {};
|
|
332
|
+
async function simulateGas({ request, userOp }) {
|
|
372
333
|
const simulationUserOp = {
|
|
373
334
|
...userOp,
|
|
374
335
|
preVerificationGas: 0n,
|
|
@@ -376,15 +337,17 @@ async function simulateHandleOp({
|
|
|
376
337
|
verificationGasLimit: 10000000n,
|
|
377
338
|
// https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117
|
|
378
339
|
maxPriorityFeePerGas: userOp.maxFeePerGas,
|
|
379
|
-
|
|
340
|
+
paymasterPostOpGasLimit: 2000000n,
|
|
341
|
+
paymasterVerificationGasLimit: 5000000n
|
|
380
342
|
};
|
|
381
343
|
const packedUserOp = toPackedUserOperation(simulationUserOp);
|
|
382
344
|
const simulationData = encodeFunctionData({
|
|
383
|
-
abi:
|
|
384
|
-
functionName: "
|
|
385
|
-
args: [packedUserOp
|
|
345
|
+
abi: entryPointGasSimulationsAbi,
|
|
346
|
+
functionName: "estimateGas",
|
|
347
|
+
args: [packedUserOp]
|
|
386
348
|
});
|
|
387
|
-
const
|
|
349
|
+
const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;
|
|
350
|
+
const senderBalanceOverride = hasPaymaster ? {} : { [userOp.sender]: { balance: "0xFFFFFFFFFFFFFFFFFFFF" } };
|
|
388
351
|
const simulationParams = [
|
|
389
352
|
{
|
|
390
353
|
to: entryPoint07Address,
|
|
@@ -392,47 +355,113 @@ async function simulateHandleOp({
|
|
|
392
355
|
},
|
|
393
356
|
"pending",
|
|
394
357
|
{
|
|
395
|
-
[entryPoint07Address]: { code: entryPointSimulationsDeployedBytecode },
|
|
396
358
|
...senderBalanceOverride
|
|
397
359
|
}
|
|
398
360
|
];
|
|
399
361
|
const encodedSimulationResult = await request({
|
|
400
|
-
method: "
|
|
362
|
+
method: "wiresaw_callEntryPointSimulations",
|
|
401
363
|
params: simulationParams
|
|
402
364
|
});
|
|
403
365
|
return decodeFunctionResult({
|
|
404
|
-
abi:
|
|
405
|
-
functionName: "
|
|
366
|
+
abi: entryPointGasSimulationsAbi,
|
|
367
|
+
functionName: "estimateGas",
|
|
406
368
|
data: encodedSimulationResult
|
|
407
369
|
});
|
|
408
370
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
371
|
+
|
|
372
|
+
// src/transports/methods/getUserOperationReceipt.ts
|
|
373
|
+
import {
|
|
374
|
+
decodeEventLog,
|
|
375
|
+
encodeEventTopics,
|
|
376
|
+
numberToHex,
|
|
377
|
+
parseEventLogs,
|
|
378
|
+
zeroAddress as zeroAddress2
|
|
379
|
+
} from "viem";
|
|
380
|
+
import { entryPoint07Abi } from "viem/account-abstraction";
|
|
381
|
+
var userOperationRevertReasonAbi = [
|
|
382
|
+
entryPoint07Abi.find(
|
|
383
|
+
(item) => item.type === "event" && item.name === "UserOperationRevertReason"
|
|
384
|
+
)
|
|
385
|
+
];
|
|
386
|
+
var userOperationEventTopic = encodeEventTopics({
|
|
387
|
+
abi: entryPoint07Abi,
|
|
388
|
+
eventName: "UserOperationEvent"
|
|
389
|
+
});
|
|
390
|
+
function getUserOperationReceipt(userOpHash, receipt) {
|
|
391
|
+
const userOperationRevertReasonTopicEvent = encodeEventTopics({
|
|
392
|
+
abi: userOperationRevertReasonAbi
|
|
393
|
+
})[0];
|
|
394
|
+
let entryPoint = zeroAddress2;
|
|
395
|
+
let revertReason = void 0;
|
|
396
|
+
let startIndex = -1;
|
|
397
|
+
let endIndex = -1;
|
|
398
|
+
receipt.logs.forEach((log, index) => {
|
|
399
|
+
if (log?.topics[0] === userOperationEventTopic[0]) {
|
|
400
|
+
if (log.topics[1] === userOpHash) {
|
|
401
|
+
endIndex = index;
|
|
402
|
+
entryPoint = log.address;
|
|
403
|
+
} else if (endIndex === -1) {
|
|
404
|
+
startIndex = index;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
if (log?.topics[0] === userOperationRevertReasonTopicEvent) {
|
|
408
|
+
if (log.topics[1] === userOpHash) {
|
|
409
|
+
const decodedLog = decodeEventLog({
|
|
410
|
+
abi: userOperationRevertReasonAbi,
|
|
411
|
+
data: log.data,
|
|
412
|
+
topics: log.topics
|
|
413
|
+
});
|
|
414
|
+
revertReason = decodedLog.args.revertReason;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
if (endIndex === -1) {
|
|
419
|
+
throw new Error("fatal: no UserOperationEvent in logs");
|
|
420
|
+
}
|
|
421
|
+
const logs = receipt.logs.slice(startIndex + 1, endIndex);
|
|
422
|
+
const userOperationEvent = parseEventLogs({
|
|
423
|
+
abi: entryPoint07Abi,
|
|
424
|
+
eventName: "UserOperationEvent",
|
|
425
|
+
args: {
|
|
426
|
+
userOpHash
|
|
427
|
+
},
|
|
428
|
+
logs: receipt.logs
|
|
429
|
+
})[0];
|
|
430
|
+
let paymaster = userOperationEvent.args.paymaster;
|
|
431
|
+
paymaster = paymaster === zeroAddress2 ? void 0 : paymaster;
|
|
423
432
|
return {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
433
|
+
userOpHash,
|
|
434
|
+
entryPoint,
|
|
435
|
+
sender: userOperationEvent.args.sender,
|
|
436
|
+
nonce: numberToHex(userOperationEvent.args.nonce),
|
|
437
|
+
paymaster,
|
|
438
|
+
actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),
|
|
439
|
+
actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),
|
|
440
|
+
success: userOperationEvent.args.success,
|
|
441
|
+
reason: revertReason,
|
|
442
|
+
logs,
|
|
443
|
+
receipt
|
|
429
444
|
};
|
|
430
445
|
}
|
|
431
446
|
|
|
447
|
+
// src/transports/chainTransport.ts
|
|
448
|
+
import { fallback, http, webSocket } from "viem";
|
|
449
|
+
function chainTransport(rpcUrls) {
|
|
450
|
+
const webSocketUrl = rpcUrls?.webSocket?.[0];
|
|
451
|
+
const httpUrl = rpcUrls?.http[0];
|
|
452
|
+
if (webSocketUrl) {
|
|
453
|
+
return httpUrl ? fallback([webSocket(webSocketUrl), http(httpUrl)]) : webSocket(webSocketUrl);
|
|
454
|
+
}
|
|
455
|
+
if (httpUrl) {
|
|
456
|
+
return http(httpUrl);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
432
460
|
// src/transports/wiresaw.ts
|
|
433
|
-
function wiresaw(
|
|
461
|
+
function wiresaw(transports) {
|
|
434
462
|
return (opts) => {
|
|
435
|
-
const {
|
|
463
|
+
const { wiresawTransport, fallbackBundlerTransport, fallbackDefaultTransport } = transports ?? getDefaultTransports(opts.chain);
|
|
464
|
+
const { request: wiresawRequest, ...rest } = wiresawTransport(opts);
|
|
436
465
|
let chainId = null;
|
|
437
466
|
const transactionHashes = {};
|
|
438
467
|
const transactionReceipts = {};
|
|
@@ -440,80 +469,97 @@ function wiresaw(transport) {
|
|
|
440
469
|
...rest,
|
|
441
470
|
// TODO: type `request` so we don't have to cast
|
|
442
471
|
async request(req) {
|
|
443
|
-
|
|
444
|
-
if (
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
472
|
+
try {
|
|
473
|
+
if (req.method === "eth_chainId") {
|
|
474
|
+
if (chainId != null) return chainId;
|
|
475
|
+
if (fallbackDefaultTransport) {
|
|
476
|
+
const { request: fallbackRequest } = fallbackDefaultTransport(opts);
|
|
477
|
+
return chainId = await fallbackRequest(req);
|
|
478
|
+
}
|
|
479
|
+
return chainId = await wiresawRequest(req);
|
|
448
480
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
if (req.method === "eth_estimateGas") {
|
|
452
|
-
return originalRequest({ ...req, method: "wiresaw_estimateGas" });
|
|
453
|
-
}
|
|
454
|
-
if (req.method === "eth_call") {
|
|
455
|
-
return originalRequest({ ...req, method: "wiresaw_call" });
|
|
456
|
-
}
|
|
457
|
-
if (req.method === "eth_getTransactionCount") {
|
|
458
|
-
return originalRequest({ ...req, method: "wiresaw_getTransactionCount" });
|
|
459
|
-
}
|
|
460
|
-
if (req.method === "eth_getTransactionReceipt") {
|
|
461
|
-
return getTransactionReceipt(req.params[0]);
|
|
462
|
-
}
|
|
463
|
-
if (req.method === "eth_sendUserOperation") {
|
|
464
|
-
const { userOpHash, txHash } = await originalRequest({
|
|
465
|
-
...req,
|
|
466
|
-
method: "wiresaw_sendUserOperation"
|
|
467
|
-
});
|
|
468
|
-
transactionHashes[userOpHash] = txHash;
|
|
469
|
-
return userOpHash;
|
|
470
|
-
}
|
|
471
|
-
if (req.method === "eth_getUserOperationReceipt") {
|
|
472
|
-
const userOpHash = req.params[0];
|
|
473
|
-
const knownTransactionHash = transactionHashes[userOpHash];
|
|
474
|
-
if (knownTransactionHash) {
|
|
475
|
-
return getTransactionReceipt(knownTransactionHash);
|
|
481
|
+
if (req.method === "eth_estimateGas") {
|
|
482
|
+
return await wiresawRequest({ ...req, method: "wiresaw_estimateGas" });
|
|
476
483
|
}
|
|
477
|
-
if (
|
|
478
|
-
|
|
479
|
-
return fallbackRequest(req);
|
|
484
|
+
if (req.method === "eth_call") {
|
|
485
|
+
return await wiresawRequest({ ...req, method: "wiresaw_call" });
|
|
480
486
|
}
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
487
|
+
if (req.method === "eth_getTransactionCount") {
|
|
488
|
+
return await wiresawRequest({ ...req, method: "wiresaw_getTransactionCount" });
|
|
489
|
+
}
|
|
490
|
+
if (req.method === "eth_getTransactionReceipt") {
|
|
491
|
+
return await getTransactionReceipt(req.params[0]);
|
|
492
|
+
}
|
|
493
|
+
if (req.method === "eth_sendUserOperation") {
|
|
494
|
+
const { userOpHash, txHash } = await wiresawRequest({
|
|
495
|
+
...req,
|
|
496
|
+
method: "wiresaw_sendUserOperation"
|
|
497
|
+
});
|
|
498
|
+
transactionHashes[userOpHash] = txHash;
|
|
499
|
+
return userOpHash;
|
|
500
|
+
}
|
|
501
|
+
if (req.method === "eth_getUserOperationReceipt") {
|
|
502
|
+
const userOpHash = req.params[0];
|
|
503
|
+
const knownTransactionHash = transactionHashes[userOpHash];
|
|
504
|
+
if (!knownTransactionHash) {
|
|
505
|
+
throw new Error(`eth_getUserOperationReceipt only supported for own user operations`);
|
|
506
|
+
}
|
|
507
|
+
const transactionReceipt = await getTransactionReceipt(knownTransactionHash);
|
|
508
|
+
return transactionReceipt && getUserOperationReceipt(userOpHash, transactionReceipt);
|
|
509
|
+
}
|
|
510
|
+
if (req.method === "eth_estimateUserOperationGas") {
|
|
484
511
|
return await estimateUserOperationGas({
|
|
485
|
-
request:
|
|
512
|
+
request: wiresawRequest,
|
|
486
513
|
params: req.params
|
|
487
514
|
});
|
|
488
|
-
} catch (e) {
|
|
489
|
-
console.warn("[wiresaw] estimating user operation gas failed, falling back to bundler", e);
|
|
490
515
|
}
|
|
491
|
-
if (
|
|
492
|
-
|
|
493
|
-
|
|
516
|
+
if (req.method === "eth_blockNumber" || req.method === "eth_getBlockByNumber" || req.method === "eth_maxPriorityFeePerGas") {
|
|
517
|
+
if (fallbackDefaultTransport) {
|
|
518
|
+
const { request: fallbackRequest } = fallbackDefaultTransport(opts);
|
|
519
|
+
return await fallbackRequest(req);
|
|
520
|
+
}
|
|
521
|
+
return await wiresawRequest(req);
|
|
494
522
|
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
523
|
+
return await wiresawRequest(req);
|
|
524
|
+
} catch (e) {
|
|
525
|
+
console.warn("[wiresaw] request failed", e);
|
|
526
|
+
const bundlerMethods = [
|
|
527
|
+
"eth_estimateUserOperationGas",
|
|
528
|
+
"eth_sendUserOperation",
|
|
529
|
+
"eth_getUserOperationReceipt"
|
|
530
|
+
];
|
|
531
|
+
if (bundlerMethods.includes(req.method)) {
|
|
532
|
+
if (fallbackBundlerTransport) {
|
|
533
|
+
const { request: fallbackRequest } = fallbackBundlerTransport(opts);
|
|
534
|
+
console.warn("[wiresaw] falling back to bundler rpc", req);
|
|
535
|
+
return fallbackRequest(req);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
if (fallbackDefaultTransport) {
|
|
539
|
+
const { request: fallbackRequest } = fallbackDefaultTransport(opts);
|
|
540
|
+
console.warn("[wiresaw] falling back to eth rpc", req);
|
|
499
541
|
return fallbackRequest(req);
|
|
500
542
|
}
|
|
501
|
-
|
|
543
|
+
throw e;
|
|
502
544
|
}
|
|
503
|
-
return originalRequest(req);
|
|
504
545
|
async function getTransactionReceipt(hash) {
|
|
505
546
|
if (transactionReceipts[hash]) return transactionReceipts[hash];
|
|
506
|
-
const pendingReceipt = await
|
|
547
|
+
const pendingReceipt = await wiresawRequest({
|
|
507
548
|
...req,
|
|
508
|
-
method: "wiresaw_getTransactionReceipt"
|
|
549
|
+
method: "wiresaw_getTransactionReceipt",
|
|
550
|
+
params: [hash]
|
|
509
551
|
});
|
|
510
552
|
if (pendingReceipt) {
|
|
511
553
|
transactionReceipts[hash] = pendingReceipt;
|
|
512
554
|
return pendingReceipt;
|
|
513
555
|
}
|
|
514
|
-
if (
|
|
515
|
-
const { request: fallbackRequest } =
|
|
516
|
-
const receipt = await fallbackRequest(
|
|
556
|
+
if (fallbackDefaultTransport) {
|
|
557
|
+
const { request: fallbackRequest } = fallbackDefaultTransport(opts);
|
|
558
|
+
const receipt = await fallbackRequest({
|
|
559
|
+
...req,
|
|
560
|
+
method: "eth_getTransactionReceipt",
|
|
561
|
+
params: [hash]
|
|
562
|
+
});
|
|
517
563
|
if (receipt) {
|
|
518
564
|
transactionReceipts[hash] = receipt;
|
|
519
565
|
return receipt;
|
|
@@ -524,6 +570,21 @@ function wiresaw(transport) {
|
|
|
524
570
|
};
|
|
525
571
|
};
|
|
526
572
|
}
|
|
573
|
+
function getDefaultTransports(chain) {
|
|
574
|
+
if (!chain) {
|
|
575
|
+
throw new Error("No chain or transports provided");
|
|
576
|
+
}
|
|
577
|
+
const wiresawTransport = chainTransport(chain.rpcUrls.wiresaw);
|
|
578
|
+
if (!wiresawTransport) {
|
|
579
|
+
throw new Error("Provided chain does not support wiresaw");
|
|
580
|
+
}
|
|
581
|
+
const bundlerHttpUrl = chain.rpcUrls.bundler?.http[0];
|
|
582
|
+
return {
|
|
583
|
+
wiresawTransport,
|
|
584
|
+
fallbackBundlerTransport: bundlerHttpUrl ? http2(bundlerHttpUrl) : void 0,
|
|
585
|
+
fallbackDefaultTransport: http2()
|
|
586
|
+
};
|
|
587
|
+
}
|
|
527
588
|
export {
|
|
528
589
|
ensureContract,
|
|
529
590
|
ensureContractsDeployed,
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/waitForTransactions.ts","../src/deploy/ensureContract.ts","../src/deploy/common.ts","../src/deploy/debug.ts","../src/deploy/ensureContractsDeployed.ts","../src/deploy/ensureDeployer.ts","../src/deploy/create2/deployment.json","../src/deploy/getDeployer.ts","../src/deploy/getContractAddress.ts","../src/transports/methods/estimateUserOperationGas.ts","../src/transports/entryPointSimulations.ts","../src/transports/wiresaw.ts"],"sourcesContent":["import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { debug } from \"./debug\";\nimport { waitForTransactionReceipt } from \"viem/actions\";\n\nexport async function waitForTransactions({\n client,\n hashes,\n debugLabel = \"transactions\",\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly hashes: readonly Hex[];\n readonly debugLabel?: string;\n}): Promise<void> {\n if (!hashes.length) return;\n\n debug(`waiting for ${debugLabel} to confirm`);\n // wait for each tx separately/serially, because parallelizing results in RPC errors\n for (const hash of hashes) {\n const receipt = await waitForTransactionReceipt(client, { hash });\n // TODO: handle user op failures?\n if (receipt.status === \"reverted\") {\n throw new Error(`Transaction reverted: ${hash}`);\n }\n }\n}\n","import { Client, Transport, Chain, Account, concatHex, getCreate2Address, Hex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport { contractSizeLimit, singletonSalt } from \"./common\";\nimport { debug } from \"./debug\";\nimport { sendTransaction } from \"../sendTransaction\";\n\nexport type Contract = {\n bytecode: Hex;\n deployedBytecodeSize?: number;\n debugLabel?: string;\n salt?: Hex;\n};\n\nexport async function ensureContract({\n client,\n deployerAddress,\n bytecode,\n deployedBytecodeSize,\n debugLabel = \"contract\",\n salt = singletonSalt,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n} & Contract): Promise<readonly Hex[]> {\n if (bytecode.includes(\"__$\")) {\n throw new Error(`Found unlinked public library in ${debugLabel} bytecode`);\n }\n\n const address = getCreate2Address({ from: deployerAddress, salt, bytecode });\n\n const contractCode = await getCode(client, { address, blockTag: \"pending\" });\n if (contractCode) {\n debug(\"found\", debugLabel, \"at\", address);\n return [];\n }\n\n if (deployedBytecodeSize != null) {\n if (deployedBytecodeSize === 0) {\n throw new Error(`Empty bytecode for ${debugLabel}`);\n }\n\n if (deployedBytecodeSize > contractSizeLimit) {\n console.warn(\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n } else if (deployedBytecodeSize > contractSizeLimit * 0.95) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is almost over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n }\n }\n\n debug(\"deploying\", debugLabel, \"at\", address);\n return [\n await sendTransaction(client, {\n chain: client.chain ?? null,\n to: deployerAddress,\n data: concatHex([salt, bytecode]),\n }),\n ];\n}\n","import { stringToHex } from \"viem\";\n\n// salt for deterministic deploys of singleton contracts\nexport const singletonSalt = stringToHex(\"\", { size: 32 });\n\n// https://eips.ethereum.org/EIPS/eip-170\nexport const contractSizeLimit = parseInt(\"6000\", 16);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"deploy\");\nexport const error = parentDebug.extend(\"deploy\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { Contract, ensureContract } from \"./ensureContract\";\nimport { waitForTransactions } from \"../waitForTransactions\";\nimport { uniqueBy } from \"../utils/uniqueBy\";\n\nexport async function ensureContractsDeployed({\n client,\n deployerAddress,\n contracts,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n readonly contracts: readonly Contract[];\n}): Promise<readonly Hex[]> {\n // Deployments assume a deterministic deployer, so we only need to deploy the unique bytecode\n const uniqueContracts = uniqueBy(contracts, (contract) => contract.bytecode);\n\n const txs = (\n await Promise.all(uniqueContracts.map((contract) => ensureContract({ client, deployerAddress, ...contract })))\n ).flat();\n\n await waitForTransactions({\n client,\n hashes: txs,\n debugLabel: \"contract deploys\",\n });\n\n return txs;\n}\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { getBalance, sendRawTransaction, sendTransaction, waitForTransactionReceipt } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\nimport { getDeployer } from \"./getDeployer\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function ensureDeployer(client: Client<Transport, Chain | undefined, Account>): Promise<Address> {\n const existingDeployer = await getDeployer(client);\n if (existingDeployer !== undefined) {\n return existingDeployer;\n }\n\n // There's not really a way to simulate a pre-EIP-155 (no chain ID) transaction,\n // so we have to attempt to create the deployer first and, if it fails, fall back\n // to a regular deploy.\n\n // Send gas to deployment signer\n const gasRequired = BigInt(deployment.gasLimit) * BigInt(deployment.gasPrice);\n const currentBalance = await getBalance(client, { address: `0x${deployment.signerAddress}` });\n const gasNeeded = gasRequired - currentBalance;\n if (gasNeeded > 0) {\n debug(\"sending gas for CREATE2 deployer to signer at\", deployment.signerAddress);\n const gasTx = await sendTransaction(client, {\n chain: client.chain ?? null,\n to: `0x${deployment.signerAddress}`,\n value: gasNeeded,\n });\n const gasReceipt = await waitForTransactionReceipt(client, { hash: gasTx });\n if (gasReceipt.status !== \"success\") {\n console.error(\"failed to send gas to deployer signer\", gasReceipt);\n throw new Error(\"failed to send gas to deployer signer\");\n }\n }\n\n // Deploy the deployer\n debug(\"deploying CREATE2 deployer at\", deployer);\n const deployTx = await sendRawTransaction(client, { serializedTransaction: `0x${deployment.transaction}` }).catch(\n (error) => {\n // Do a regular contract create if the presigned transaction doesn't work due to replay protection\n if (String(error).includes(\"only replay-protected (EIP-155) transactions allowed over RPC\")) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\n ⚠️ Your chain or RPC does not allow for non EIP-155 signed transactions, so your deploys will not be determinstic and contract addresses may change between deploys.\\n\\n We recommend running your chain's node with \\`--rpc.allow-unprotected-txs\\` to enable determinstic deployments.\\n`,\n );\n debug(\"deploying CREATE2 deployer\");\n return sendTransaction(client, {\n chain: client.chain ?? null,\n data: `0x${deployment.creationCode}`,\n });\n }\n throw error;\n },\n );\n\n const deployReceipt = await waitForTransactionReceipt(client, { hash: deployTx });\n if (!deployReceipt.contractAddress) {\n throw new Error(\"Deploy receipt did not have contract address, was the deployer not deployed?\");\n }\n\n if (deployReceipt.contractAddress !== deployer) {\n console.warn(\n `\\n ⚠️ CREATE2 deployer created at ${deployReceipt.contractAddress} does not match the CREATE2 determinstic deployer we expected (${deployer})`,\n );\n }\n\n return deployReceipt.contractAddress;\n}\n","{\n \"gasPrice\": 100000000000,\n \"gasLimit\": 100000,\n \"signerAddress\": \"3fab184622dc19b6109349b94811493bf2a45362\",\n \"transaction\": \"f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222\",\n \"address\": \"4e59b44847b379578588920ca78fbf26c0b4956c\",\n \"creationCode\": \"604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n}\n","import { Address, Chain, Client, Transport, sliceHex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined> {\n const bytecode = await getCode(client, { address: deployer });\n if (bytecode) {\n debug(\"found deployer bytecode at\", deployer);\n // check if deployed bytecode is the same as the expected bytecode (minus 14-bytes creation code prefix)\n if (bytecode !== sliceHex(`0x${deployment.creationCode}`, 14)) {\n console.warn(\n `\\n ⚠️ Bytecode for deployer at ${deployer} did not match the expected CREATE2 bytecode. You may have unexpected results.\\n`,\n );\n }\n return deployer;\n }\n}\n","import { Hex, getCreate2Address } from \"viem\";\nimport { singletonSalt } from \"./common\";\n\nexport function getContractAddress({\n deployerAddress,\n bytecode,\n salt = singletonSalt,\n}: {\n readonly deployerAddress: Hex;\n readonly bytecode: Hex;\n readonly salt?: Hex;\n}): Hex {\n return getCreate2Address({ from: deployerAddress, bytecode, salt });\n}\n","import {\n BundlerRpcSchema,\n decodeFunctionResult,\n DecodeFunctionResultReturnType,\n EIP1193RequestFn,\n encodeFunctionData,\n Hex,\n zeroAddress,\n} from \"viem\";\nimport { getRpcMethod } from \"../common\";\nimport {\n entryPoint07Address,\n formatUserOperation,\n formatUserOperationRequest,\n toPackedUserOperation,\n UserOperation,\n} from \"viem/account-abstraction\";\nimport { bigIntMax } from \"../../utils\";\nimport { entryPointSimulationsAbi, entryPointSimulationsDeployedBytecode } from \"../entryPointSimulations\";\n\ntype rpcMethod = getRpcMethod<BundlerRpcSchema, \"eth_estimateUserOperationGas\">;\n\ntype EstimateUserOperationGasOptions = {\n request: EIP1193RequestFn;\n params: rpcMethod[\"Parameters\"];\n};\n\nexport async function estimateUserOperationGas({\n request,\n params,\n}: EstimateUserOperationGasOptions): Promise<rpcMethod[\"ReturnType\"]> {\n const userOp = formatUserOperation(params[0]);\n const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;\n\n const [simulationResult, simulationResultWithPaymaster] = await Promise.all([\n simulateHandleOp({ userOp, removePaymaster: hasPaymaster, request }),\n hasPaymaster ? simulateHandleOp({ userOp, request }) : undefined,\n ]);\n\n const gasEstimates = getGasEstimates({ userOp, simulationResult, simulationResultWithPaymaster });\n\n return formatUserOperationRequest({\n ...gasEstimates,\n });\n}\n\ntype SimulateHandleOpOptions = {\n request: EIP1193RequestFn;\n userOp: UserOperation<\"0.7\">;\n removePaymaster?: boolean;\n};\n\ntype SimulationResult = DecodeFunctionResultReturnType<typeof entryPointSimulationsAbi>;\n\nasync function simulateHandleOp({\n userOp,\n removePaymaster,\n request,\n}: SimulateHandleOpOptions): Promise<SimulationResult> {\n if (removePaymaster) {\n const {\n /* eslint-disable */\n paymaster,\n paymasterData,\n paymasterPostOpGasLimit,\n paymasterVerificationGasLimit,\n /* eslint-enable */\n ...userOpWithoutPaymaster\n } = userOp;\n userOp = userOpWithoutPaymaster;\n }\n\n // Prepare user operation for simulation\n const paymasterGasLimits =\n userOp.paymaster && !removePaymaster\n ? {\n paymasterPostOpGasLimit: 2_000_000n,\n paymasterVerificationGasLimit: 5_000_000n,\n }\n : {};\n const simulationUserOp = {\n ...userOp,\n preVerificationGas: 0n,\n callGasLimit: 10_000_000n,\n verificationGasLimit: 10_000_000n,\n // https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117\n maxPriorityFeePerGas: userOp.maxFeePerGas,\n ...paymasterGasLimits,\n } satisfies UserOperation<\"0.7\">;\n\n const packedUserOp = toPackedUserOperation(simulationUserOp);\n const simulationData = encodeFunctionData({\n abi: entryPointSimulationsAbi,\n functionName: \"simulateHandleOp\",\n args: [packedUserOp, zeroAddress, \"0x\"],\n });\n\n const senderBalanceOverride = removePaymaster ? { [userOp.sender]: { balance: \"0xFFFFFFFFFFFFFFFFFFFF\" } } : {};\n const simulationParams = [\n {\n to: entryPoint07Address,\n data: simulationData,\n },\n \"pending\",\n {\n [entryPoint07Address]: { code: entryPointSimulationsDeployedBytecode },\n ...senderBalanceOverride,\n },\n ];\n const encodedSimulationResult: Hex = await request({\n method: \"wiresaw_call\",\n params: simulationParams,\n });\n\n return decodeFunctionResult({\n abi: entryPointSimulationsAbi,\n functionName: \"simulateHandleOp\",\n data: encodedSimulationResult,\n });\n}\n\ntype GetGasEstimatesOptions = {\n userOp: UserOperation<\"0.7\">;\n simulationResult: SimulationResult;\n simulationResultWithPaymaster?: SimulationResult;\n};\n\ntype GasEstimates = {\n verificationGasLimit: bigint;\n callGasLimit: bigint;\n paymasterVerificationGasLimit: bigint;\n paymasterPostOpGasLimit: bigint;\n preVerificationGas: bigint;\n};\n\nfunction getGasEstimates({\n userOp,\n simulationResult,\n simulationResultWithPaymaster,\n}: GetGasEstimatesOptions): GasEstimates {\n const hasPaymaster = simulationResultWithPaymaster != null;\n\n // The verification gas is the total gas available during the validation phase, including the gas used by the paymaster\n const verificationGas = hasPaymaster ? simulationResultWithPaymaster.preOpGas : simulationResult.preOpGas;\n\n // The paymaster verification gas is the difference between verification gas with and without paymaster\n const paymasterVerificationGas = hasPaymaster\n ? simulationResultWithPaymaster.preOpGas - simulationResult.preOpGas\n : 0n;\n\n // The call gas is only the gas used by the user operation, not the paymaster\n const callGas = simulationResult.paid / userOp.maxFeePerGas - simulationResult.preOpGas;\n\n // The paymaster post-op gas is the difference between non-verification gas with and without paymaster\n const paymasterPostOpGas = hasPaymaster\n ? simulationResultWithPaymaster.paid / userOp.maxFeePerGas - simulationResultWithPaymaster.preOpGas - callGas\n : 0n;\n\n // Apply a 2x buffer to the calculated limits\n const verificationGasLimit = verificationGas * 2n;\n const callGasLimit = bigIntMax(callGas * 2n, 9000n);\n const paymasterVerificationGasLimit = paymasterVerificationGas * 2n;\n const paymasterPostOpGasLimit = paymasterPostOpGas * 2n;\n\n return {\n verificationGasLimit,\n callGasLimit,\n paymasterVerificationGasLimit,\n paymasterPostOpGasLimit,\n preVerificationGas: 20_000n,\n };\n}\n","import { Hex } from \"viem\";\n\nexport const entryPointSimulationsAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"initCode\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes32\",\n name: \"accountGasLimits\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"preVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"gasFees\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"paymasterAndData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct PackedUserOperation\",\n name: \"op\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"targetCallData\",\n type: \"bytes\",\n },\n ],\n name: \"simulateHandleOp\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"preOpGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paid\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"accountValidationData\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterValidationData\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"targetSuccess\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"targetResult\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IEntryPointSimulations.ExecutionResult\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\n// Modified version of the EntryPointSimulations contract that does not apply for a penalty for unused gas\n// https://github.com/latticexyz/account-abstraction/blob/3954ce708580d23073f477682f78942b253de7fa/contracts/core/EntryPoint.sol#L46\nexport const entryPointSimulationsDeployedBytecode: Hex =\n // eslint-disable-next-line max-len\n \"0x60806040526004361061016d5760003560e01c8063765e827f116100cb578063b760faf91161007f578063c3bce00911610059578063c3bce009146105ac578063dbed18e0146105d9578063fc7e286d146105f957600080fd5b8063b760faf914610564578063bb9fe6bf14610577578063c23a5cea1461058c57600080fd5b8063957122ab116100b0578063957122ab146104f757806397b2dcb9146105175780639b249f691461054457600080fd5b8063765e827f146104b7578063850aaf62146104d757600080fd5b8063205c28781161012257806335567e1a1161010757806335567e1a146102905780635287ce121461032557806370a082311461047457600080fd5b8063205c28781461025057806322cdde4c1461027057600080fd5b80630396cb60116101535780630396cb60146101e55780630bd28e3b146101f85780631b2e01b81461021857600080fd5b806242dc531461018257806301ffc9a7146101b557600080fd5b3661017d5761017b336106cb565b005b600080fd5b34801561018e57600080fd5b506101a261019d36600461423e565b6106ec565b6040519081526020015b60405180910390f35b3480156101c157600080fd5b506101d56101d0366004614304565b6108b7565b60405190151581526020016101ac565b61017b6101f3366004614346565b610a34565b34801561020457600080fd5b5061017b610213366004614394565b610dca565b34801561022457600080fd5b506101a26102333660046143af565b600160209081526000928352604080842090915290825290205481565b34801561025c57600080fd5b5061017b61026b3660046143e4565b610e12565b34801561027c57600080fd5b506101a261028b366004614429565b610fbc565b34801561029c57600080fd5b506101a26102ab3660046143af565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff8516845290915290819020549082901b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000161792915050565b34801561033157600080fd5b5061041261034036600461445e565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff1660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046dffffffffffffffffffffffffffff16928101929092526f01000000000000000000000000000000810463ffffffff166060830152730100000000000000000000000000000000000000900465ffffffffffff16608082015290565b6040516101ac9190600060a082019050825182526020830151151560208301526dffffffffffffffffffffffffffff604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561048057600080fd5b506101a261048f36600461445e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156104c357600080fd5b5061017b6104d23660046144c0565b610ffe565b3480156104e357600080fd5b5061017b6104f2366004614517565b61117b565b34801561050357600080fd5b5061017b61051236600461456c565b611220565b34801561052357600080fd5b506105376105323660046145f1565b611378565b6040516101ac91906146c1565b34801561055057600080fd5b5061017b61055f366004614710565b6114c4565b61017b61057236600461445e565b6106cb565b34801561058357600080fd5b5061017b6115af565b34801561059857600080fd5b5061017b6105a736600461445e565b61178f565b3480156105b857600080fd5b506105cc6105c7366004614429565b611a7c565b6040516101ac9190614752565b3480156105e557600080fd5b5061017b6105f43660046144c0565b611d80565b34801561060557600080fd5b5061068161061436600461445e565b6000602081905290815260409020805460019091015460ff81169061010081046dffffffffffffffffffffffffffff16906f01000000000000000000000000000000810463ffffffff1690730100000000000000000000000000000000000000900465ffffffffffff1685565b6040805195865293151560208601526dffffffffffffffffffffffffffff9092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a0016101ac565b60015b60058110156106df576001016106ce565b6106e88261222c565b5050565b6000805a9050333014610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b8451606081015160a082015181016127100160405a603f028161078557610785614832565b0410156107b6577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b8751600090156108575760006107d3846000015160008c86612282565b9050806108555760006107e761080061229a565b80519091501561084f57846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610846929190614861565b60405180910390a35b60019250505b505b600088608001515a86030190506108a7828a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506122c6915050565b955050505050505b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f60fc6b6e00000000000000000000000000000000000000000000000000000000148061094a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f915074d800000000000000000000000000000000000000000000000000000000145b8061099657507fffffffff0000000000000000000000000000000000000000000000000000000082167fcf28ef9700000000000000000000000000000000000000000000000000000000145b806109e257507fffffffff0000000000000000000000000000000000000000000000000000000082167f3e84f02100000000000000000000000000000000000000000000000000000000145b80610a2e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b33600090815260208190526040902063ffffffff8216610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152606401610757565b600181015463ffffffff6f0100000000000000000000000000000090910481169083161015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610757565b6001810154600090610b6390349061010090046dffffffffffffffffffffffffffff166148a9565b905060008111610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152606401610757565b6dffffffffffffffffffffffffffff811115610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152606401610757565b6040805160a08101825283548152600160208083018281526dffffffffffffffffffffffffffff86811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16730100000000000000000000000000000000000000027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff979094166f0100000000000000000000000000000002969096167fffffffffffffff00000000000000000000ffffffffffffffffffffffffffffff91909516610100027fffffffffffffffffffffffffffffffffff0000000000000000000000000000ff991515999099167fffffffffffffffffffffffffffffffffff00000000000000000000000000000090941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b33600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff851684529091528120805491610e0a836148bc565b919050555050565b3360009081526020819052604090208054821115610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152606401610757565b8054610e999083906148f4565b81556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610f46576040519150601f19603f3d011682016040523d82523d6000602084013e610f4b565b606091505b5050905080610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152606401610757565b50505050565b6000610fc7826124c2565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b6110066124db565b8160008167ffffffffffffffff81111561102257611022613fd1565b60405190808252806020026020018201604052801561105b57816020015b611048613e25565b8152602001906001900390816110405790505b50905060005b828110156110d457600082828151811061107d5761107d614907565b602002602001015190506000806110b8848a8a878181106110a0576110a0614907565b90506020028101906110b29190614936565b8561251c565b915091506110c9848383600061277b565b505050600101611061565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b8381101561115e576111528188888481811061112157611121614907565b90506020028101906111339190614936565b85848151811061114557611145614907565b60200260200101516129d0565b90910190600101611103565b506111698482612da6565b5050506111766001600255565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516111a5929190614974565b600060405180830381855af49150503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b509150915081816040517f99410554000000000000000000000000000000000000000000000000000000008152600401610757929190614984565b83158015611243575073ffffffffffffffffffffffffffffffffffffffff83163b155b156112aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006044820152606401610757565b6014811061133c5760006112c1601482848661499f565b6112ca916149c9565b60601c9050803b60000361133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610757565b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610757565b6113b36040518060c0016040528060008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6113bb6124db565b6113c3613e25565b6113cc86612eed565b6000806113db6000898561251c565b9150915060006113ed60008a866129d0565b90506000606073ffffffffffffffffffffffffffffffffffffffff8a161561147f578973ffffffffffffffffffffffffffffffffffffffff168989604051611436929190614974565b6000604051808303816000865af19150503d8060008114611473576040519150601f19603f3d011682016040523d82523d6000602084013e611478565b606091505b5090925090505b6040518060c001604052808760800151815260200184815260200186815260200185815260200183151581526020018281525096505050505050506108af6001600255565b60006114e560065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3684846040518363ffffffff1660e01b815260040161151f929190614a5a565b6020604051808303816000875af115801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190614a6e565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909150602401610757565b336000908152602081905260408120600181015490916f0100000000000000000000000000000090910463ffffffff169003611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152606401610757565b600181015460ff166116b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152606401610757565b60018101546000906116e0906f01000000000000000000000000000000900463ffffffff1642614a8b565b6001830180547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001673010000000000000000000000000000000000000065ffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046dffffffffffffffffffffffffffff168061181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152606401610757565b6001820154730100000000000000000000000000000000000000900465ffffffffffff166118a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610757565b60018201544273010000000000000000000000000000000000000090910465ffffffffffff161115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610757565b6001820180547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a0c576040519150601f19603f3d011682016040523d82523d6000602084013e611a11565b606091505b5050905080610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152606401610757565b611a84613ed7565b611a8c613e25565b611a9583612eed565b600080611aa46000868561251c565b845160e001516040805180820182526000808252602080830182815273ffffffffffffffffffffffffffffffffffffffff95861683528282528483206001908101546dffffffffffffffffffffffffffff6101008083048216885263ffffffff6f010000000000000000000000000000009384900481169095528e51518951808b018b5288815280880189815291909b168852878752898820909401549081049091168952049091169052835180850190945281845283015293955091935090366000611b7460408b018b614ab1565b909250905060006014821015611b8b576000611ba6565b611b9960146000848661499f565b611ba2916149c9565b60601c5b6040805180820182526000808252602080830182815273ffffffffffffffffffffffffffffffffffffffff86168352908290529290206001015461010081046dffffffffffffffffffffffffffff1682526f01000000000000000000000000000000900463ffffffff169091529091509350505050600085905060006040518060a001604052808960800151815260200189604001518152602001888152602001878152602001611c588a6060015190565b905260408051808201825260035473ffffffffffffffffffffffffffffffffffffffff908116825282518084019093526004548352600554602084810191909152820192909252919250831615801590611cc9575060018373ffffffffffffffffffffffffffffffffffffffff1614155b15611d4d5760408051808201825273ffffffffffffffffffffffffffffffffffffffff851680825282518084018452600080825260208083018281529382528181529490206001015461010081046dffffffffffffffffffffffffffff1682526f01000000000000000000000000000000900463ffffffff16909152909182015290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b611d886124db565b816000805b82811015611f7a5736868683818110611da857611da8614907565b9050602002810190611dba9190614b16565b9050366000611dc98380614b4a565b90925090506000611de0604085016020860161445e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff821601611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152606401610757565b73ffffffffffffffffffffffffffffffffffffffff811615611f5e5773ffffffffffffffffffffffffffffffffffffffff8116632dd811338484611ec86040890189614ab1565b6040518563ffffffff1660e01b8152600401611ee79493929190614d02565b60006040518083038186803b158015611eff57600080fd5b505afa925050508015611f10575060015b611f5e576040517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610757565b611f6882876148a9565b95505060019093019250611d8d915050565b5060008167ffffffffffffffff811115611f9657611f96613fd1565b604051908082528060200260200182016040528015611fcf57816020015b611fbc613e25565b815260200190600190039081611fb45790505b5090506000805b848110156120ac5736888883818110611ff157611ff1614907565b90506020028101906120039190614b16565b90503660006120128380614b4a565b90925090506000612029604085016020860161445e565b90508160005b8181101561209a57600089898151811061204b5761204b614907565b6020026020010151905060008061206e8b8989878181106110a0576110a0614907565b9150915061207e8483838961277b565b8a612088816148bc565b9b50506001909301925061202f915050565b505060019094019350611fd692505050565b506040517fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a150600080805b858110156121e757368989838181106120f7576120f7614907565b90506020028101906121099190614b16565b905061211b604082016020830161445e565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a236600061216a8380614b4a565b90925090508060005b818110156121d6576121b58885858481811061219157612191614907565b90506020028101906121a39190614936565b8b8b8151811061114557611145614907565b6121bf90886148a9565b9650876121cb816148bc565b985050600101612173565b5050600190930192506120dc915050565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a261221d8682612da6565b50505050506111766001600255565b600061223882346130db565b90508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161178391815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156122a85750815b604051602082018101604052818152816000602083013e9392505050565b6000805a8551909150600090816122dc8261311b565b60e083015190915073ffffffffffffffffffffffffffffffffffffffff81166123085782519350612403565b80935060008851111561240357868202955060028a600281111561232e5761232e614db9565b146124035760a08301516040517f7c627b2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831691637c627b2191612390908e908d908c908990600401614de8565b600060405180830381600088803b1580156123aa57600080fd5b5087f1935050505080156123bc575060015b6124035760006123cd61080061229a565b9050806040517fad7954bc0000000000000000000000000000000000000000000000000000000081526004016107579190614e4b565b5a60408a0151908603979097019682880296508681101561247f5760028b600281111561243257612432614db9565b03612455578096506124438a613145565b6124508a6000898b6131a1565b6124b4565b7fdeadaa510000000000000000000000000000000000000000000000000000000060005260206000fd5b86810361248c86826130db565b506000808d60028111156124a2576124a2614db9565b1490506124b18c828b8d6131a1565b50505b505050505050949350505050565b60006124cd82613229565b805190602001209050919050565b6002805403612516576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028055565b60008060005a845190915061253186826132ee565b61253a86610fbc565b6020860152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff8111156125e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152606401610757565b60006126138460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b90506126228a8a8a8487613439565b96506126368460000151856020015161367a565b6126a557896040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a8603111561271a57896040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60e084015160609073ffffffffffffffffffffffffffffffffffffffff161561274e576127498b8b8b856136d5565b975090505b604089018290528060608a015260a08a01355a870301896080018181525050505050505050935093915050565b6000806127878561392c565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461282957856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526014908201527f41413234207369676e6174757265206572726f72000000000000000000000000606082015260800190565b801561289a57856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b60006128a58561392c565b9250905073ffffffffffffffffffffffffffffffffffffffff81161561293057866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526014908201527f41413334207369676e6174757265206572726f72000000000000000000000000606082015260800190565b81156129c757866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560608201527f6500000000000000000000000000000000000000000000000000000000000000608082015260a00190565b50505050505050565b6000805a905060006129e3846060015190565b60405190915060009036826129fb60608a018a614ab1565b9150915060606000826003811115612a1257843591505b507f72288ed1000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612b525760008b8b60200151604051602401612a75929190614e5e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8dd7712f000000000000000000000000000000000000000000000000000000001790525190915030906242dc5390612b089084908f908d90602401614f44565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050925050612bc9565b3073ffffffffffffffffffffffffffffffffffffffff166242dc5385858d8b604051602401612b849493929190614f84565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505091505b602060008351602085016000305af19550600051985084604052505050505080612d9c5760003d80602003612c045760206000803e60005191505b507fdeaddead000000000000000000000000000000000000000000000000000000008103612c9757876040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052600f908201527f41413935206f7574206f66206761730000000000000000000000000000000000606082015260800190565b7fdeadaa51000000000000000000000000000000000000000000000000000000008103612d0157600086608001515a612cd090876148f4565b612cda91906148a9565b6040880151909150612ceb88613145565b612cf888600083856131a1565b9550612d9a9050565b8551805160208089015192015173ffffffffffffffffffffffffffffffffffffffff90911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479290612d5561080061229a565b604051612d63929190614861565b60405180910390a3600086608001515a612d7d90876148f4565b612d8791906148a9565b9050612d9660028886846122c6565b9550505b505b5050509392505050565b73ffffffffffffffffffffffffffffffffffffffff8216612e23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152606401610757565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612e7d576040519150601f19603f3d011682016040523d82523d6000602084013e612e82565b606091505b5050905080611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610757565b612fed6040517fd69400000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152600090603701604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905550565b3063957122ab6130006040840184614ab1565b61300d602086018661445e565b61301a60e0870187614ab1565b6040518663ffffffff1660e01b815260040161303a959493929190614fbb565b60006040518083038186803b15801561305257600080fd5b505afa925050508015613063575060015b6130d85761306f61500a565b806308c379a0036130cc5750613083615026565b8061308e57506130ce565b8051156106e8576000816040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757929190614861565b505b3d6000803e3d6000fd5b50565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054829061310f9085906148a9565b91829055509392505050565b61010081015161012082015160009190808203613139575092915050565b6108af8248830161397f565b805180516020808401519281015160405190815273ffffffffffffffffffffffffffffffffffffffff90921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e0810151815160208088015193015160405173ffffffffffffffffffffffffffffffffffffffff9384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f9161321b9189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006132496132446040870187614ab1565b613997565b9050600061325d6132446060880188614ab1565b9050608086013560a087013560c0880135600061328061324460e08c018c614ab1565b6040805173ffffffffffffffffffffffffffffffffffffffff9a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b6132fb602083018361445e565b73ffffffffffffffffffffffffffffffffffffffff168152602082810135908201526fffffffffffffffffffffffffffffffff6080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061337460e0850185614ab1565b9092509050801561341e5760348110156133ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610757565b6133f482826139aa565b60a0860152608085015273ffffffffffffffffffffffffffffffffffffffff1660e0840152610fb6565b600060e084018190526080840181905260a084015250505050565b8251805160009190613458888761345360408b018b614ab1565b613a1b565b60e0820151600073ffffffffffffffffffffffffffffffffffffffff82166134b65773ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548781116134af578088036134b2565b60005b9150505b60208801516040517f19822f7c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516916319822f7c918991613512918e919087906004016150ce565b60206040518083038160008887f19350505050801561356c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613569918101906150f3565b60015b6135b0578961357c61080061229a565b6040517f65c8fd4d00000000000000000000000000000000000000000000000000000000815260040161075792919061510c565b945073ffffffffffffffffffffffffffffffffffffffff821661366d5773ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020805480891115613667578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832084821c808552925282208054849167ffffffffffffffff83169190856136c7836148bc565b909155501495945050505050565b60606000805a855160e081015173ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604090208054939450919290919087811015613784578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b87810382600001819055506000846080015190508373ffffffffffffffffffffffffffffffffffffffff166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016137da939291906150ce565b60006040518083038160008887f19350505050801561383957506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526138369190810190615159565b60015b61387d578b61384961080061229a565b6040517f65c8fd4d0000000000000000000000000000000000000000000000000000000081526004016107579291906151e5565b9098509650805a8703111561391d578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760608201527f61734c696d697400000000000000000000000000000000000000000000000000608082015260a00190565b50505050505094509492505050565b6000808260000361394257506000928392509050565b600061394d84613da7565b9050806040015165ffffffffffff164211806139745750806020015165ffffffffffff1642105b905194909350915050565b600081831061398e5781613990565b825b9392505050565b6000604051828085833790209392505050565b600080806139bb601482868861499f565b6139c4916149c9565b60601c6139d560246014878961499f565b6139de91615232565b60801c6139ef60346024888a61499f565b6139f891615232565b9194506fffffffffffffffffffffffffffffffff16925060801c90509250925092565b8015610fb65782515173ffffffffffffffffffffffffffffffffffffffff81163b15613aac57846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b6000613acd60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516040015186866040518463ffffffff1660e01b8152600401613b10929190614a5a565b60206040518083038160008887f1158015613b2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b549190614a6e565b905073ffffffffffffffffffffffffffffffffffffffff8116613bdc57856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613c7957856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161075791815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b8073ffffffffffffffffffffffffffffffffffffffff163b600003613d0257856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161075791815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000613d11601482868861499f565b613d1a916149c9565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051613d9692919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003613de3575065ffffffffffff5b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6040518060a00160405280613eb2604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a00160405280613f146040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001613f36604051806040016040528060008152602001600081525090565b8152602001613f58604051806040016040528060008152602001600081525090565b8152602001613f7a604051806040016040528060008152602001600081525090565b8152602001613f87613f8c565b905290565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001613f87604051806040016040528060008152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810181811067ffffffffffffffff8211171561402057614020613fd1565b60405250565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561406a5761406a613fd1565b6040525050565b604051610140810167ffffffffffffffff8111828210171561409557614095613fd1565b60405290565b600067ffffffffffffffff8211156140b5576140b5613fd1565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff811681146130d857600080fd5b803561410e816140e1565b919050565b60008183036101c081121561412757600080fd5b60405161413381614000565b8092506101408083121561414657600080fd5b61414e614071565b925061415985614103565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015260a085013560a084015260c085013560c08401526141a360e08601614103565b60e084015261010085810135908401526101208086013590840152918152908301356020820152610160830135604082015261018083013560608201526101a090920135608090920191909152919050565b60008083601f84011261420757600080fd5b50813567ffffffffffffffff81111561421f57600080fd5b60208301915083602082850101111561423757600080fd5b9250929050565b600080600080610200858703121561425557600080fd5b843567ffffffffffffffff8082111561426d57600080fd5b818701915087601f83011261428157600080fd5b813561428c8161409b565b6040516142998282614026565b8281528a60208487010111156142ae57600080fd5b826020860160208301376000602084830101528098505050506142d48860208901614113565b94506101e08701359150808211156142eb57600080fd5b506142f8878288016141f5565b95989497509550505050565b60006020828403121561431657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461399057600080fd5b60006020828403121561435857600080fd5b813563ffffffff8116811461399057600080fd5b803577ffffffffffffffffffffffffffffffffffffffffffffffff8116811461410e57600080fd5b6000602082840312156143a657600080fd5b6139908261436c565b600080604083850312156143c257600080fd5b82356143cd816140e1565b91506143db6020840161436c565b90509250929050565b600080604083850312156143f757600080fd5b8235614402816140e1565b946020939093013593505050565b6000610120828403121561442357600080fd5b50919050565b60006020828403121561443b57600080fd5b813567ffffffffffffffff81111561445257600080fd5b6108af84828501614410565b60006020828403121561447057600080fd5b8135613990816140e1565b60008083601f84011261448d57600080fd5b50813567ffffffffffffffff8111156144a557600080fd5b6020830191508360208260051b850101111561423757600080fd5b6000806000604084860312156144d557600080fd5b833567ffffffffffffffff8111156144ec57600080fd5b6144f88682870161447b565b909450925050602084013561450c816140e1565b809150509250925092565b60008060006040848603121561452c57600080fd5b8335614537816140e1565b9250602084013567ffffffffffffffff81111561455357600080fd5b61455f868287016141f5565b9497909650939450505050565b60008060008060006060868803121561458457600080fd5b853567ffffffffffffffff8082111561459c57600080fd5b6145a889838a016141f5565b9097509550602088013591506145bd826140e1565b909350604087013590808211156145d357600080fd5b506145e0888289016141f5565b969995985093965092949392505050565b6000806000806060858703121561460757600080fd5b843567ffffffffffffffff8082111561461f57600080fd5b61462b88838901614410565b95506020870135915061463d826140e1565b909350604086013590808211156142eb57600080fd5b60005b8381101561466e578181015183820152602001614656565b50506000910152565b6000815180845261468f816020860160208601614653565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526080820151151560a0820152600060a083015160c0808401526108af60e0840182614677565b6000806020838503121561472357600080fd5b823567ffffffffffffffff81111561473a57600080fd5b614746858286016141f5565b90969095509350505050565b602080825282516101408383015280516101608401529081015161018083015260408101516101a083015260608101516101c08301526080015160a06101e08301526000906147a5610200840182614677565b905060208401516147c3604085018280518252602090810151910152565b506040840151805160808581019190915260209182015160a08601526060860151805160c087015282015160e0860152850151805173ffffffffffffffffffffffffffffffffffffffff1661010086015280820151805161012087015290910151610140850152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8281526040602082015260006108af6040830184614677565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a2e57610a2e61487a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148ed576148ed61487a565b5060010190565b81810381811115610a2e57610a2e61487a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261496a57600080fd5b9190910192915050565b8183823760009101908152919050565b82151581526040602082015260006108af6040830184614677565b600080858511156149af57600080fd5b838611156149bc57600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015614a095780818660140360031b1b83161692505b505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006108af602083018486614a11565b600060208284031215614a8057600080fd5b8151613990816140e1565b65ffffffffffff818116838216019080821115614aaa57614aaa61487a565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ae657600080fd5b83018035915067ffffffffffffffff821115614b0157600080fd5b60200191503681900382131561423757600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261496a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614b7f57600080fd5b83018035915067ffffffffffffffff821115614b9a57600080fd5b6020019150600581901b360382131561423757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614be757600080fd5b830160208101925035905067ffffffffffffffff811115614c0757600080fd5b80360382131561423757600080fd5b6000610120614c4284614c2885614103565b73ffffffffffffffffffffffffffffffffffffffff169052565b60208301356020850152614c596040840184614bb2565b826040870152614c6c8387018284614a11565b92505050614c7d6060840184614bb2565b8583036060870152614c90838284614a11565b925050506080830135608085015260a083013560a085015260c083013560c0850152614cbf60e0840184614bb2565b85830360e0870152614cd2838284614a11565b92505050610100614ce581850185614bb2565b86840383880152614cf7848284614a11565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b89811015614da2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087860301845282357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18c3603018112614d80578283fd5b614d8c868d8301614c16565b9550506020938401939290920191600101614d20565b505050508281036020840152614cf7818587614a11565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060038610614e21577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b85825260806020830152614e386080830186614677565b6040830194909452506060015292915050565b6020815260006139906020830184614677565b604081526000614e716040830185614c16565b90508260208301529392505050565b8051805173ffffffffffffffffffffffffffffffffffffffff1683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e0810151614eff60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010081810151908401526101209081015190830152602081015161014083015260408101516101608301526060810151610180830152608001516101a090910152565b6000610200808352614f5881840187614677565b9050614f676020840186614e80565b8281036101e0840152614f7a8185614677565b9695505050505050565b6000610200808352614f998184018789614a11565b9050614fa86020840186614e80565b8281036101e0840152614cf78185614677565b606081526000614fcf606083018789614a11565b73ffffffffffffffffffffffffffffffffffffffff861660208401528281036040840152614ffe818587614a11565b98975050505050505050565b600060033d11156150235760046000803e5060005160e01c5b90565b600060443d10156150345790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561508257505050505090565b828501915081518181111561509a5750505050505090565b843d87010160208285010111156150b45750505050505090565b6150c360208286010187614026565b509095945050505050565b6060815260006150e16060830186614c16565b60208301949094525060400152919050565b60006020828403121561510557600080fd5b5051919050565b82815260606020820152600d60608201527f4141323320726576657274656400000000000000000000000000000000000000608082015260a0604082015260006108af60a0830184614677565b6000806040838503121561516c57600080fd5b825167ffffffffffffffff81111561518357600080fd5b8301601f8101851361519457600080fd5b805161519f8161409b565b6040516151ac8282614026565b8281528760208486010111156151c157600080fd5b6151d2836020830160208701614653565b6020969096015195979596505050505050565b82815260606020820152600d60608201527f4141333320726576657274656400000000000000000000000000000000000000608082015260a0604082015260006108af60a0830184614677565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008135818116916010851015614a095760109490940360031b84901b169092169291505056fea2646970667358221220d91a0462bc7bb528fdf3ea5e6747c873aa8d3c3eb82ba653aef7f1948cad609264736f6c63430008170033\";\n","import { EIP1193RequestFn, Hex, HttpTransport, RpcTransactionReceipt, Transport } from \"viem\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\n\ntype WiresawSendUserOperationResult = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype WiresawOptions<transport extends Transport> = {\n wiresaw: transport;\n fallbackBundler?: HttpTransport;\n fallbackEth?: HttpTransport;\n};\n\nexport function wiresaw<const wiresawTransport extends Transport>(\n transport: WiresawOptions<wiresawTransport>,\n): wiresawTransport {\n return ((opts) => {\n const { request: originalRequest, ...rest } = transport.wiresaw(opts);\n\n let chainId: Hex | null = null;\n const transactionHashes: { [userOpHash: Hex]: Hex } = {};\n const transactionReceipts: { [transactionHashes: Hex]: RpcTransactionReceipt } = {};\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n if (req.method === \"eth_chainId\") {\n if (chainId != null) return chainId;\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n return (chainId = await fallbackRequest(req));\n }\n return (chainId = await originalRequest(req));\n }\n\n if (req.method === \"eth_estimateGas\") {\n return originalRequest({ ...req, method: \"wiresaw_estimateGas\" });\n }\n\n if (req.method === \"eth_call\") {\n return originalRequest({ ...req, method: \"wiresaw_call\" });\n }\n\n if (req.method === \"eth_getTransactionCount\") {\n return originalRequest({ ...req, method: \"wiresaw_getTransactionCount\" });\n }\n\n if (req.method === \"eth_getTransactionReceipt\") {\n return getTransactionReceipt((req.params as [Hex])[0]);\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n const { userOpHash, txHash } = (await originalRequest({\n ...req,\n method: \"wiresaw_sendUserOperation\",\n })) as WiresawSendUserOperationResult;\n transactionHashes[userOpHash] = txHash;\n return userOpHash;\n }\n\n if (req.method === \"eth_getUserOperationReceipt\") {\n const userOpHash = (req.params as [Hex])[0];\n const knownTransactionHash = transactionHashes[userOpHash];\n if (knownTransactionHash) {\n return getTransactionReceipt(knownTransactionHash);\n }\n if (transport.fallbackBundler) {\n const { request: fallbackRequest } = transport.fallbackBundler(opts);\n return fallbackRequest(req);\n }\n }\n\n if (req.method === \"eth_estimateUserOperationGas\") {\n try {\n return await estimateUserOperationGas({\n request: originalRequest,\n params: req.params as never,\n });\n } catch (e) {\n console.warn(\"[wiresaw] estimating user operation gas failed, falling back to bundler\", e);\n }\n\n if (transport.fallbackBundler) {\n const { request: fallbackRequest } = transport.fallbackBundler(opts);\n return fallbackRequest(req);\n }\n }\n\n // Fallback to regular RPC for methods that don't require wiresaw\n if (req.method === \"eth_blockNumber\" || req.method === \"eth_getBlockByNumber\") {\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n return fallbackRequest(req);\n }\n return originalRequest(req);\n }\n\n return originalRequest(req);\n\n async function getTransactionReceipt(hash: Hex): Promise<RpcTransactionReceipt | undefined> {\n // Return cached receipt if available\n if (transactionReceipts[hash]) return transactionReceipts[hash];\n\n // Fetch pending receipt\n const pendingReceipt = (await originalRequest({\n ...req,\n method: \"wiresaw_getTransactionReceipt\",\n })) as RpcTransactionReceipt | undefined;\n if (pendingReceipt) {\n transactionReceipts[hash] = pendingReceipt;\n return pendingReceipt;\n }\n\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n const receipt = (await fallbackRequest(req)) as RpcTransactionReceipt | undefined;\n if (receipt) {\n transactionReceipts[hash] = receipt;\n return receipt;\n }\n }\n }\n },\n };\n }) as wiresawTransport;\n}\n"],"mappings":"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","names":["debug","debug","sendTransaction","waitForTransactionReceipt","getCode","getCode","debug","deployer","debug","sendTransaction","waitForTransactionReceipt","error","getCreate2Address","getCreate2Address"]}
|
|
1
|
+
{"version":3,"sources":["../src/waitForTransactions.ts","../src/deploy/ensureContract.ts","../src/deploy/common.ts","../src/deploy/debug.ts","../src/deploy/ensureContractsDeployed.ts","../src/deploy/ensureDeployer.ts","../src/deploy/create2/deployment.json","../src/deploy/getDeployer.ts","../src/deploy/getContractAddress.ts","../src/transports/wiresaw.ts","../src/transports/methods/estimateUserOperationGas.ts","../src/transports/entryPointGasSimulations.ts","../src/transports/methods/getUserOperationReceipt.ts","../src/transports/chainTransport.ts"],"sourcesContent":["import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { debug } from \"./debug\";\nimport { waitForTransactionReceipt } from \"viem/actions\";\n\nexport async function waitForTransactions({\n client,\n hashes,\n debugLabel = \"transactions\",\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly hashes: readonly Hex[];\n readonly debugLabel?: string;\n}): Promise<void> {\n if (!hashes.length) return;\n\n debug(`waiting for ${debugLabel} to confirm`);\n // wait for each tx separately/serially, because parallelizing results in RPC errors\n for (const hash of hashes) {\n const receipt = await waitForTransactionReceipt(client, { hash });\n // TODO: handle user op failures?\n if (receipt.status === \"reverted\") {\n throw new Error(`Transaction reverted: ${hash}`);\n }\n }\n}\n","import { Client, Transport, Chain, Account, concatHex, getCreate2Address, Hex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport { contractSizeLimit, singletonSalt } from \"./common\";\nimport { debug } from \"./debug\";\nimport { sendTransaction } from \"../sendTransaction\";\n\nexport type Contract = {\n bytecode: Hex;\n deployedBytecodeSize?: number;\n debugLabel?: string;\n salt?: Hex;\n};\n\nexport async function ensureContract({\n client,\n deployerAddress,\n bytecode,\n deployedBytecodeSize,\n debugLabel = \"contract\",\n salt = singletonSalt,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n} & Contract): Promise<readonly Hex[]> {\n if (bytecode.includes(\"__$\")) {\n throw new Error(`Found unlinked public library in ${debugLabel} bytecode`);\n }\n\n const address = getCreate2Address({ from: deployerAddress, salt, bytecode });\n\n const contractCode = await getCode(client, { address, blockTag: \"pending\" });\n if (contractCode) {\n debug(\"found\", debugLabel, \"at\", address);\n return [];\n }\n\n if (deployedBytecodeSize != null) {\n if (deployedBytecodeSize === 0) {\n throw new Error(`Empty bytecode for ${debugLabel}`);\n }\n\n if (deployedBytecodeSize > contractSizeLimit) {\n console.warn(\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n } else if (deployedBytecodeSize > contractSizeLimit * 0.95) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is almost over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n }\n }\n\n debug(\"deploying\", debugLabel, \"at\", address);\n return [\n await sendTransaction(client, {\n chain: client.chain ?? null,\n to: deployerAddress,\n data: concatHex([salt, bytecode]),\n }),\n ];\n}\n","import { stringToHex } from \"viem\";\n\n// salt for deterministic deploys of singleton contracts\nexport const singletonSalt = stringToHex(\"\", { size: 32 });\n\n// https://eips.ethereum.org/EIPS/eip-170\nexport const contractSizeLimit = parseInt(\"6000\", 16);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"deploy\");\nexport const error = parentDebug.extend(\"deploy\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { Contract, ensureContract } from \"./ensureContract\";\nimport { waitForTransactions } from \"../waitForTransactions\";\nimport { uniqueBy } from \"../utils/uniqueBy\";\n\nexport async function ensureContractsDeployed({\n client,\n deployerAddress,\n contracts,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n readonly contracts: readonly Contract[];\n}): Promise<readonly Hex[]> {\n // Deployments assume a deterministic deployer, so we only need to deploy the unique bytecode\n const uniqueContracts = uniqueBy(contracts, (contract) => contract.bytecode);\n\n const txs = (\n await Promise.all(uniqueContracts.map((contract) => ensureContract({ client, deployerAddress, ...contract })))\n ).flat();\n\n await waitForTransactions({\n client,\n hashes: txs,\n debugLabel: \"contract deploys\",\n });\n\n return txs;\n}\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { getBalance, sendRawTransaction, sendTransaction, waitForTransactionReceipt } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\nimport { getDeployer } from \"./getDeployer\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function ensureDeployer(client: Client<Transport, Chain | undefined, Account>): Promise<Address> {\n const existingDeployer = await getDeployer(client);\n if (existingDeployer !== undefined) {\n return existingDeployer;\n }\n\n // There's not really a way to simulate a pre-EIP-155 (no chain ID) transaction,\n // so we have to attempt to create the deployer first and, if it fails, fall back\n // to a regular deploy.\n\n // Send gas to deployment signer\n const gasRequired = BigInt(deployment.gasLimit) * BigInt(deployment.gasPrice);\n const currentBalance = await getBalance(client, { address: `0x${deployment.signerAddress}` });\n const gasNeeded = gasRequired - currentBalance;\n if (gasNeeded > 0) {\n debug(\"sending gas for CREATE2 deployer to signer at\", deployment.signerAddress);\n const gasTx = await sendTransaction(client, {\n chain: client.chain ?? null,\n to: `0x${deployment.signerAddress}`,\n value: gasNeeded,\n });\n const gasReceipt = await waitForTransactionReceipt(client, { hash: gasTx });\n if (gasReceipt.status !== \"success\") {\n console.error(\"failed to send gas to deployer signer\", gasReceipt);\n throw new Error(\"failed to send gas to deployer signer\");\n }\n }\n\n // Deploy the deployer\n debug(\"deploying CREATE2 deployer at\", deployer);\n const deployTx = await sendRawTransaction(client, { serializedTransaction: `0x${deployment.transaction}` }).catch(\n (error) => {\n // Do a regular contract create if the presigned transaction doesn't work due to replay protection\n if (String(error).includes(\"only replay-protected (EIP-155) transactions allowed over RPC\")) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\n ⚠️ Your chain or RPC does not allow for non EIP-155 signed transactions, so your deploys will not be determinstic and contract addresses may change between deploys.\\n\\n We recommend running your chain's node with \\`--rpc.allow-unprotected-txs\\` to enable determinstic deployments.\\n`,\n );\n debug(\"deploying CREATE2 deployer\");\n return sendTransaction(client, {\n chain: client.chain ?? null,\n data: `0x${deployment.creationCode}`,\n });\n }\n throw error;\n },\n );\n\n const deployReceipt = await waitForTransactionReceipt(client, { hash: deployTx });\n if (!deployReceipt.contractAddress) {\n throw new Error(\"Deploy receipt did not have contract address, was the deployer not deployed?\");\n }\n\n if (deployReceipt.contractAddress !== deployer) {\n console.warn(\n `\\n ⚠️ CREATE2 deployer created at ${deployReceipt.contractAddress} does not match the CREATE2 determinstic deployer we expected (${deployer})`,\n );\n }\n\n return deployReceipt.contractAddress;\n}\n","{\n \"gasPrice\": 100000000000,\n \"gasLimit\": 100000,\n \"signerAddress\": \"3fab184622dc19b6109349b94811493bf2a45362\",\n \"transaction\": \"f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222\",\n \"address\": \"4e59b44847b379578588920ca78fbf26c0b4956c\",\n \"creationCode\": \"604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n}\n","import { Address, Chain, Client, Transport, sliceHex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined> {\n const bytecode = await getCode(client, { address: deployer });\n if (bytecode) {\n debug(\"found deployer bytecode at\", deployer);\n // check if deployed bytecode is the same as the expected bytecode (minus 14-bytes creation code prefix)\n if (bytecode !== sliceHex(`0x${deployment.creationCode}`, 14)) {\n console.warn(\n `\\n ⚠️ Bytecode for deployer at ${deployer} did not match the expected CREATE2 bytecode. You may have unexpected results.\\n`,\n );\n }\n return deployer;\n }\n}\n","import { Hex, getCreate2Address } from \"viem\";\nimport { singletonSalt } from \"./common\";\n\nexport function getContractAddress({\n deployerAddress,\n bytecode,\n salt = singletonSalt,\n}: {\n readonly deployerAddress: Hex;\n readonly bytecode: Hex;\n readonly salt?: Hex;\n}): Hex {\n return getCreate2Address({ from: deployerAddress, bytecode, salt });\n}\n","import { Chain, EIP1193RequestFn, Hex, http, RpcTransactionReceipt, Transport } from \"viem\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\nimport { getUserOperationReceipt } from \"./methods/getUserOperationReceipt\";\nimport { chainTransport } from \"./chainTransport\";\n\ntype WiresawSendUserOperationResult = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype WiresawOptions<transport extends Transport> = {\n /** wiresaw-compatible transport */\n wiresawTransport: transport;\n /** fallback transport for bundler RPC methods */\n fallbackBundlerTransport?: Transport;\n /** fallback transport for all other RPC methods */\n fallbackDefaultTransport?: Transport;\n};\n\nexport function wiresaw<const wiresawTransport extends Transport>(\n transports?: WiresawOptions<wiresawTransport>,\n): wiresawTransport {\n return ((opts) => {\n const { wiresawTransport, fallbackBundlerTransport, fallbackDefaultTransport } =\n transports ?? getDefaultTransports(opts.chain);\n\n const { request: wiresawRequest, ...rest } = wiresawTransport(opts);\n\n let chainId: Hex | null = null;\n const transactionHashes: { [userOpHash: Hex]: Hex } = {};\n const transactionReceipts: { [transactionHashes: Hex]: RpcTransactionReceipt } = {};\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n try {\n if (req.method === \"eth_chainId\") {\n if (chainId != null) return chainId;\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n return (chainId = await fallbackRequest(req));\n }\n return (chainId = await wiresawRequest(req));\n }\n\n if (req.method === \"eth_estimateGas\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_estimateGas\" });\n }\n\n if (req.method === \"eth_call\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_call\" });\n }\n\n if (req.method === \"eth_getTransactionCount\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_getTransactionCount\" });\n }\n\n if (req.method === \"eth_getTransactionReceipt\") {\n return await getTransactionReceipt((req.params as [Hex])[0]);\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n const { userOpHash, txHash } = (await wiresawRequest({\n ...req,\n method: \"wiresaw_sendUserOperation\",\n })) as WiresawSendUserOperationResult;\n transactionHashes[userOpHash] = txHash;\n return userOpHash;\n }\n\n if (req.method === \"eth_getUserOperationReceipt\") {\n const userOpHash = (req.params as [Hex])[0];\n const knownTransactionHash = transactionHashes[userOpHash];\n if (!knownTransactionHash) {\n throw new Error(`eth_getUserOperationReceipt only supported for own user operations`);\n }\n const transactionReceipt = await getTransactionReceipt(knownTransactionHash);\n return transactionReceipt && getUserOperationReceipt(userOpHash, transactionReceipt);\n }\n\n if (req.method === \"eth_estimateUserOperationGas\") {\n return await estimateUserOperationGas({\n request: wiresawRequest,\n params: req.params as never,\n });\n }\n\n // Fallback to regular RPC for methods that don't require wiresaw\n if (\n req.method === \"eth_blockNumber\" ||\n req.method === \"eth_getBlockByNumber\" ||\n req.method === \"eth_maxPriorityFeePerGas\"\n ) {\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n return await fallbackRequest(req);\n }\n return await wiresawRequest(req);\n }\n\n return await wiresawRequest(req);\n } catch (e) {\n console.warn(\"[wiresaw] request failed\", e);\n const bundlerMethods = [\n \"eth_estimateUserOperationGas\",\n \"eth_sendUserOperation\",\n \"eth_getUserOperationReceipt\",\n ];\n if (bundlerMethods.includes(req.method)) {\n if (fallbackBundlerTransport) {\n const { request: fallbackRequest } = fallbackBundlerTransport(opts);\n console.warn(\"[wiresaw] falling back to bundler rpc\", req);\n return fallbackRequest(req);\n }\n }\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n console.warn(\"[wiresaw] falling back to eth rpc\", req);\n return fallbackRequest(req);\n }\n throw e;\n }\n\n async function getTransactionReceipt(hash: Hex): Promise<RpcTransactionReceipt | undefined> {\n // Return cached receipt if available\n if (transactionReceipts[hash]) return transactionReceipts[hash];\n\n // Fetch pending receipt\n const pendingReceipt = (await wiresawRequest({\n ...req,\n method: \"wiresaw_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (pendingReceipt) {\n transactionReceipts[hash] = pendingReceipt;\n return pendingReceipt;\n }\n\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n const receipt = (await fallbackRequest({\n ...req,\n method: \"eth_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (receipt) {\n transactionReceipts[hash] = receipt;\n return receipt;\n }\n }\n }\n },\n };\n }) as wiresawTransport;\n}\n\nfunction getDefaultTransports(chain?: Chain): WiresawOptions<Transport> {\n if (!chain) {\n throw new Error(\"No chain or transports provided\");\n }\n\n const wiresawTransport = chainTransport(chain.rpcUrls.wiresaw);\n if (!wiresawTransport) {\n throw new Error(\"Provided chain does not support wiresaw\");\n }\n\n const bundlerHttpUrl = chain.rpcUrls.bundler?.http[0];\n return {\n wiresawTransport,\n fallbackBundlerTransport: bundlerHttpUrl ? http(bundlerHttpUrl) : undefined,\n fallbackDefaultTransport: http(),\n };\n}\n","import {\n BundlerRpcSchema,\n decodeFunctionResult,\n DecodeFunctionResultReturnType,\n EIP1193RequestFn,\n encodeFunctionData,\n Hex,\n zeroAddress,\n} from \"viem\";\nimport { getRpcMethod } from \"../common\";\nimport {\n entryPoint07Address,\n formatUserOperation,\n formatUserOperationRequest,\n toPackedUserOperation,\n UserOperation,\n} from \"viem/account-abstraction\";\nimport { bigIntMax } from \"../../utils\";\nimport { entryPointGasSimulationsAbi } from \"../entryPointGasSimulations\";\n\ntype rpcMethod = getRpcMethod<BundlerRpcSchema, \"eth_estimateUserOperationGas\">;\n\ntype EstimateUserOperationGasOptions = {\n request: EIP1193RequestFn;\n params: rpcMethod[\"Parameters\"];\n};\n\nexport async function estimateUserOperationGas({\n request,\n params,\n}: EstimateUserOperationGasOptions): Promise<rpcMethod[\"ReturnType\"]> {\n const userOp = formatUserOperation(params[0]);\n const gasSimulation = await simulateGas({ userOp, request });\n const gasLimits = {\n verificationGasLimit: gasSimulation.verificationGas * 2n,\n callGasLimit: bigIntMax(gasSimulation.callGas * 2n, 9000n),\n paymasterVerificationGasLimit: gasSimulation.paymasterVerificationGas * 2n,\n paymasterPostOpGasLimit: gasSimulation.paymasterPostOpGas * 2n,\n preVerificationGas: 20_000n,\n };\n\n return formatUserOperationRequest({\n ...gasLimits,\n });\n}\n\ntype SimulateGasOptions = {\n request: EIP1193RequestFn;\n userOp: UserOperation<\"0.7\">;\n};\n\ntype SimulateGasResult = DecodeFunctionResultReturnType<typeof entryPointGasSimulationsAbi>;\n\nasync function simulateGas({ request, userOp }: SimulateGasOptions): Promise<SimulateGasResult> {\n // Prepare user operation for simulation\n const simulationUserOp = {\n ...userOp,\n preVerificationGas: 0n,\n callGasLimit: 10_000_000n,\n verificationGasLimit: 10_000_000n,\n // https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117\n maxPriorityFeePerGas: userOp.maxFeePerGas,\n paymasterPostOpGasLimit: 2_000_000n,\n paymasterVerificationGasLimit: 5_000_000n,\n } satisfies UserOperation<\"0.7\">;\n\n const packedUserOp = toPackedUserOperation(simulationUserOp);\n const simulationData = encodeFunctionData({\n abi: entryPointGasSimulationsAbi,\n functionName: \"estimateGas\",\n args: [packedUserOp],\n });\n\n const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;\n const senderBalanceOverride = hasPaymaster ? {} : { [userOp.sender]: { balance: \"0xFFFFFFFFFFFFFFFFFFFF\" } };\n const simulationParams = [\n {\n to: entryPoint07Address,\n data: simulationData,\n },\n \"pending\",\n {\n ...senderBalanceOverride,\n },\n ];\n const encodedSimulationResult: Hex = await request({\n method: \"wiresaw_callEntryPointSimulations\",\n params: simulationParams,\n });\n\n return decodeFunctionResult({\n abi: entryPointGasSimulationsAbi,\n functionName: \"estimateGas\",\n data: encodedSimulationResult,\n });\n}\n","export const entryPointGasSimulationsAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"initCode\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes32\",\n name: \"accountGasLimits\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"preVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"gasFees\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"paymasterAndData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct PackedUserOperation\",\n name: \"op\",\n type: \"tuple\",\n },\n ],\n name: \"estimateGas\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"verificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"callGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterPostOpGas\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct EntryPoint.GasInfo\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","import {\n Address,\n ExtractAbiItem,\n Hex,\n RpcTransactionReceipt,\n RpcUserOperationReceipt,\n decodeEventLog,\n encodeEventTopics,\n numberToHex,\n parseEventLogs,\n zeroAddress,\n} from \"viem\";\nimport { entryPoint07Abi } from \"viem/account-abstraction\";\n\nconst userOperationRevertReasonAbi = [\n entryPoint07Abi.find(\n (item): item is ExtractAbiItem<typeof entryPoint07Abi, \"UserOperationRevertReason\"> =>\n item.type === \"event\" && item.name === \"UserOperationRevertReason\",\n )!,\n] as const;\n\nconst userOperationEventTopic = encodeEventTopics({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n});\n\nexport function getUserOperationReceipt(userOpHash: Hex, receipt: RpcTransactionReceipt): RpcUserOperationReceipt {\n const userOperationRevertReasonTopicEvent = encodeEventTopics({\n abi: userOperationRevertReasonAbi,\n })[0];\n\n let entryPoint: Address = zeroAddress;\n let revertReason = undefined;\n\n let startIndex = -1;\n let endIndex = -1;\n receipt.logs.forEach((log, index) => {\n if (log?.topics[0] === userOperationEventTopic[0]) {\n // process UserOperationEvent\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. save as end of logs array\n endIndex = index;\n entryPoint = log.address;\n } else if (endIndex === -1) {\n // it's a different hash. remember it as beginning index, but only if we didn't find our end index yet.\n startIndex = index;\n }\n }\n\n if (log?.topics[0] === userOperationRevertReasonTopicEvent) {\n // process UserOperationRevertReason\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. capture revert reason.\n const decodedLog = decodeEventLog({\n abi: userOperationRevertReasonAbi,\n data: log.data,\n topics: log.topics,\n });\n\n revertReason = decodedLog.args.revertReason;\n }\n }\n });\n\n if (endIndex === -1) {\n throw new Error(\"fatal: no UserOperationEvent in logs\");\n }\n\n const logs = receipt.logs.slice(startIndex + 1, endIndex);\n\n const userOperationEvent = parseEventLogs({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n args: {\n userOpHash,\n },\n logs: receipt.logs,\n })[0]!;\n\n let paymaster: Address | undefined = userOperationEvent.args.paymaster;\n paymaster = paymaster === zeroAddress ? undefined : paymaster;\n\n return {\n userOpHash,\n entryPoint,\n sender: userOperationEvent.args.sender,\n nonce: numberToHex(userOperationEvent.args.nonce),\n paymaster,\n actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),\n actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),\n success: userOperationEvent.args.success,\n reason: revertReason,\n logs,\n receipt,\n };\n}\n","import { Chain, fallback, http, Transport, webSocket } from \"viem\";\n\nexport function chainTransport(rpcUrls: Chain[\"rpcUrls\"][string]): Transport | undefined {\n const webSocketUrl = rpcUrls?.webSocket?.[0];\n const httpUrl = rpcUrls?.http[0];\n\n if (webSocketUrl) {\n return httpUrl ? fallback([webSocket(webSocketUrl), http(httpUrl)]) : webSocket(webSocketUrl);\n }\n\n if (httpUrl) {\n return http(httpUrl);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAEA,SAAS,iCAAiC;AAE1C,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAIkB;AAChB,MAAI,CAAC,OAAO,OAAQ;AAEpB,QAAM,eAAe,UAAU,aAAa;AAE5C,aAAW,QAAQ,QAAQ;AACzB,UAAM,UAAU,MAAM,0BAA0B,QAAQ,EAAE,KAAK,CAAC;AAEhE,QAAI,QAAQ,WAAW,YAAY;AACjC,YAAM,IAAI,MAAM,yBAAyB,IAAI,EAAE;AAAA,IACjD;AAAA,EACF;AACF;;;ACxBA,SAA4C,WAAW,yBAA8B;AACrF,SAAS,eAAe;;;ACDxB,SAAS,mBAAmB;AAGrB,IAAM,gBAAgB,YAAY,IAAI,EAAE,MAAM,GAAG,CAAC;AAGlD,IAAM,oBAAoB,SAAS,QAAQ,EAAE;;;ACJ7C,IAAMA,SAAQ,MAAY,OAAO,QAAQ;AACzC,IAAM,QAAQ,MAAY,OAAO,QAAQ;AAGhDA,OAAM,MAAM,QAAQ,MAAM,KAAK,OAAO;AAGtC,MAAM,MAAM,QAAQ,MAAM,KAAK,OAAO;;;AFItC,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,OAAO;AACT,GAGuC;AACrC,MAAI,SAAS,SAAS,KAAK,GAAG;AAC5B,UAAM,IAAI,MAAM,oCAAoC,UAAU,WAAW;AAAA,EAC3E;AAEA,QAAM,UAAU,kBAAkB,EAAE,MAAM,iBAAiB,MAAM,SAAS,CAAC;AAE3E,QAAM,eAAe,MAAM,QAAQ,QAAQ,EAAE,SAAS,UAAU,UAAU,CAAC;AAC3E,MAAI,cAAc;AAChB,IAAAC,OAAM,SAAS,YAAY,MAAM,OAAO;AACxC,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,wBAAwB,MAAM;AAChC,QAAI,yBAAyB,GAAG;AAC9B,YAAM,IAAI,MAAM,sBAAsB,UAAU,EAAE;AAAA,IACpD;AAEA,QAAI,uBAAuB,mBAAmB;AAC5C,cAAQ;AAAA,QACN;AAAA,eAAkB,UAAU,KAAK,oBAAoB,4CAA4C,iBAAiB;AAAA;AAAA,MACpH;AAAA,IACF,WAAW,uBAAuB,oBAAoB,MAAM;AAC1D,cAAQ;AAAA;AAAA,QAEN;AAAA,eAAkB,UAAU,KAAK,oBAAoB,mDAAmD,iBAAiB;AAAA;AAAA,MAC3H;AAAA,IACF;AAAA,EACF;AAEA,EAAAA,OAAM,aAAa,YAAY,MAAM,OAAO;AAC5C,SAAO;AAAA,IACL,MAAM,gBAAgB,QAAQ;AAAA,MAC5B,OAAO,OAAO,SAAS;AAAA,MACvB,IAAI;AAAA,MACJ,MAAM,UAAU,CAAC,MAAM,QAAQ,CAAC;AAAA,IAClC,CAAC;AAAA,EACH;AACF;;;AGxDA,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAI4B;AAE1B,QAAM,kBAAkB,SAAS,WAAW,CAAC,aAAa,SAAS,QAAQ;AAE3E,QAAM,OACJ,MAAM,QAAQ,IAAI,gBAAgB,IAAI,CAAC,aAAa,eAAe,EAAE,QAAQ,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,GAC7G,KAAK;AAEP,QAAM,oBAAoB;AAAA,IACxB;AAAA,IACA,QAAQ;AAAA,IACR,YAAY;AAAA,EACd,CAAC;AAED,SAAO;AACT;;;AC3BA,SAAS,YAAY,oBAAoB,mBAAAC,kBAAiB,6BAAAC,kCAAiC;;;ACD3F;AAAA,EACE,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,eAAiB;AAAA,EACjB,aAAe;AAAA,EACf,SAAW;AAAA,EACX,cAAgB;AAClB;;;ACPA,SAA4C,gBAAgB;AAC5D,SAAS,WAAAC,gBAAe;AAIxB,IAAM,WAAW,KAAK,mBAAW,OAAO;AAExC,eAAsB,YAAY,QAA4E;AAC5G,QAAM,WAAW,MAAMC,SAAQ,QAAQ,EAAE,SAAS,SAAS,CAAC;AAC5D,MAAI,UAAU;AACZ,IAAAC,OAAM,8BAA8B,QAAQ;AAE5C,QAAI,aAAa,SAAS,KAAK,mBAAW,YAAY,IAAI,EAAE,GAAG;AAC7D,cAAQ;AAAA,QACN;AAAA,0CAAmC,QAAQ;AAAA;AAAA,MAC7C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AFbA,IAAMC,YAAW,KAAK,mBAAW,OAAO;AAExC,eAAsB,eAAe,QAAyE;AAC5G,QAAM,mBAAmB,MAAM,YAAY,MAAM;AACjD,MAAI,qBAAqB,QAAW;AAClC,WAAO;AAAA,EACT;AAOA,QAAM,cAAc,OAAO,mBAAW,QAAQ,IAAI,OAAO,mBAAW,QAAQ;AAC5E,QAAM,iBAAiB,MAAM,WAAW,QAAQ,EAAE,SAAS,KAAK,mBAAW,aAAa,GAAG,CAAC;AAC5F,QAAM,YAAY,cAAc;AAChC,MAAI,YAAY,GAAG;AACjB,IAAAC,OAAM,iDAAiD,mBAAW,aAAa;AAC/E,UAAM,QAAQ,MAAMC,iBAAgB,QAAQ;AAAA,MAC1C,OAAO,OAAO,SAAS;AAAA,MACvB,IAAI,KAAK,mBAAW,aAAa;AAAA,MACjC,OAAO;AAAA,IACT,CAAC;AACD,UAAM,aAAa,MAAMC,2BAA0B,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC1E,QAAI,WAAW,WAAW,WAAW;AACnC,cAAQ,MAAM,yCAAyC,UAAU;AACjE,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAAA,EACF;AAGA,EAAAF,OAAM,iCAAiCD,SAAQ;AAC/C,QAAM,WAAW,MAAM,mBAAmB,QAAQ,EAAE,uBAAuB,KAAK,mBAAW,WAAW,GAAG,CAAC,EAAE;AAAA,IAC1G,CAACI,WAAU;AAET,UAAI,OAAOA,MAAK,EAAE,SAAS,+DAA+D,GAAG;AAC3F,gBAAQ;AAAA;AAAA,UAEN;AAAA;AAAA;AAAA;AAAA;AAAA,QACF;AACA,QAAAH,OAAM,4BAA4B;AAClC,eAAOC,iBAAgB,QAAQ;AAAA,UAC7B,OAAO,OAAO,SAAS;AAAA,UACvB,MAAM,KAAK,mBAAW,YAAY;AAAA,QACpC,CAAC;AAAA,MACH;AACA,YAAME;AAAA,IACR;AAAA,EACF;AAEA,QAAM,gBAAgB,MAAMD,2BAA0B,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChF,MAAI,CAAC,cAAc,iBAAiB;AAClC,UAAM,IAAI,MAAM,8EAA8E;AAAA,EAChG;AAEA,MAAI,cAAc,oBAAoBH,WAAU;AAC9C,YAAQ;AAAA,MACN;AAAA,6CAAsC,cAAc,eAAe,kEAAkEA,SAAQ;AAAA,IAC/I;AAAA,EACF;AAEA,SAAO,cAAc;AACvB;;;AGpEA,SAAc,qBAAAK,0BAAyB;AAGhC,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAIQ;AACN,SAAOC,mBAAkB,EAAE,MAAM,iBAAiB,UAAU,KAAK,CAAC;AACpE;;;ACbA,SAAuC,QAAAC,aAA8C;;;ACArF;AAAA,EAEE;AAAA,EAGA;AAAA,EAEA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;;;AChBA,IAAM,8BAA8B;AAAA,EACzC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AD9DA,eAAsB,yBAAyB;AAAA,EAC7C;AAAA,EACA;AACF,GAAsE;AACpE,QAAM,SAAS,oBAAoB,OAAO,CAAC,CAAC;AAC5C,QAAM,gBAAgB,MAAM,YAAY,EAAE,QAAQ,QAAQ,CAAC;AAC3D,QAAM,YAAY;AAAA,IAChB,sBAAsB,cAAc,kBAAkB;AAAA,IACtD,cAAc,UAAU,cAAc,UAAU,IAAI,KAAK;AAAA,IACzD,+BAA+B,cAAc,2BAA2B;AAAA,IACxE,yBAAyB,cAAc,qBAAqB;AAAA,IAC5D,oBAAoB;AAAA,EACtB;AAEA,SAAO,2BAA2B;AAAA,IAChC,GAAG;AAAA,EACL,CAAC;AACH;AASA,eAAe,YAAY,EAAE,SAAS,OAAO,GAAmD;AAE9F,QAAM,mBAAmB;AAAA,IACvB,GAAG;AAAA,IACH,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,sBAAsB;AAAA;AAAA,IAEtB,sBAAsB,OAAO;AAAA,IAC7B,yBAAyB;AAAA,IACzB,+BAA+B;AAAA,EACjC;AAEA,QAAM,eAAe,sBAAsB,gBAAgB;AAC3D,QAAM,iBAAiB,mBAAmB;AAAA,IACxC,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,YAAY;AAAA,EACrB,CAAC;AAED,QAAM,eAAe,OAAO,aAAa,QAAQ,OAAO,cAAc;AACtE,QAAM,wBAAwB,eAAe,CAAC,IAAI,EAAE,CAAC,OAAO,MAAM,GAAG,EAAE,SAAS,yBAAyB,EAAE;AAC3G,QAAM,mBAAmB;AAAA,IACvB;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,MACE,GAAG;AAAA,IACL;AAAA,EACF;AACA,QAAM,0BAA+B,MAAM,QAAQ;AAAA,IACjD,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAED,SAAO,qBAAqB;AAAA,IAC1B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,EACR,CAAC;AACH;;;AE/FA;AAAA,EAME;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,uBAAuB;AAEhC,IAAM,+BAA+B;AAAA,EACnC,gBAAgB;AAAA,IACd,CAAC,SACC,KAAK,SAAS,WAAW,KAAK,SAAS;AAAA,EAC3C;AACF;AAEA,IAAM,0BAA0B,kBAAkB;AAAA,EAChD,KAAK;AAAA,EACL,WAAW;AACb,CAAC;AAEM,SAAS,wBAAwB,YAAiB,SAAyD;AAChH,QAAM,sCAAsC,kBAAkB;AAAA,IAC5D,KAAK;AAAA,EACP,CAAC,EAAE,CAAC;AAEJ,MAAI,aAAsBA;AAC1B,MAAI,eAAe;AAEnB,MAAI,aAAa;AACjB,MAAI,WAAW;AACf,UAAQ,KAAK,QAAQ,CAAC,KAAK,UAAU;AACnC,QAAI,KAAK,OAAO,CAAC,MAAM,wBAAwB,CAAC,GAAG;AAEjD,UAAI,IAAI,OAAO,CAAC,MAAM,YAAY;AAEhC,mBAAW;AACX,qBAAa,IAAI;AAAA,MACnB,WAAW,aAAa,IAAI;AAE1B,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,QAAI,KAAK,OAAO,CAAC,MAAM,qCAAqC;AAE1D,UAAI,IAAI,OAAO,CAAC,MAAM,YAAY;AAEhC,cAAM,aAAa,eAAe;AAAA,UAChC,KAAK;AAAA,UACL,MAAM,IAAI;AAAA,UACV,QAAQ,IAAI;AAAA,QACd,CAAC;AAED,uBAAe,WAAW,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,aAAa,IAAI;AACnB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,QAAM,OAAO,QAAQ,KAAK,MAAM,aAAa,GAAG,QAAQ;AAExD,QAAM,qBAAqB,eAAe;AAAA,IACxC,KAAK;AAAA,IACL,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,IACA,MAAM,QAAQ;AAAA,EAChB,CAAC,EAAE,CAAC;AAEJ,MAAI,YAAiC,mBAAmB,KAAK;AAC7D,cAAY,cAAcA,eAAc,SAAY;AAEpD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,mBAAmB,KAAK;AAAA,IAChC,OAAO,YAAY,mBAAmB,KAAK,KAAK;AAAA,IAChD;AAAA,IACA,eAAe,YAAY,mBAAmB,KAAK,aAAa;AAAA,IAChE,eAAe,YAAY,mBAAmB,KAAK,aAAa;AAAA,IAChE,SAAS,mBAAmB,KAAK;AAAA,IACjC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;AC/FA,SAAgB,UAAU,MAAiB,iBAAiB;AAErD,SAAS,eAAe,SAA0D;AACvF,QAAM,eAAe,SAAS,YAAY,CAAC;AAC3C,QAAM,UAAU,SAAS,KAAK,CAAC;AAE/B,MAAI,cAAc;AAChB,WAAO,UAAU,SAAS,CAAC,UAAU,YAAY,GAAG,KAAK,OAAO,CAAC,CAAC,IAAI,UAAU,YAAY;AAAA,EAC9F;AAEA,MAAI,SAAS;AACX,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;;;AJMO,SAAS,QACd,YACkB;AAClB,SAAQ,CAAC,SAAS;AAChB,UAAM,EAAE,kBAAkB,0BAA0B,yBAAyB,IAC3E,cAAc,qBAAqB,KAAK,KAAK;AAE/C,UAAM,EAAE,SAAS,gBAAgB,GAAG,KAAK,IAAI,iBAAiB,IAAI;AAElE,QAAI,UAAsB;AAC1B,UAAM,oBAAgD,CAAC;AACvD,UAAM,sBAA2E,CAAC;AAElF,WAAO;AAAA,MACL,GAAG;AAAA;AAAA,MAEH,MAAM,QAAQ,KAAmC;AAC/C,YAAI;AACF,cAAI,IAAI,WAAW,eAAe;AAChC,gBAAI,WAAW,KAAM,QAAO;AAC5B,gBAAI,0BAA0B;AAC5B,oBAAM,EAAE,SAAS,gBAAgB,IAAI,yBAAyB,IAAI;AAClE,qBAAQ,UAAU,MAAM,gBAAgB,GAAG;AAAA,YAC7C;AACA,mBAAQ,UAAU,MAAM,eAAe,GAAG;AAAA,UAC5C;AAEA,cAAI,IAAI,WAAW,mBAAmB;AACpC,mBAAO,MAAM,eAAe,EAAE,GAAG,KAAK,QAAQ,sBAAsB,CAAC;AAAA,UACvE;AAEA,cAAI,IAAI,WAAW,YAAY;AAC7B,mBAAO,MAAM,eAAe,EAAE,GAAG,KAAK,QAAQ,eAAe,CAAC;AAAA,UAChE;AAEA,cAAI,IAAI,WAAW,2BAA2B;AAC5C,mBAAO,MAAM,eAAe,EAAE,GAAG,KAAK,QAAQ,8BAA8B,CAAC;AAAA,UAC/E;AAEA,cAAI,IAAI,WAAW,6BAA6B;AAC9C,mBAAO,MAAM,sBAAuB,IAAI,OAAiB,CAAC,CAAC;AAAA,UAC7D;AAEA,cAAI,IAAI,WAAW,yBAAyB;AAC1C,kBAAM,EAAE,YAAY,OAAO,IAAK,MAAM,eAAe;AAAA,cACnD,GAAG;AAAA,cACH,QAAQ;AAAA,YACV,CAAC;AACD,8BAAkB,UAAU,IAAI;AAChC,mBAAO;AAAA,UACT;AAEA,cAAI,IAAI,WAAW,+BAA+B;AAChD,kBAAM,aAAc,IAAI,OAAiB,CAAC;AAC1C,kBAAM,uBAAuB,kBAAkB,UAAU;AACzD,gBAAI,CAAC,sBAAsB;AACzB,oBAAM,IAAI,MAAM,oEAAoE;AAAA,YACtF;AACA,kBAAM,qBAAqB,MAAM,sBAAsB,oBAAoB;AAC3E,mBAAO,sBAAsB,wBAAwB,YAAY,kBAAkB;AAAA,UACrF;AAEA,cAAI,IAAI,WAAW,gCAAgC;AACjD,mBAAO,MAAM,yBAAyB;AAAA,cACpC,SAAS;AAAA,cACT,QAAQ,IAAI;AAAA,YACd,CAAC;AAAA,UACH;AAGA,cACE,IAAI,WAAW,qBACf,IAAI,WAAW,0BACf,IAAI,WAAW,4BACf;AACA,gBAAI,0BAA0B;AAC5B,oBAAM,EAAE,SAAS,gBAAgB,IAAI,yBAAyB,IAAI;AAClE,qBAAO,MAAM,gBAAgB,GAAG;AAAA,YAClC;AACA,mBAAO,MAAM,eAAe,GAAG;AAAA,UACjC;AAEA,iBAAO,MAAM,eAAe,GAAG;AAAA,QACjC,SAAS,GAAG;AACV,kBAAQ,KAAK,4BAA4B,CAAC;AAC1C,gBAAM,iBAAiB;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,eAAe,SAAS,IAAI,MAAM,GAAG;AACvC,gBAAI,0BAA0B;AAC5B,oBAAM,EAAE,SAAS,gBAAgB,IAAI,yBAAyB,IAAI;AAClE,sBAAQ,KAAK,yCAAyC,GAAG;AACzD,qBAAO,gBAAgB,GAAG;AAAA,YAC5B;AAAA,UACF;AACA,cAAI,0BAA0B;AAC5B,kBAAM,EAAE,SAAS,gBAAgB,IAAI,yBAAyB,IAAI;AAClE,oBAAQ,KAAK,qCAAqC,GAAG;AACrD,mBAAO,gBAAgB,GAAG;AAAA,UAC5B;AACA,gBAAM;AAAA,QACR;AAEA,uBAAe,sBAAsB,MAAuD;AAE1F,cAAI,oBAAoB,IAAI,EAAG,QAAO,oBAAoB,IAAI;AAG9D,gBAAM,iBAAkB,MAAM,eAAe;AAAA,YAC3C,GAAG;AAAA,YACH,QAAQ;AAAA,YACR,QAAQ,CAAC,IAAI;AAAA,UACf,CAAC;AACD,cAAI,gBAAgB;AAClB,gCAAoB,IAAI,IAAI;AAC5B,mBAAO;AAAA,UACT;AAEA,cAAI,0BAA0B;AAC5B,kBAAM,EAAE,SAAS,gBAAgB,IAAI,yBAAyB,IAAI;AAClE,kBAAM,UAAW,MAAM,gBAAgB;AAAA,cACrC,GAAG;AAAA,cACH,QAAQ;AAAA,cACR,QAAQ,CAAC,IAAI;AAAA,YACf,CAAC;AACD,gBAAI,SAAS;AACX,kCAAoB,IAAI,IAAI;AAC5B,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,OAA0C;AACtE,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAEA,QAAM,mBAAmB,eAAe,MAAM,QAAQ,OAAO;AAC7D,MAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,QAAM,iBAAiB,MAAM,QAAQ,SAAS,KAAK,CAAC;AACpD,SAAO;AAAA,IACL;AAAA,IACA,0BAA0B,iBAAiBC,MAAK,cAAc,IAAI;AAAA,IAClE,0BAA0BA,MAAK;AAAA,EACjC;AACF;","names":["debug","debug","sendTransaction","waitForTransactionReceipt","getCode","getCode","debug","deployer","debug","sendTransaction","waitForTransactionReceipt","error","getCreate2Address","getCreate2Address","http","zeroAddress","http"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@latticexyz/common",
|
|
3
|
-
"version": "2.2.22-
|
|
3
|
+
"version": "2.2.22-599ea71ff11bf2f1ea15dee14514dbfa301eb977",
|
|
4
4
|
"description": "Common low level logic shared between packages",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -69,11 +69,11 @@
|
|
|
69
69
|
"p-retry": "^5.1.2",
|
|
70
70
|
"prettier": "3.2.5",
|
|
71
71
|
"prettier-plugin-solidity": "1.3.1",
|
|
72
|
-
"@latticexyz/schema-type": "2.2.22-
|
|
72
|
+
"@latticexyz/schema-type": "2.2.22-599ea71ff11bf2f1ea15dee14514dbfa301eb977"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/debug": "^4.1.7",
|
|
76
|
-
"viem": "2.
|
|
76
|
+
"viem": "2.30.6"
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
79
|
"@aws-sdk/client-kms": "3.x",
|