@latticexyz/common 2.2.22-bc1e7cb9cfb39fc8c81201b15f8f5528df778192 → 2.2.22-bc95ea094386f235971f1c5b98a34f41c161999d
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/chunk-CHXZROA7.js +16 -0
- package/dist/chunk-CHXZROA7.js.map +1 -0
- package/dist/{chunk-ETXWXV5T.js → chunk-NFWCLD5I.js} +1 -14
- package/dist/chunk-NFWCLD5I.js.map +1 -0
- package/dist/codegen.js +2 -1
- package/dist/codegen.js.map +1 -1
- package/dist/internal.d.ts +2 -9
- package/dist/internal.js +2 -409
- package/dist/internal.js.map +1 -1
- package/dist/utils.js +4 -2
- package/package.json +3 -3
- package/dist/chunk-ETXWXV5T.js.map +0 -1
package/dist/internal.js
CHANGED
|
@@ -5,9 +5,8 @@ import {
|
|
|
5
5
|
debug
|
|
6
6
|
} from "./chunk-73UWXFXB.js";
|
|
7
7
|
import {
|
|
8
|
-
bigIntMax,
|
|
9
8
|
uniqueBy
|
|
10
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CHXZROA7.js";
|
|
11
10
|
|
|
12
11
|
// src/waitForTransactions.ts
|
|
13
12
|
import { waitForTransactionReceipt } from "viem/actions";
|
|
@@ -202,418 +201,12 @@ function getContractAddress({
|
|
|
202
201
|
}) {
|
|
203
202
|
return getCreate2Address2({ from: deployerAddress, bytecode, salt });
|
|
204
203
|
}
|
|
205
|
-
|
|
206
|
-
// src/transports/methods/estimateUserOperationGas.ts
|
|
207
|
-
import {
|
|
208
|
-
decodeFunctionResult,
|
|
209
|
-
encodeFunctionData,
|
|
210
|
-
zeroAddress
|
|
211
|
-
} from "viem";
|
|
212
|
-
import {
|
|
213
|
-
entryPoint07Address,
|
|
214
|
-
formatUserOperation,
|
|
215
|
-
formatUserOperationRequest,
|
|
216
|
-
toPackedUserOperation
|
|
217
|
-
} from "viem/account-abstraction";
|
|
218
|
-
|
|
219
|
-
// src/transports/entryPointSimulations.ts
|
|
220
|
-
var entryPointSimulationsAbi = [
|
|
221
|
-
{
|
|
222
|
-
inputs: [
|
|
223
|
-
{
|
|
224
|
-
components: [
|
|
225
|
-
{
|
|
226
|
-
internalType: "address",
|
|
227
|
-
name: "sender",
|
|
228
|
-
type: "address"
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
internalType: "uint256",
|
|
232
|
-
name: "nonce",
|
|
233
|
-
type: "uint256"
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
internalType: "bytes",
|
|
237
|
-
name: "initCode",
|
|
238
|
-
type: "bytes"
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
internalType: "bytes",
|
|
242
|
-
name: "callData",
|
|
243
|
-
type: "bytes"
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
internalType: "bytes32",
|
|
247
|
-
name: "accountGasLimits",
|
|
248
|
-
type: "bytes32"
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
internalType: "uint256",
|
|
252
|
-
name: "preVerificationGas",
|
|
253
|
-
type: "uint256"
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
internalType: "bytes32",
|
|
257
|
-
name: "gasFees",
|
|
258
|
-
type: "bytes32"
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
internalType: "bytes",
|
|
262
|
-
name: "paymasterAndData",
|
|
263
|
-
type: "bytes"
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
internalType: "bytes",
|
|
267
|
-
name: "signature",
|
|
268
|
-
type: "bytes"
|
|
269
|
-
}
|
|
270
|
-
],
|
|
271
|
-
internalType: "struct PackedUserOperation",
|
|
272
|
-
name: "op",
|
|
273
|
-
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
|
-
}
|
|
285
|
-
],
|
|
286
|
-
name: "simulateHandleOp",
|
|
287
|
-
outputs: [
|
|
288
|
-
{
|
|
289
|
-
components: [
|
|
290
|
-
{
|
|
291
|
-
internalType: "uint256",
|
|
292
|
-
name: "preOpGas",
|
|
293
|
-
type: "uint256"
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
internalType: "uint256",
|
|
297
|
-
name: "paid",
|
|
298
|
-
type: "uint256"
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
internalType: "uint256",
|
|
302
|
-
name: "accountValidationData",
|
|
303
|
-
type: "uint256"
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
internalType: "uint256",
|
|
307
|
-
name: "paymasterValidationData",
|
|
308
|
-
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
|
-
}
|
|
320
|
-
],
|
|
321
|
-
internalType: "struct IEntryPointSimulations.ExecutionResult",
|
|
322
|
-
name: "",
|
|
323
|
-
type: "tuple"
|
|
324
|
-
}
|
|
325
|
-
],
|
|
326
|
-
stateMutability: "nonpayable",
|
|
327
|
-
type: "function"
|
|
328
|
-
}
|
|
329
|
-
];
|
|
330
|
-
var entryPointSimulationsDeployedBytecode = (
|
|
331
|
-
// eslint-disable-next-line max-len
|
|
332
|
-
"0x60806040526004361061016d5760003560e01c8063765e827f116100cb578063b760faf91161007f578063c3bce00911610059578063c3bce009146105ac578063dbed18e0146105d9578063fc7e286d146105f957600080fd5b8063b760faf914610564578063bb9fe6bf14610577578063c23a5cea1461058c57600080fd5b8063957122ab116100b0578063957122ab146104f757806397b2dcb9146105175780639b249f691461054457600080fd5b8063765e827f146104b7578063850aaf62146104d757600080fd5b8063205c28781161012257806335567e1a1161010757806335567e1a146102905780635287ce121461032557806370a082311461047457600080fd5b8063205c28781461025057806322cdde4c1461027057600080fd5b80630396cb60116101535780630396cb60146101e55780630bd28e3b146101f85780631b2e01b81461021857600080fd5b806242dc531461018257806301ffc9a7146101b557600080fd5b3661017d5761017b336106cb565b005b600080fd5b34801561018e57600080fd5b506101a261019d36600461423e565b6106ec565b6040519081526020015b60405180910390f35b3480156101c157600080fd5b506101d56101d0366004614304565b6108b7565b60405190151581526020016101ac565b61017b6101f3366004614346565b610a34565b34801561020457600080fd5b5061017b610213366004614394565b610dca565b34801561022457600080fd5b506101a26102333660046143af565b600160209081526000928352604080842090915290825290205481565b34801561025c57600080fd5b5061017b61026b3660046143e4565b610e12565b34801561027c57600080fd5b506101a261028b366004614429565b610fbc565b34801561029c57600080fd5b506101a26102ab3660046143af565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff8516845290915290819020549082901b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000161792915050565b34801561033157600080fd5b5061041261034036600461445e565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff1660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046dffffffffffffffffffffffffffff16928101929092526f01000000000000000000000000000000810463ffffffff166060830152730100000000000000000000000000000000000000900465ffffffffffff16608082015290565b6040516101ac9190600060a082019050825182526020830151151560208301526dffffffffffffffffffffffffffff604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561048057600080fd5b506101a261048f36600461445e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156104c357600080fd5b5061017b6104d23660046144c0565b610ffe565b3480156104e357600080fd5b5061017b6104f2366004614517565b61117b565b34801561050357600080fd5b5061017b61051236600461456c565b611220565b34801561052357600080fd5b506105376105323660046145f1565b611378565b6040516101ac91906146c1565b34801561055057600080fd5b5061017b61055f366004614710565b6114c4565b61017b61057236600461445e565b6106cb565b34801561058357600080fd5b5061017b6115af565b34801561059857600080fd5b5061017b6105a736600461445e565b61178f565b3480156105b857600080fd5b506105cc6105c7366004614429565b611a7c565b6040516101ac9190614752565b3480156105e557600080fd5b5061017b6105f43660046144c0565b611d80565b34801561060557600080fd5b5061068161061436600461445e565b6000602081905290815260409020805460019091015460ff81169061010081046dffffffffffffffffffffffffffff16906f01000000000000000000000000000000810463ffffffff1690730100000000000000000000000000000000000000900465ffffffffffff1685565b6040805195865293151560208601526dffffffffffffffffffffffffffff9092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a0016101ac565b60015b60058110156106df576001016106ce565b6106e88261222c565b5050565b6000805a9050333014610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b8451606081015160a082015181016127100160405a603f028161078557610785614832565b0410156107b6577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b8751600090156108575760006107d3846000015160008c86612282565b9050806108555760006107e761080061229a565b80519091501561084f57846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610846929190614861565b60405180910390a35b60019250505b505b600088608001515a86030190506108a7828a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506122c6915050565b955050505050505b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f60fc6b6e00000000000000000000000000000000000000000000000000000000148061094a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f915074d800000000000000000000000000000000000000000000000000000000145b8061099657507fffffffff0000000000000000000000000000000000000000000000000000000082167fcf28ef9700000000000000000000000000000000000000000000000000000000145b806109e257507fffffffff0000000000000000000000000000000000000000000000000000000082167f3e84f02100000000000000000000000000000000000000000000000000000000145b80610a2e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b33600090815260208190526040902063ffffffff8216610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152606401610757565b600181015463ffffffff6f0100000000000000000000000000000090910481169083161015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610757565b6001810154600090610b6390349061010090046dffffffffffffffffffffffffffff166148a9565b905060008111610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152606401610757565b6dffffffffffffffffffffffffffff811115610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152606401610757565b6040805160a08101825283548152600160208083018281526dffffffffffffffffffffffffffff86811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16730100000000000000000000000000000000000000027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff979094166f0100000000000000000000000000000002969096167fffffffffffffff00000000000000000000ffffffffffffffffffffffffffffff91909516610100027fffffffffffffffffffffffffffffffffff0000000000000000000000000000ff991515999099167fffffffffffffffffffffffffffffffffff00000000000000000000000000000090941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b33600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff851684529091528120805491610e0a836148bc565b919050555050565b3360009081526020819052604090208054821115610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152606401610757565b8054610e999083906148f4565b81556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610f46576040519150601f19603f3d011682016040523d82523d6000602084013e610f4b565b606091505b5050905080610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152606401610757565b50505050565b6000610fc7826124c2565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b6110066124db565b8160008167ffffffffffffffff81111561102257611022613fd1565b60405190808252806020026020018201604052801561105b57816020015b611048613e25565b8152602001906001900390816110405790505b50905060005b828110156110d457600082828151811061107d5761107d614907565b602002602001015190506000806110b8848a8a878181106110a0576110a0614907565b90506020028101906110b29190614936565b8561251c565b915091506110c9848383600061277b565b505050600101611061565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b8381101561115e576111528188888481811061112157611121614907565b90506020028101906111339190614936565b85848151811061114557611145614907565b60200260200101516129d0565b90910190600101611103565b506111698482612da6565b5050506111766001600255565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516111a5929190614974565b600060405180830381855af49150503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b509150915081816040517f99410554000000000000000000000000000000000000000000000000000000008152600401610757929190614984565b83158015611243575073ffffffffffffffffffffffffffffffffffffffff83163b155b156112aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006044820152606401610757565b6014811061133c5760006112c1601482848661499f565b6112ca916149c9565b60601c9050803b60000361133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610757565b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610757565b6113b36040518060c0016040528060008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6113bb6124db565b6113c3613e25565b6113cc86612eed565b6000806113db6000898561251c565b9150915060006113ed60008a866129d0565b90506000606073ffffffffffffffffffffffffffffffffffffffff8a161561147f578973ffffffffffffffffffffffffffffffffffffffff168989604051611436929190614974565b6000604051808303816000865af19150503d8060008114611473576040519150601f19603f3d011682016040523d82523d6000602084013e611478565b606091505b5090925090505b6040518060c001604052808760800151815260200184815260200186815260200185815260200183151581526020018281525096505050505050506108af6001600255565b60006114e560065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3684846040518363ffffffff1660e01b815260040161151f929190614a5a565b6020604051808303816000875af115801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190614a6e565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909150602401610757565b336000908152602081905260408120600181015490916f0100000000000000000000000000000090910463ffffffff169003611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152606401610757565b600181015460ff166116b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152606401610757565b60018101546000906116e0906f01000000000000000000000000000000900463ffffffff1642614a8b565b6001830180547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001673010000000000000000000000000000000000000065ffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046dffffffffffffffffffffffffffff168061181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152606401610757565b6001820154730100000000000000000000000000000000000000900465ffffffffffff166118a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610757565b60018201544273010000000000000000000000000000000000000090910465ffffffffffff161115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610757565b6001820180547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a0c576040519150601f19603f3d011682016040523d82523d6000602084013e611a11565b606091505b5050905080610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152606401610757565b611a84613ed7565b611a8c613e25565b611a9583612eed565b600080611aa46000868561251c565b845160e001516040805180820182526000808252602080830182815273ffffffffffffffffffffffffffffffffffffffff95861683528282528483206001908101546dffffffffffffffffffffffffffff6101008083048216885263ffffffff6f010000000000000000000000000000009384900481169095528e51518951808b018b5288815280880189815291909b168852878752898820909401549081049091168952049091169052835180850190945281845283015293955091935090366000611b7460408b018b614ab1565b909250905060006014821015611b8b576000611ba6565b611b9960146000848661499f565b611ba2916149c9565b60601c5b6040805180820182526000808252602080830182815273ffffffffffffffffffffffffffffffffffffffff86168352908290529290206001015461010081046dffffffffffffffffffffffffffff1682526f01000000000000000000000000000000900463ffffffff169091529091509350505050600085905060006040518060a001604052808960800151815260200189604001518152602001888152602001878152602001611c588a6060015190565b905260408051808201825260035473ffffffffffffffffffffffffffffffffffffffff908116825282518084019093526004548352600554602084810191909152820192909252919250831615801590611cc9575060018373ffffffffffffffffffffffffffffffffffffffff1614155b15611d4d5760408051808201825273ffffffffffffffffffffffffffffffffffffffff851680825282518084018452600080825260208083018281529382528181529490206001015461010081046dffffffffffffffffffffffffffff1682526f01000000000000000000000000000000900463ffffffff16909152909182015290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b611d886124db565b816000805b82811015611f7a5736868683818110611da857611da8614907565b9050602002810190611dba9190614b16565b9050366000611dc98380614b4a565b90925090506000611de0604085016020860161445e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff821601611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152606401610757565b73ffffffffffffffffffffffffffffffffffffffff811615611f5e5773ffffffffffffffffffffffffffffffffffffffff8116632dd811338484611ec86040890189614ab1565b6040518563ffffffff1660e01b8152600401611ee79493929190614d02565b60006040518083038186803b158015611eff57600080fd5b505afa925050508015611f10575060015b611f5e576040517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610757565b611f6882876148a9565b95505060019093019250611d8d915050565b5060008167ffffffffffffffff811115611f9657611f96613fd1565b604051908082528060200260200182016040528015611fcf57816020015b611fbc613e25565b815260200190600190039081611fb45790505b5090506000805b848110156120ac5736888883818110611ff157611ff1614907565b90506020028101906120039190614b16565b90503660006120128380614b4a565b90925090506000612029604085016020860161445e565b90508160005b8181101561209a57600089898151811061204b5761204b614907565b6020026020010151905060008061206e8b8989878181106110a0576110a0614907565b9150915061207e8483838961277b565b8a612088816148bc565b9b50506001909301925061202f915050565b505060019094019350611fd692505050565b506040517fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a150600080805b858110156121e757368989838181106120f7576120f7614907565b90506020028101906121099190614b16565b905061211b604082016020830161445e565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a236600061216a8380614b4a565b90925090508060005b818110156121d6576121b58885858481811061219157612191614907565b90506020028101906121a39190614936565b8b8b8151811061114557611145614907565b6121bf90886148a9565b9650876121cb816148bc565b985050600101612173565b5050600190930192506120dc915050565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a261221d8682612da6565b50505050506111766001600255565b600061223882346130db565b90508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161178391815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156122a85750815b604051602082018101604052818152816000602083013e9392505050565b6000805a8551909150600090816122dc8261311b565b60e083015190915073ffffffffffffffffffffffffffffffffffffffff81166123085782519350612403565b80935060008851111561240357868202955060028a600281111561232e5761232e614db9565b146124035760a08301516040517f7c627b2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831691637c627b2191612390908e908d908c908990600401614de8565b600060405180830381600088803b1580156123aa57600080fd5b5087f1935050505080156123bc575060015b6124035760006123cd61080061229a565b9050806040517fad7954bc0000000000000000000000000000000000000000000000000000000081526004016107579190614e4b565b5a60408a0151908603979097019682880296508681101561247f5760028b600281111561243257612432614db9565b03612455578096506124438a613145565b6124508a6000898b6131a1565b6124b4565b7fdeadaa510000000000000000000000000000000000000000000000000000000060005260206000fd5b86810361248c86826130db565b506000808d60028111156124a2576124a2614db9565b1490506124b18c828b8d6131a1565b50505b505050505050949350505050565b60006124cd82613229565b805190602001209050919050565b6002805403612516576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028055565b60008060005a845190915061253186826132ee565b61253a86610fbc565b6020860152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff8111156125e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152606401610757565b60006126138460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b90506126228a8a8a8487613439565b96506126368460000151856020015161367a565b6126a557896040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a8603111561271a57896040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60e084015160609073ffffffffffffffffffffffffffffffffffffffff161561274e576127498b8b8b856136d5565b975090505b604089018290528060608a015260a08a01355a870301896080018181525050505050505050935093915050565b6000806127878561392c565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461282957856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526014908201527f41413234207369676e6174757265206572726f72000000000000000000000000606082015260800190565b801561289a57856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b60006128a58561392c565b9250905073ffffffffffffffffffffffffffffffffffffffff81161561293057866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526014908201527f41413334207369676e6174757265206572726f72000000000000000000000000606082015260800190565b81156129c757866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560608201527f6500000000000000000000000000000000000000000000000000000000000000608082015260a00190565b50505050505050565b6000805a905060006129e3846060015190565b60405190915060009036826129fb60608a018a614ab1565b9150915060606000826003811115612a1257843591505b507f72288ed1000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612b525760008b8b60200151604051602401612a75929190614e5e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8dd7712f000000000000000000000000000000000000000000000000000000001790525190915030906242dc5390612b089084908f908d90602401614f44565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050925050612bc9565b3073ffffffffffffffffffffffffffffffffffffffff166242dc5385858d8b604051602401612b849493929190614f84565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505091505b602060008351602085016000305af19550600051985084604052505050505080612d9c5760003d80602003612c045760206000803e60005191505b507fdeaddead000000000000000000000000000000000000000000000000000000008103612c9757876040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052600f908201527f41413935206f7574206f66206761730000000000000000000000000000000000606082015260800190565b7fdeadaa51000000000000000000000000000000000000000000000000000000008103612d0157600086608001515a612cd090876148f4565b612cda91906148a9565b6040880151909150612ceb88613145565b612cf888600083856131a1565b9550612d9a9050565b8551805160208089015192015173ffffffffffffffffffffffffffffffffffffffff90911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479290612d5561080061229a565b604051612d63929190614861565b60405180910390a3600086608001515a612d7d90876148f4565b612d8791906148a9565b9050612d9660028886846122c6565b9550505b505b5050509392505050565b73ffffffffffffffffffffffffffffffffffffffff8216612e23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152606401610757565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612e7d576040519150601f19603f3d011682016040523d82523d6000602084013e612e82565b606091505b5050905080611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610757565b612fed6040517fd69400000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152600090603701604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905550565b3063957122ab6130006040840184614ab1565b61300d602086018661445e565b61301a60e0870187614ab1565b6040518663ffffffff1660e01b815260040161303a959493929190614fbb565b60006040518083038186803b15801561305257600080fd5b505afa925050508015613063575060015b6130d85761306f61500a565b806308c379a0036130cc5750613083615026565b8061308e57506130ce565b8051156106e8576000816040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757929190614861565b505b3d6000803e3d6000fd5b50565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054829061310f9085906148a9565b91829055509392505050565b61010081015161012082015160009190808203613139575092915050565b6108af8248830161397f565b805180516020808401519281015160405190815273ffffffffffffffffffffffffffffffffffffffff90921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e0810151815160208088015193015160405173ffffffffffffffffffffffffffffffffffffffff9384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f9161321b9189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006132496132446040870187614ab1565b613997565b9050600061325d6132446060880188614ab1565b9050608086013560a087013560c0880135600061328061324460e08c018c614ab1565b6040805173ffffffffffffffffffffffffffffffffffffffff9a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b6132fb602083018361445e565b73ffffffffffffffffffffffffffffffffffffffff168152602082810135908201526fffffffffffffffffffffffffffffffff6080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061337460e0850185614ab1565b9092509050801561341e5760348110156133ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610757565b6133f482826139aa565b60a0860152608085015273ffffffffffffffffffffffffffffffffffffffff1660e0840152610fb6565b600060e084018190526080840181905260a084015250505050565b8251805160009190613458888761345360408b018b614ab1565b613a1b565b60e0820151600073ffffffffffffffffffffffffffffffffffffffff82166134b65773ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548781116134af578088036134b2565b60005b9150505b60208801516040517f19822f7c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516916319822f7c918991613512918e919087906004016150ce565b60206040518083038160008887f19350505050801561356c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613569918101906150f3565b60015b6135b0578961357c61080061229a565b6040517f65c8fd4d00000000000000000000000000000000000000000000000000000000815260040161075792919061510c565b945073ffffffffffffffffffffffffffffffffffffffff821661366d5773ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020805480891115613667578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832084821c808552925282208054849167ffffffffffffffff83169190856136c7836148bc565b909155501495945050505050565b60606000805a855160e081015173ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604090208054939450919290919087811015613784578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b87810382600001819055506000846080015190508373ffffffffffffffffffffffffffffffffffffffff166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016137da939291906150ce565b60006040518083038160008887f19350505050801561383957506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526138369190810190615159565b60015b61387d578b61384961080061229a565b6040517f65c8fd4d0000000000000000000000000000000000000000000000000000000081526004016107579291906151e5565b9098509650805a8703111561391d578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107579181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760608201527f61734c696d697400000000000000000000000000000000000000000000000000608082015260a00190565b50505050505094509492505050565b6000808260000361394257506000928392509050565b600061394d84613da7565b9050806040015165ffffffffffff164211806139745750806020015165ffffffffffff1642105b905194909350915050565b600081831061398e5781613990565b825b9392505050565b6000604051828085833790209392505050565b600080806139bb601482868861499f565b6139c4916149c9565b60601c6139d560246014878961499f565b6139de91615232565b60801c6139ef60346024888a61499f565b6139f891615232565b9194506fffffffffffffffffffffffffffffffff16925060801c90509250925092565b8015610fb65782515173ffffffffffffffffffffffffffffffffffffffff81163b15613aac57846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b6000613acd60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516040015186866040518463ffffffff1660e01b8152600401613b10929190614a5a565b60206040518083038160008887f1158015613b2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b549190614a6e565b905073ffffffffffffffffffffffffffffffffffffffff8116613bdc57856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610757918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613c7957856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161075791815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b8073ffffffffffffffffffffffffffffffffffffffff163b600003613d0257856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161075791815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000613d11601482868861499f565b613d1a916149c9565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051613d9692919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003613de3575065ffffffffffff5b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6040518060a00160405280613eb2604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a00160405280613f146040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001613f36604051806040016040528060008152602001600081525090565b8152602001613f58604051806040016040528060008152602001600081525090565b8152602001613f7a604051806040016040528060008152602001600081525090565b8152602001613f87613f8c565b905290565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001613f87604051806040016040528060008152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810181811067ffffffffffffffff8211171561402057614020613fd1565b60405250565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561406a5761406a613fd1565b6040525050565b604051610140810167ffffffffffffffff8111828210171561409557614095613fd1565b60405290565b600067ffffffffffffffff8211156140b5576140b5613fd1565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff811681146130d857600080fd5b803561410e816140e1565b919050565b60008183036101c081121561412757600080fd5b60405161413381614000565b8092506101408083121561414657600080fd5b61414e614071565b925061415985614103565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015260a085013560a084015260c085013560c08401526141a360e08601614103565b60e084015261010085810135908401526101208086013590840152918152908301356020820152610160830135604082015261018083013560608201526101a090920135608090920191909152919050565b60008083601f84011261420757600080fd5b50813567ffffffffffffffff81111561421f57600080fd5b60208301915083602082850101111561423757600080fd5b9250929050565b600080600080610200858703121561425557600080fd5b843567ffffffffffffffff8082111561426d57600080fd5b818701915087601f83011261428157600080fd5b813561428c8161409b565b6040516142998282614026565b8281528a60208487010111156142ae57600080fd5b826020860160208301376000602084830101528098505050506142d48860208901614113565b94506101e08701359150808211156142eb57600080fd5b506142f8878288016141f5565b95989497509550505050565b60006020828403121561431657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461399057600080fd5b60006020828403121561435857600080fd5b813563ffffffff8116811461399057600080fd5b803577ffffffffffffffffffffffffffffffffffffffffffffffff8116811461410e57600080fd5b6000602082840312156143a657600080fd5b6139908261436c565b600080604083850312156143c257600080fd5b82356143cd816140e1565b91506143db6020840161436c565b90509250929050565b600080604083850312156143f757600080fd5b8235614402816140e1565b946020939093013593505050565b6000610120828403121561442357600080fd5b50919050565b60006020828403121561443b57600080fd5b813567ffffffffffffffff81111561445257600080fd5b6108af84828501614410565b60006020828403121561447057600080fd5b8135613990816140e1565b60008083601f84011261448d57600080fd5b50813567ffffffffffffffff8111156144a557600080fd5b6020830191508360208260051b850101111561423757600080fd5b6000806000604084860312156144d557600080fd5b833567ffffffffffffffff8111156144ec57600080fd5b6144f88682870161447b565b909450925050602084013561450c816140e1565b809150509250925092565b60008060006040848603121561452c57600080fd5b8335614537816140e1565b9250602084013567ffffffffffffffff81111561455357600080fd5b61455f868287016141f5565b9497909650939450505050565b60008060008060006060868803121561458457600080fd5b853567ffffffffffffffff8082111561459c57600080fd5b6145a889838a016141f5565b9097509550602088013591506145bd826140e1565b909350604087013590808211156145d357600080fd5b506145e0888289016141f5565b969995985093965092949392505050565b6000806000806060858703121561460757600080fd5b843567ffffffffffffffff8082111561461f57600080fd5b61462b88838901614410565b95506020870135915061463d826140e1565b909350604086013590808211156142eb57600080fd5b60005b8381101561466e578181015183820152602001614656565b50506000910152565b6000815180845261468f816020860160208601614653565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526080820151151560a0820152600060a083015160c0808401526108af60e0840182614677565b6000806020838503121561472357600080fd5b823567ffffffffffffffff81111561473a57600080fd5b614746858286016141f5565b90969095509350505050565b602080825282516101408383015280516101608401529081015161018083015260408101516101a083015260608101516101c08301526080015160a06101e08301526000906147a5610200840182614677565b905060208401516147c3604085018280518252602090810151910152565b506040840151805160808581019190915260209182015160a08601526060860151805160c087015282015160e0860152850151805173ffffffffffffffffffffffffffffffffffffffff1661010086015280820151805161012087015290910151610140850152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8281526040602082015260006108af6040830184614677565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a2e57610a2e61487a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148ed576148ed61487a565b5060010190565b81810381811115610a2e57610a2e61487a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261496a57600080fd5b9190910192915050565b8183823760009101908152919050565b82151581526040602082015260006108af6040830184614677565b600080858511156149af57600080fd5b838611156149bc57600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015614a095780818660140360031b1b83161692505b505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006108af602083018486614a11565b600060208284031215614a8057600080fd5b8151613990816140e1565b65ffffffffffff818116838216019080821115614aaa57614aaa61487a565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ae657600080fd5b83018035915067ffffffffffffffff821115614b0157600080fd5b60200191503681900382131561423757600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261496a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614b7f57600080fd5b83018035915067ffffffffffffffff821115614b9a57600080fd5b6020019150600581901b360382131561423757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614be757600080fd5b830160208101925035905067ffffffffffffffff811115614c0757600080fd5b80360382131561423757600080fd5b6000610120614c4284614c2885614103565b73ffffffffffffffffffffffffffffffffffffffff169052565b60208301356020850152614c596040840184614bb2565b826040870152614c6c8387018284614a11565b92505050614c7d6060840184614bb2565b8583036060870152614c90838284614a11565b925050506080830135608085015260a083013560a085015260c083013560c0850152614cbf60e0840184614bb2565b85830360e0870152614cd2838284614a11565b92505050610100614ce581850185614bb2565b86840383880152614cf7848284614a11565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b89811015614da2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087860301845282357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18c3603018112614d80578283fd5b614d8c868d8301614c16565b9550506020938401939290920191600101614d20565b505050508281036020840152614cf7818587614a11565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060038610614e21577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b85825260806020830152614e386080830186614677565b6040830194909452506060015292915050565b6020815260006139906020830184614677565b604081526000614e716040830185614c16565b90508260208301529392505050565b8051805173ffffffffffffffffffffffffffffffffffffffff1683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e0810151614eff60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010081810151908401526101209081015190830152602081015161014083015260408101516101608301526060810151610180830152608001516101a090910152565b6000610200808352614f5881840187614677565b9050614f676020840186614e80565b8281036101e0840152614f7a8185614677565b9695505050505050565b6000610200808352614f998184018789614a11565b9050614fa86020840186614e80565b8281036101e0840152614cf78185614677565b606081526000614fcf606083018789614a11565b73ffffffffffffffffffffffffffffffffffffffff861660208401528281036040840152614ffe818587614a11565b98975050505050505050565b600060033d11156150235760046000803e5060005160e01c5b90565b600060443d10156150345790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561508257505050505090565b828501915081518181111561509a5750505050505090565b843d87010160208285010111156150b45750505050505090565b6150c360208286010187614026565b509095945050505050565b6060815260006150e16060830186614c16565b60208301949094525060400152919050565b60006020828403121561510557600080fd5b5051919050565b82815260606020820152600d60608201527f4141323320726576657274656400000000000000000000000000000000000000608082015260a0604082015260006108af60a0830184614677565b6000806040838503121561516c57600080fd5b825167ffffffffffffffff81111561518357600080fd5b8301601f8101851361519457600080fd5b805161519f8161409b565b6040516151ac8282614026565b8281528760208486010111156151c157600080fd5b6151d2836020830160208701614653565b6020969096015195979596505050505050565b82815260606020820152600d60608201527f4141333320726576657274656400000000000000000000000000000000000000608082015260a0604082015260006108af60a0830184614677565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008135818116916010851015614a095760109490940360031b84901b169092169291505056fea2646970667358221220d91a0462bc7bb528fdf3ea5e6747c873aa8d3c3eb82ba653aef7f1948cad609264736f6c63430008170033"
|
|
333
|
-
);
|
|
334
|
-
|
|
335
|
-
// src/transports/methods/estimateUserOperationGas.ts
|
|
336
|
-
async function estimateUserOperationGas({
|
|
337
|
-
request,
|
|
338
|
-
params
|
|
339
|
-
}) {
|
|
340
|
-
const userOp = formatUserOperation(params[0]);
|
|
341
|
-
const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;
|
|
342
|
-
const [simulationResult, simulationResultWithPaymaster] = await Promise.all([
|
|
343
|
-
simulateHandleOp({ userOp, removePaymaster: hasPaymaster, request }),
|
|
344
|
-
hasPaymaster ? simulateHandleOp({ userOp, request }) : void 0
|
|
345
|
-
]);
|
|
346
|
-
const gasEstimates = getGasEstimates({ userOp, simulationResult, simulationResultWithPaymaster });
|
|
347
|
-
return formatUserOperationRequest({
|
|
348
|
-
...gasEstimates
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
async function simulateHandleOp({
|
|
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
|
-
} : {};
|
|
372
|
-
const simulationUserOp = {
|
|
373
|
-
...userOp,
|
|
374
|
-
preVerificationGas: 0n,
|
|
375
|
-
callGasLimit: 10000000n,
|
|
376
|
-
verificationGasLimit: 10000000n,
|
|
377
|
-
// https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117
|
|
378
|
-
maxPriorityFeePerGas: userOp.maxFeePerGas,
|
|
379
|
-
...paymasterGasLimits
|
|
380
|
-
};
|
|
381
|
-
const packedUserOp = toPackedUserOperation(simulationUserOp);
|
|
382
|
-
const simulationData = encodeFunctionData({
|
|
383
|
-
abi: entryPointSimulationsAbi,
|
|
384
|
-
functionName: "simulateHandleOp",
|
|
385
|
-
args: [packedUserOp, zeroAddress, "0x"]
|
|
386
|
-
});
|
|
387
|
-
const senderBalanceOverride = removePaymaster ? { [userOp.sender]: { balance: "0xFFFFFFFFFFFFFFFFFFFF" } } : {};
|
|
388
|
-
const simulationParams = [
|
|
389
|
-
{
|
|
390
|
-
to: entryPoint07Address,
|
|
391
|
-
data: simulationData
|
|
392
|
-
},
|
|
393
|
-
"pending",
|
|
394
|
-
{
|
|
395
|
-
[entryPoint07Address]: { code: entryPointSimulationsDeployedBytecode },
|
|
396
|
-
...senderBalanceOverride
|
|
397
|
-
}
|
|
398
|
-
];
|
|
399
|
-
const encodedSimulationResult = await request({
|
|
400
|
-
method: "wiresaw_call",
|
|
401
|
-
params: simulationParams
|
|
402
|
-
});
|
|
403
|
-
return decodeFunctionResult({
|
|
404
|
-
abi: entryPointSimulationsAbi,
|
|
405
|
-
functionName: "simulateHandleOp",
|
|
406
|
-
data: encodedSimulationResult
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
function getGasEstimates({
|
|
410
|
-
userOp,
|
|
411
|
-
simulationResult,
|
|
412
|
-
simulationResultWithPaymaster
|
|
413
|
-
}) {
|
|
414
|
-
const hasPaymaster = simulationResultWithPaymaster != null;
|
|
415
|
-
const verificationGas = hasPaymaster ? simulationResultWithPaymaster.preOpGas : simulationResult.preOpGas;
|
|
416
|
-
const paymasterVerificationGas = hasPaymaster ? simulationResultWithPaymaster.preOpGas - simulationResult.preOpGas : 0n;
|
|
417
|
-
const callGas = simulationResult.paid / userOp.maxFeePerGas - simulationResult.preOpGas;
|
|
418
|
-
const paymasterPostOpGas = hasPaymaster ? simulationResultWithPaymaster.paid / userOp.maxFeePerGas - simulationResultWithPaymaster.preOpGas - callGas : 0n;
|
|
419
|
-
const verificationGasLimit = verificationGas * 2n;
|
|
420
|
-
const callGasLimit = bigIntMax(callGas * 2n, 9000n);
|
|
421
|
-
const paymasterVerificationGasLimit = paymasterVerificationGas * 2n;
|
|
422
|
-
const paymasterPostOpGasLimit = paymasterPostOpGas * 2n;
|
|
423
|
-
return {
|
|
424
|
-
verificationGasLimit,
|
|
425
|
-
callGasLimit,
|
|
426
|
-
paymasterVerificationGasLimit,
|
|
427
|
-
paymasterPostOpGasLimit,
|
|
428
|
-
preVerificationGas: 20000n
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
// src/transports/methods/getUserOperationReceipt.ts
|
|
433
|
-
import {
|
|
434
|
-
decodeEventLog,
|
|
435
|
-
encodeEventTopics,
|
|
436
|
-
numberToHex,
|
|
437
|
-
parseEventLogs,
|
|
438
|
-
zeroAddress as zeroAddress2
|
|
439
|
-
} from "viem";
|
|
440
|
-
import { entryPoint07Abi } from "viem/account-abstraction";
|
|
441
|
-
var userOperationRevertReasonAbi = [
|
|
442
|
-
entryPoint07Abi.find(
|
|
443
|
-
(item) => item.type === "event" && item.name === "UserOperationRevertReason"
|
|
444
|
-
)
|
|
445
|
-
];
|
|
446
|
-
var userOperationEventTopic = encodeEventTopics({
|
|
447
|
-
abi: entryPoint07Abi,
|
|
448
|
-
eventName: "UserOperationEvent"
|
|
449
|
-
});
|
|
450
|
-
function getUserOperationReceipt(userOpHash, receipt) {
|
|
451
|
-
const userOperationRevertReasonTopicEvent = encodeEventTopics({
|
|
452
|
-
abi: userOperationRevertReasonAbi
|
|
453
|
-
})[0];
|
|
454
|
-
let entryPoint = zeroAddress2;
|
|
455
|
-
let revertReason = void 0;
|
|
456
|
-
let startIndex = -1;
|
|
457
|
-
let endIndex = -1;
|
|
458
|
-
receipt.logs.forEach((log, index) => {
|
|
459
|
-
if (log?.topics[0] === userOperationEventTopic[0]) {
|
|
460
|
-
if (log.topics[1] === userOpHash) {
|
|
461
|
-
endIndex = index;
|
|
462
|
-
entryPoint = log.address;
|
|
463
|
-
} else if (endIndex === -1) {
|
|
464
|
-
startIndex = index;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
if (log?.topics[0] === userOperationRevertReasonTopicEvent) {
|
|
468
|
-
if (log.topics[1] === userOpHash) {
|
|
469
|
-
const decodedLog = decodeEventLog({
|
|
470
|
-
abi: userOperationRevertReasonAbi,
|
|
471
|
-
data: log.data,
|
|
472
|
-
topics: log.topics
|
|
473
|
-
});
|
|
474
|
-
revertReason = decodedLog.args.revertReason;
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
});
|
|
478
|
-
if (endIndex === -1) {
|
|
479
|
-
throw new Error("fatal: no UserOperationEvent in logs");
|
|
480
|
-
}
|
|
481
|
-
const logs = receipt.logs.slice(startIndex + 1, endIndex);
|
|
482
|
-
const userOperationEvent = parseEventLogs({
|
|
483
|
-
abi: entryPoint07Abi,
|
|
484
|
-
eventName: "UserOperationEvent",
|
|
485
|
-
args: {
|
|
486
|
-
userOpHash
|
|
487
|
-
},
|
|
488
|
-
logs: receipt.logs
|
|
489
|
-
})[0];
|
|
490
|
-
let paymaster = userOperationEvent.args.paymaster;
|
|
491
|
-
paymaster = paymaster === zeroAddress2 ? void 0 : paymaster;
|
|
492
|
-
return {
|
|
493
|
-
userOpHash,
|
|
494
|
-
entryPoint,
|
|
495
|
-
sender: userOperationEvent.args.sender,
|
|
496
|
-
nonce: numberToHex(userOperationEvent.args.nonce),
|
|
497
|
-
paymaster,
|
|
498
|
-
actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),
|
|
499
|
-
actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),
|
|
500
|
-
success: userOperationEvent.args.success,
|
|
501
|
-
reason: revertReason,
|
|
502
|
-
logs,
|
|
503
|
-
receipt
|
|
504
|
-
};
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
// src/transports/wiresaw.ts
|
|
508
|
-
function wiresaw(transport) {
|
|
509
|
-
return (opts) => {
|
|
510
|
-
const { request: originalRequest, ...rest } = transport.wiresaw(opts);
|
|
511
|
-
let chainId = null;
|
|
512
|
-
const transactionHashes = {};
|
|
513
|
-
const transactionReceipts = {};
|
|
514
|
-
return {
|
|
515
|
-
...rest,
|
|
516
|
-
// TODO: type `request` so we don't have to cast
|
|
517
|
-
async request(req) {
|
|
518
|
-
if (req.method === "eth_chainId") {
|
|
519
|
-
if (chainId != null) return chainId;
|
|
520
|
-
if (transport.fallbackEth) {
|
|
521
|
-
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
522
|
-
return chainId = await fallbackRequest(req);
|
|
523
|
-
}
|
|
524
|
-
return chainId = await originalRequest(req);
|
|
525
|
-
}
|
|
526
|
-
if (req.method === "eth_estimateGas") {
|
|
527
|
-
return originalRequest({ ...req, method: "wiresaw_estimateGas" });
|
|
528
|
-
}
|
|
529
|
-
if (req.method === "eth_call") {
|
|
530
|
-
return originalRequest({ ...req, method: "wiresaw_call" });
|
|
531
|
-
}
|
|
532
|
-
if (req.method === "eth_getTransactionCount") {
|
|
533
|
-
return originalRequest({ ...req, method: "wiresaw_getTransactionCount" });
|
|
534
|
-
}
|
|
535
|
-
if (req.method === "eth_getTransactionReceipt") {
|
|
536
|
-
return getTransactionReceipt(req.params[0]);
|
|
537
|
-
}
|
|
538
|
-
if (req.method === "eth_sendUserOperation") {
|
|
539
|
-
const { userOpHash, txHash } = await originalRequest({
|
|
540
|
-
...req,
|
|
541
|
-
method: "wiresaw_sendUserOperation"
|
|
542
|
-
});
|
|
543
|
-
transactionHashes[userOpHash] = txHash;
|
|
544
|
-
return userOpHash;
|
|
545
|
-
}
|
|
546
|
-
if (req.method === "eth_getUserOperationReceipt") {
|
|
547
|
-
const userOpHash = req.params[0];
|
|
548
|
-
const knownTransactionHash = transactionHashes[userOpHash];
|
|
549
|
-
if (knownTransactionHash) {
|
|
550
|
-
const transactionReceipt = await getTransactionReceipt(knownTransactionHash);
|
|
551
|
-
if (transactionReceipt) {
|
|
552
|
-
return getUserOperationReceipt(userOpHash, transactionReceipt);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
if (transport.fallbackBundler) {
|
|
556
|
-
const { request: fallbackRequest } = transport.fallbackBundler(opts);
|
|
557
|
-
return fallbackRequest(req);
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
if (req.method === "eth_estimateUserOperationGas") {
|
|
561
|
-
try {
|
|
562
|
-
return await estimateUserOperationGas({
|
|
563
|
-
request: originalRequest,
|
|
564
|
-
params: req.params
|
|
565
|
-
});
|
|
566
|
-
} catch (e) {
|
|
567
|
-
console.warn("[wiresaw] estimating user operation gas failed, falling back to bundler", e);
|
|
568
|
-
}
|
|
569
|
-
if (transport.fallbackBundler) {
|
|
570
|
-
const { request: fallbackRequest } = transport.fallbackBundler(opts);
|
|
571
|
-
return fallbackRequest(req);
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
if (req.method === "eth_blockNumber" || req.method === "eth_getBlockByNumber" || req.method === "eth_maxPriorityFeePerGas") {
|
|
575
|
-
if (transport.fallbackEth) {
|
|
576
|
-
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
577
|
-
return fallbackRequest(req);
|
|
578
|
-
}
|
|
579
|
-
return originalRequest(req);
|
|
580
|
-
}
|
|
581
|
-
return originalRequest(req);
|
|
582
|
-
async function getTransactionReceipt(hash) {
|
|
583
|
-
if (transactionReceipts[hash]) return transactionReceipts[hash];
|
|
584
|
-
const pendingReceipt = await originalRequest({
|
|
585
|
-
...req,
|
|
586
|
-
method: "wiresaw_getTransactionReceipt",
|
|
587
|
-
params: [hash]
|
|
588
|
-
});
|
|
589
|
-
if (pendingReceipt) {
|
|
590
|
-
transactionReceipts[hash] = pendingReceipt;
|
|
591
|
-
return pendingReceipt;
|
|
592
|
-
}
|
|
593
|
-
if (transport.fallbackEth) {
|
|
594
|
-
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
595
|
-
const receipt = await fallbackRequest({
|
|
596
|
-
...req,
|
|
597
|
-
method: "eth_getTransactionReceipt",
|
|
598
|
-
params: [hash]
|
|
599
|
-
});
|
|
600
|
-
if (receipt) {
|
|
601
|
-
transactionReceipts[hash] = receipt;
|
|
602
|
-
return receipt;
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
};
|
|
608
|
-
};
|
|
609
|
-
}
|
|
610
204
|
export {
|
|
611
205
|
ensureContract,
|
|
612
206
|
ensureContractsDeployed,
|
|
613
207
|
ensureDeployer,
|
|
614
208
|
getContractAddress,
|
|
615
209
|
getDeployer,
|
|
616
|
-
waitForTransactions
|
|
617
|
-
wiresaw
|
|
210
|
+
waitForTransactions
|
|
618
211
|
};
|
|
619
212
|
//# sourceMappingURL=internal.js.map
|