diff --git a/.gitignore b/.gitignore
index cfe668b2..1ec91788 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
# Compiler files
cache/
out/
-dist/
-types/
# Ignores development broadcast logs
!/broadcast
@@ -15,21 +13,17 @@ docs/
# Dotenv file
.env
-# coverage files
+lcov.info
coverage/
-node_modules
-.env
-coverage
-coverage.json
-typechain
-typechain-types
-# Hardhat files
-cache
-artifacts
-artifacts-selected
+# node
+node_modules/
-cache_hardhat
+# hardhat
+artifacts/
+cache_hardhat/
+typechain-types/
-lcov.info
-settings.json
\ No newline at end of file
+# zerodev orchestra
+log/
+.envrc
diff --git a/.gitmodules b/.gitmodules
index b97d7759..323c6bdb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,15 +1,9 @@
[submodule "lib/forge-std"]
path = lib/forge-std
url = https://github.com/foundry-rs/forge-std
-[submodule "lib/I4337"]
- path = lib/I4337
- url = https://github.com/leekt/I4337
-[submodule "lib/FreshCryptoLib"]
- path = lib/FreshCryptoLib
- url = https://github.com/rdubois-crypto/FreshCryptoLib
-[submodule "lib/p256-verifier"]
- path = lib/p256-verifier
- url = https://github.com/daimo-eth/p256-verifier
[submodule "lib/solady"]
path = lib/solady
url = https://github.com/vectorized/solady
+[submodule "lib/ExcessivelySafeCall"]
+ path = lib/ExcessivelySafeCall
+ url = https://github.com/nomad-xyz/ExcessivelySafeCall
diff --git a/README.md b/README.md
index f2bb9b3e..1e90b362 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,6 @@ Kernel is supported by all major AA SDKs, including:
- [ZeroDev](https://docs.zerodev.app/)
- [Permissionless.js](https://docs.pimlico.io/permissionless/how-to/accounts/use-kernel-account)
- [UserOp.js](https://docs.stackup.sh/docs/useropjs-presets#kernel)
-- [Account Kit](https://github.com/alchemyplatform/aa-sdk/tree/main/packages/accounts/src/kernel-zerodev)
## Resources
@@ -36,6 +35,18 @@ MIT
## Addresses
+
+v3.0
+
+| Name | Address |
+| -------------------- | ------------------------------------------ |
+| Meta Factory | 0xd703aaE79538628d27099B8c4f621bE4CCd142d5 |
+| Factory | 0x6723b44Abeec4E71eBE3232BD5B455805baDD22f |
+| Kernel | 0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27 |
+| ECDSA Validator | 0x8104e3Ad430EA6d354d013A6789fDFc71E671c43 |
+
+
+
v2.4
diff --git a/audits/chainlight_v3_0.pdf b/audits/chainlight_v3_0.pdf
new file mode 100644
index 00000000..ff56c270
Binary files /dev/null and b/audits/chainlight_v3_0.pdf differ
diff --git a/audits/kalos_v3_plugins.pdf b/audits/kalos_v3_plugins.pdf
new file mode 100644
index 00000000..4f053f2b
Binary files /dev/null and b/audits/kalos_v3_plugins.pdf differ
diff --git a/broadcast/Deploy.s.sol/1/run-1712893238.json b/broadcast/Deploy.s.sol/1/run-1712893238.json
new file mode 100644
index 00000000..d8b1b9b3
--- /dev/null
+++ b/broadcast/Deploy.s.sol/1/run-1712893238.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x31",
+ "chainId": "0x1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x32",
+ "chainId": "0x1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x864783",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c",
+ "transactionIndex": "0x38",
+ "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a",
+ "blockNumber": "0x12ba2aa",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x2f0dbd9a2",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xf4cd4a",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a",
+ "blockNumber": "0x12ba2aa",
+ "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8",
+ "transactionIndex": "0x9e",
+ "logIndex": "0x19d",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8",
+ "transactionIndex": "0x9e",
+ "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a",
+ "blockNumber": "0x12ba2aa",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x2f0dbd9a2",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712893238,
+ "chain": 1,
+ "commit": "1ae967d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/1/run-latest.json b/broadcast/Deploy.s.sol/1/run-latest.json
new file mode 100644
index 00000000..d8b1b9b3
--- /dev/null
+++ b/broadcast/Deploy.s.sol/1/run-latest.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x31",
+ "chainId": "0x1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x32",
+ "chainId": "0x1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x864783",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c",
+ "transactionIndex": "0x38",
+ "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a",
+ "blockNumber": "0x12ba2aa",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x2f0dbd9a2",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xf4cd4a",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a",
+ "blockNumber": "0x12ba2aa",
+ "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8",
+ "transactionIndex": "0x9e",
+ "logIndex": "0x19d",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8",
+ "transactionIndex": "0x9e",
+ "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a",
+ "blockNumber": "0x12ba2aa",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x2f0dbd9a2",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712893238,
+ "chain": 1,
+ "commit": "1ae967d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/10/run-1712897446.json b/broadcast/Deploy.s.sol/10/run-1712897446.json
new file mode 100644
index 00000000..8d5f9471
--- /dev/null
+++ b/broadcast/Deploy.s.sol/10/run-1712897446.json
@@ -0,0 +1,113 @@
+{
+ "transactions": [
+ {
+ "hash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x16",
+ "chainId": "0xa",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x17",
+ "chainId": "0xa",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xcd191",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea",
+ "transactionIndex": "0x4",
+ "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db",
+ "blockNumber": "0x71271f3",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x3a2dbfd",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x7be79ca9e",
+ "l1GasPrice": "0x28bcf798f",
+ "l1GasUsed": "0x8ac"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xdbf2c",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db",
+ "blockNumber": "0x71271f3",
+ "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0",
+ "transactionIndex": "0x5",
+ "logIndex": "0x19",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0",
+ "transactionIndex": "0x5",
+ "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db",
+ "blockNumber": "0x71271f3",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x3a2dbfd",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x805ea93a6",
+ "l1GasPrice": "0x28bcf798f",
+ "l1GasUsed": "0x8fc"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712897446,
+ "chain": 10,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/10/run-latest.json b/broadcast/Deploy.s.sol/10/run-latest.json
new file mode 100644
index 00000000..8d5f9471
--- /dev/null
+++ b/broadcast/Deploy.s.sol/10/run-latest.json
@@ -0,0 +1,113 @@
+{
+ "transactions": [
+ {
+ "hash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x16",
+ "chainId": "0xa",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x17",
+ "chainId": "0xa",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xcd191",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea",
+ "transactionIndex": "0x4",
+ "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db",
+ "blockNumber": "0x71271f3",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x3a2dbfd",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x7be79ca9e",
+ "l1GasPrice": "0x28bcf798f",
+ "l1GasUsed": "0x8ac"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xdbf2c",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db",
+ "blockNumber": "0x71271f3",
+ "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0",
+ "transactionIndex": "0x5",
+ "logIndex": "0x19",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0",
+ "transactionIndex": "0x5",
+ "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db",
+ "blockNumber": "0x71271f3",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x3a2dbfd",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x805ea93a6",
+ "l1GasPrice": "0x28bcf798f",
+ "l1GasUsed": "0x8fc"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712897446,
+ "chain": 10,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/100/run-1712924751.json b/broadcast/Deploy.s.sol/100/run-1712924751.json
new file mode 100644
index 00000000..562729cc
--- /dev/null
+++ b/broadcast/Deploy.s.sol/100/run-1712924751.json
@@ -0,0 +1,126 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x11",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x12",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x13",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x14",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x15",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924751,
+ "chain": 100,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/100/run-1712924764.json b/broadcast/Deploy.s.sol/100/run-1712924764.json
new file mode 100644
index 00000000..42b4cb7a
--- /dev/null
+++ b/broadcast/Deploy.s.sol/100/run-1712924764.json
@@ -0,0 +1,126 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x11",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x12",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x13",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x14",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x15",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924764,
+ "chain": 100,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/100/run-1712924828.json b/broadcast/Deploy.s.sol/100/run-1712924828.json
new file mode 100644
index 00000000..fa8dcfb1
--- /dev/null
+++ b/broadcast/Deploy.s.sol/100/run-1712924828.json
@@ -0,0 +1,126 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x11",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x12",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x13",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x14",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x15",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924828,
+ "chain": 100,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/100/run-1712925554.json b/broadcast/Deploy.s.sol/100/run-1712925554.json
new file mode 100644
index 00000000..e80df368
--- /dev/null
+++ b/broadcast/Deploy.s.sol/100/run-1712925554.json
@@ -0,0 +1,126 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x11",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x12",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x13",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x14",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x15",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925554,
+ "chain": 100,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/100/run-latest.json b/broadcast/Deploy.s.sol/100/run-latest.json
new file mode 100644
index 00000000..e80df368
--- /dev/null
+++ b/broadcast/Deploy.s.sol/100/run-latest.json
@@ -0,0 +1,126 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x11",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x12",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x13",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x14",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x15",
+ "chainId": "0x64",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925554,
+ "chain": 100,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1710948578.json b/broadcast/Deploy.s.sol/11155111/run-1710948578.json
new file mode 100644
index 00000000..5bd2ac26
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1710948578.json
@@ -0,0 +1,36 @@
+{
+ "transactions": [
+ {
+ "hash": "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x079D5D8A3275A230AF743cB59c341Ff74B82488D",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee7ca",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200522a3803806200522a833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051614fd7620002536000396000818161058801528181610cf60152818161102c015281816113380152818161154e0152818161168101528181611bcb0152611fb60152600061326b01526000613325015260006132ff015260006132af0152600061328c0152614fd76000f3fe60806040526004361061016a5760003560e01c806390ef8862116100d1578063b101dd3a1161008a578063e0dfd36511610064578063e0dfd36514610660578063e9ae5c531461068d578063f1f7f0f9146106a0578063f2dc691d146106ce576101a9565b8063b101dd3a146105ea578063d03c79141461061f578063d691c96414610640576101a9565b806390ef8862146104ed5780639517e29f146105175780639cfd7cff1461052a578063a65d69d414610576578063a71763a8146105c2578063adb610a3146105d5576101a9565b806357b3a5f41161012357806357b3a5f4146104005780636e6fa0c614610447578063721e67f41461046757806383d423591461049f57806384b0196e146104b25780638dd7712f146104da576101a9565b8063112d3a7d146102f457806312af322c146103295780631626ba7e1461034957806319822f7c146103825780631f1b92e3146103a3578063364d7a70146103b6576101a9565b366101a957604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101c06000356001600160e01b0319166106ee565b6040805180820190915281546001600160a01b039081168083526001909301541660208201529150600090606090610280576000806101fd610728565b90925090506001600160a01b03821661022957604051635a93724d60e01b815260040160405180910390fd5b6001600160a01b03811660011461026a5760006102488260003661077d565b9050610253836107ff565b90955093506102648282878761084e565b50610279565b610273826107ff565b90945092505b50506102dd565b82516060906001600160a01b03166001146102a65783516102a39060003661077d565b90505b6102b684602001516000366108c4565b855191945092506001600160a01b03166001146102db5783516102db9082858561084e565b505b816102ea57805160208201fd5b805160208201f35b005b34801561030057600080fd5b5061031461030f3660046143b1565b6108f3565b60405190151581526020015b60405180910390f35b34801561033557600080fd5b506102f2610344366004614424565b6109ed565b34801561035557600080fd5b506103696103643660046144b6565b610b47565b6040516001600160e01b03199091168152602001610320565b61039561039036600461451a565b610ce9565b604051908152602001610320565b6102f26103b1366004614567565b611005565b3480156103c257600080fd5b506103d66103d136600461458d565b6111ec565b60408051825163ffffffff1681526020928301516001600160a01b03169281019290925201610320565b34801561040c57600080fd5b5061042061041b3660046145be565b611255565b6040805182516001600160a01b039081168252602093840151169281019290925201610320565b34801561045357600080fd5b506103146104623660046145db565b61129f565b34801561047357600080fd5b50610487610482366004614612565b6112e8565b60405190516001600160a01b03168152602001610320565b6102f26104ad36600461462f565b61131e565b3480156104be57600080fd5b506104c76114e0565b60405161032097969594939291906146b8565b6102f26104e8366004614751565b611543565b3480156104f957600080fd5b5061050261164a565b60405163ffffffff9091168152602001610320565b6102f26105253660046143b1565b611667565b34801561053657600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d626574610000000000602082015290516103209190614795565b34801561058257600080fd5b506105aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610320565b6102f26105d03660046143b1565b611bb1565b3480156105e157600080fd5b50610502611ddb565b3480156105f657600080fd5b506105ff611df8565b604080516001600160a01b03938416815292909116602083015201610320565b34801561062b57600080fd5b5061031461063a3660046147a8565b50600190565b61065361064e3660046144b6565b611e0b565b60405161032091906147c1565b34801561066c57600080fd5b5061068061067b36600461458d565b611eb7565b6040516103209190614825565b6102f261069b3660046144b6565b611f9c565b3480156106ac57600080fd5b506106b5612115565b6040516001600160581b03199091168152602001610320565b3480156106da57600080fd5b506103146106e93660046147a8565b612128565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3d6020526040902090565b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b547f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3c546001600160a01b0391821692911690565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107b0903390879087906004016148d2565b6000604051808303816000875af11580156107cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f7919081019061498d565b949350505050565b6000606060408051368101909152366000823760408051601481019091523360601b90526000803660140183875afa92505060405190503d8152602081013d6000823e3d810160405250915091565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da9061087a908690600401614795565b6020604051808303816000875af1158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd91906149ff565b5050505050565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b60008460010361094457610905612148565b600101600061091a8660581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205463ffffffff16151590506107f7565b8460020361096a5760006109578561216c565b546001600160a01b0316141590506107f7565b8460030361099c57600061097c610728565b509050846001600160a01b0316816001600160a01b0316149150506107f7565b846006036109e2576001600160a01b0384166109cd6109bf600460008688614a21565b6109c891614a4b565b6106ee565b600101546001600160a01b03161490506107f7565b506000949350505050565b60006109f7612148565b805490915060581b6001600160581b03191615610a515760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a7957604051631a0a9b9f60e21b815260040160405180910390fd5b86610a8881600160f81b6121a5565b8015610a9d5750610a9d81600160f91b6121a5565b15610abb576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610b028982898989896121b8565b8254600160a81b900463ffffffff16836015610b1d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b600080610b52612148565b90506000366000610b6387876123e3565b925092509250610b7a610b738490565b6000612451565b15610b8757835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610bd157604051631a0a9b9f60e21b815260040160405180910390fd5b610bdf83600160f81b612451565b15610c79576000610bf08460581c90565b9050806001600160a01b031663f551e2ee33610c0b8c612463565b86866040518563ffffffff1660e01b8152600401610c2c9493929190614ab2565b602060405180830381865afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d9190614ae4565b95505050505050610ce2565b6000610c858460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610ccc57604051635b71057960e01b815260040160405180910390fd5b610cd982338c87876124b9565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d34576040516348f5c3ed60e01b815260040160405180910390fd5b6000610d3e612148565b90506000806000610d5288602001356125b9565b91945092509050610d64826000612451565b15610d705750825460581b5b610d7c83828a8a6125e7565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610dd29084906121a5565b8015610df057508454815163ffffffff600160c81b90920482169116105b15610e0e57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610e3a57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610f0257610e778460006121a5565b8015610edf57506001600160581b031983166000908152600287016020526040812090610ea760608d018d614b01565b610eb691600491600091614a21565b610ebf91614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610efd57604051631a0a9b9f60e21b815260040160405180910390fd5b610fe8565b610f0d8460006121a5565b8015610f7557506001600160581b031983166000908152600287016020526040812090610f3d60608d018d614b01565b610f4c91600891600491614a21565b610f5591614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f9357604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610fa860608c018c614b01565b610fb791600491600091614a21565b610fc091614a4b565b6001600160e01b03191614610fe85760405163dbbb044b60e01b815260040160405180910390fd5b8715610ff857343434348b335af1505b5050505050509392505050565b600061101f611012612148565b546001600160a81b031690565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061105a5750333014155b156111df5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110ff903390859036906004016148d2565b6000604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611146919081019061498d565b9050611151836128ae565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061117d908490600401614795565b6020604051808303816000875af115801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c091906149ff565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b6111e8826128ae565b5050565b6040805180820190915260008082526020820152611208612148565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b6040805180820190915260008082526020820152611272826106ee565b6040805180820190915281546001600160a01b039081168252600190920154909116602082015292915050565b60006112a9612148565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff1690505b92915050565b6040805160208101909152600081526113008261216c565b604080516020810190915290546001600160a01b0316815292915050565b600061132b611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906113665750333014155b156114d55760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d391906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061140b903390859036906004016148d2565b6000604051808303816000875af115801561142a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611452919081019061498d565b905061145f85858561294c565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6020604051808303816000875af11580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce91906149ff565b50506111c0565b6111c084848461294c565b600f60f81b6060806000808083611531604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158c576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b0316600181146115d6576115d3816115c06060870187614b01565b6115ce916004908290614a21565b61077d565b91505b6000806115fd306115ea6060890189614b01565b6115f8916004908290614a21565b6108c4565b90925090506001600160a01b0383166001146116245761161f8385848461084e565b611642565b816116425760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b6000611654612148565b54600160c81b900463ffffffff16919050565b6000611674611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906116af5750333014155b15611a065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611754903390859036906004016148d2565b6000604051808303816000875af1158015611773573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179b919081019061498d565b9050856001036118785760006117af612148565b905060006117c38760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016117f56014848a8c614a21565b6117fe91614b47565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356118328686868686866121b8565b8654600160a81b900463ffffffff1687601561184d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050611990565b856002036118d2576014848101358501603481810192918201359181880135880191820191810135906118c9908a906118b49060008b8d614a21565b6118bd91614b47565b60601c86868686612a10565b50505050611990565b85600303611923576014848101358501603481810192918201359181880135880191820191810135906118c9908a9061190e9060008b8d614a21565b61191791614b47565b60601c86868686612b21565b856006036119775761197261193c600460008688614a21565b61194591614a4b565b8661195460186004888a614a21565b61195d91614b47565b60601c61196d876018818b614a21565b612c58565b611990565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906119bc908490600401614795565b6020604051808303816000875af11580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff91906149ff565b50506108bd565b84600103611ae1576000611a18612148565b90506000611a2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611a5e601484898b614a21565b611a6791614b47565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611a9b8686868686866121b8565b8654600160a81b900463ffffffff16876015611ab683614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050506108bd565b84600203611b2657601483810135840160348181019291820135918187013587019182019181013590611b1d9089906118b49060008a8c614a21565b505050506108bd565b84600303611b6257601483810135840160348181019291820135918187013587019182019181013590611b1d90899061190e9060008a8c614a21565b8460060361197757611bac611b7b600460008587614a21565b611b8491614a4b565b85611b93601860048789614a21565b611b9c91614b47565b60601c61196d866018818a614a21565b6108bd565b6000611bbe611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611bf95750333014155b15611d745760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6691906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611c9e903390859036906004016148d2565b6000604051808303816000875af1158015611cbd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ce5919081019061498d565b604051638a91b0e360e01b81529091506001600160a01b03861690638a91b0e390611d169087908790600401614b7a565b600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b5050604051630b9dfbed60e11b81526001600160a01b038516925063173bf7da91506119bc908490600401614795565b604051638a91b0e360e01b81526001600160a01b03851690638a91b0e390611da29086908690600401614b7a565b600060405180830381600087803b158015611dbc57600080fd5b505af1158015611dd0573d6000803e3d6000fd5b505050505050505050565b6000611de5612148565b54600160a81b900463ffffffff16919050565b600080611e03610728565b915091509091565b60606000611e183361216c565b546001600160a01b0316905080611e425760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b038216600114611e6457611e618260003661077d565b90505b611e6f868686612cde565b92506001600160a01b038216600114611eae57611eae8282600186604051602001611e9a91906147c1565b60405160208183030381529060405261084e565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b611ee0612148565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b03168184015260018201805485518186028101860187528181529295939493860193830182828015611f8b57602002820191906000526020600020905b815460501b69ffffffffffffffffffff19168152600190910190602001808311611f66575b505050505081525050915050919050565b6000611fa9611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611fe45750333014155b1561210a5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205191906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90612089903390859036906004016148d2565b6000604051808303816000875af11580156120a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d0919081019061498d565b90506120dd858585612cde565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6108bd848484612cde565b600061211f612148565b5460581b919050565b6000600882101561213b57506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006121c2612148565b60208701519091506001600160a01b03166121df57600160208701525b85518154600160a81b900463ffffffff9081169116141580612227575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b1561224557604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff90921691909117939093179055146123055785602001516001600160a01b0316636d61fe7084846040518363ffffffff1660e01b81526004016122d2929190614b7a565b600060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b505050505b8661231481600160f81b612451565b1561238e5760006123258960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612356908a908a90600401614b7a565b600060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b50505050506123d9565b61239c81600160f91b612451565b156123c05760006123ad8960081b90565b90506123ba818888612f0a565b506123d9565b6040516361c4e91b60e11b815260040160405180910390fd5b5050505050505050565b813536600060f883901c8015612409576001811461241e576002811461242f5760206000fd5b60009350600186019250600186039150612449565b601586019250601585039150612449565b6001600160d81b0319841693506005860192506005850391505b509250925092565b6001600160f81b031990811691161490565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906112e2906060015b60405160208183030381529060405280519060200120613269565b60008060003660006124ce8a8a8a8a8a613381565b93509350935093506000806124e28561348d565b50915091508165ffffffffffff1642108061250457508065ffffffffffff1642115b1561252057506001600160e01b031995506125b0945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d6125448e612463565b88886040518663ffffffff1660e01b8152600401612566959493929190614b8e565b602060405180830381865afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ae4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c1660011981016125df576001600160d81b0319821691505b509193909250565b6000806125f2612148565b905060006125ff85614c18565b9050366000612612610100880188614b01565b909250905061262589600160f81b612451565b1561274e576000638dd7712f60e01b61264160608a018a614b01565b61265091600491600091614a21565b61265991614a4b565b6001600160e01b03191614612692576126756060890189614b01565b61268491600491600091614a21565b61268d91614a4b565b6126b7565b61269f6060890189614b01565b6126ae91600891600491614a21565b6126b791614a4b565b90506126d189826126cc6101008c018c614b01565b6134c0565b604080516020601f8401819004810282018101909252828152939950919550935084908490819084018382808284376000920191909152505050506101008501528454600160a81b900463ffffffff1685601561272d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b8761275d81600160f81b612451565b156127ec576127e5866127708b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b815260040161279d929190614dad565b6020604051808303816000875af11580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614dcf565b613692565b95506128a1565b60006127f88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b161561283e576040516314b9743f60e01b815260040160405180910390fd5b60008061284d83888888613750565b9150915061285b8983613692565b985061289b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b815260040161279d93929190614de8565b98505050505b5050505050949350505050565b60006128b8612148565b805490915063ffffffff600160c81b9091048116908316116128ed57604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b90910490911610156111e857805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612956612148565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b031916905590508361299481600160f81b612451565b156108bd5760006129a58660581c90565b604051638a91b0e360e01b81529091506001600160a01b03821690638a91b0e3906129d69088908890600401614b7a565b600060405180830381600087803b1580156129f057600080fd5b505af1158015612a04573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038516612a2357600194505b6000612a2e8761216c565b80546001600160a01b0319166001600160a01b038881169190911782556040516306d61fe760e41b8152919250881690636d61fe7090612a749088908890600401614b7a565b600060405180830381600087803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b505050506001600160a01b038616600114612b18576040516306d61fe760e41b81526001600160a01b03871690636d61fe7090612ae59086908690600401614b7a565b600060405180830381600087803b158015612aff57600080fd5b505af1158015612b13573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038516612b3457600194505b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b80546001600160a01b0319166001600160a01b03881690811782556040516306d61fe760e41b8152829190636d61fe7090612b969089908990600401614b7a565b600060405180830381600087803b158015612bb057600080fd5b505af1158015612bc4573d6000803e3d6000fd5b50505050600182810180546001600160a01b0319166001600160a01b038a16908117909155146123d9576040516306d61fe760e41b81526001600160a01b03881690636d61fe7090612c1c9087908790600401614b7a565b600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038316612c6b57600192505b6000612c76866106ee565b80546001600160a01b038087166001600160a01b03199283168117845560018085018054938b16939094169290921790925591925014611642576040516306d61fe760e41b81526001600160a01b03851690636d61fe70906129d69086908690600401614b7a565b606083600881901b612cf482600160f81b612451565b15612d7e5784358501602081019035612d0e836000612451565b15612d2457612d1d8282613a44565b9450612d77565b612d3283600160f81b612451565b15612d4157612d1d8282613b14565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a48565b5050611eae565b612d89826000612451565b15612eb757600080366000612d9e8989613c41565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081612dbd5790505096506000612de08682612451565b15612e1457612df185858585613c92565b88600081518110612e0457612e04614e11565b6020026020010181905250612ead565b612e2286600160f81b612451565b15612d4157612e3385858585613cc8565b89600081518110612e4657612e46614e11565b6020908102919091010152905080612ead577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7600089600081518110612e8e57612e8e614e11565b6020026020010151604051612ea4929190614e27565b60405180910390a15b5050505050611eae565b612ec9826001600160f81b0319612451565b15612d41576000612edd6014828789614a21565b612ee691614b47565b60601c9050366000612efb876014818b614a21565b91509150612ead8383836108c4565b6000612f14612148565b9050823583016020810190358060fe811180612f2e575081155b15612f4c5760405163b62d956d60e01b815260040160405180910390fd5b60005b612f5a600184614e40565b8110156130e4576001600160e01b0319881660009081526003860160205260409020600101848483818110612f9157612f91614e11565b9050602002810190612fa39190614b01565b612fb291601691600091614a21565b612fbb91614e53565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055838382818110612ffa57612ffa614e11565b905060200281019061300c9190614b01565b61301b91601691600291614a21565b61302491614b47565b60601c636d61fe706001600160e01b03198a1686868581811061304957613049614e11565b905060200281019061305b9190614b01565b613069916016908290614a21565b60405160200161307b93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016130a69190614795565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505060019092019150612f4f9050565b50600083836130f4600182614e40565b81811061310357613103614e11565b90506020028101906131159190614b01565b61312491601691600291614a21565b61312d91614b47565b6001600160e01b031989166000908152600387016020526040902080546201000060609390931c92830262010000600160b01b031990911617905590508383613177600182614e40565b81811061318657613186614e11565b90506020028101906131989190614b01565b6131a791600291600091614a21565b6131b091614e9e565b6001600160e01b0319891660008181526003880160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709086866131fd600182614e40565b81811061320c5761320c614e11565b905060200281019061321e9190614b01565b61322c916016908290614a21565b60405160200161323e93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401612c1c9190614795565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141661335c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613390612148565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a90529091506133fa81838a8a613cf9565b8787600081811061340d5761340d614e11565b9091013560f81c60ff1490506134365760405163b32eeb6960e01b815260040160405180910390fd5b613443876001818b614a21565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016134b25765ffffffffffff92505b508360d01c92509193909250565b6000366000806134ce612148565b905060003660006134e18b8b8b8b613f7d565b8654929550909350915060581b60006134fe82600160f81b612451565b1561358a578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906135419030908a908a908a90600401614ab2565b602060405180830381865afa15801561355e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135829190614ae4565b915050613640565b61359882600160f91b612451565b156123c057855460601b60006135b18230898989613381565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf906135fa906001600160e01b031986169030908c908c908c90600401614b8e565b602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b9190614ae4565b925050505b630b135d3f60e11b6001600160e01b0319821614613671576040516362467c7760e11b815260040160405180910390fd5b50969b60948a0135909901603481019b506014013599505050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146136c65760019250613748565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161370b5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680613729575065ffffffffffff60a01b5b808218908211021880613742575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061375d612148565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015613988576000806137bb8484815481106137a3576137a3614e11565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106137d4576137d4614e11565b919091013560f81c91505083810361387b5760006137f6600960018c8e614a21565b6137ff91614ecc565b60c01c90508a60098b6138128483614efa565b9261381f93929190614a21565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d01528a8a613866836009614efa565b613871928290614a21565b9a509a50506138b5565b838160ff16101561389f57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b831660000361397d576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b81526004016138fd929190614f0d565b6020604051808303816000875af115801561391c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139409190614dcf565b9050806001600160a01b0381161561396e57604051631f24c1fb60e11b815260048101879052602401610a48565b6139788a83613692565b995050505b505050600101613782565b508585600081811061399c5761399c614e11565b9091013560f81c60ff1490506139c55760405163b32eeb6960e01b815260040160405180910390fd5b6139d28560018189614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b606081806001600160401b03811115613a5f57613a5f6148f7565b604051908082528060200260200182016040528015613a9257816020015b6060815260200190600190039081613a7d5790505b50915060005b818110156137485736858583818110613ab357613ab3614e11565b9050602002810190613ac59190614f26565b9050613aee613ad76020830183614612565b6020830135613ae96040850185614b01565b613c92565b848381518110613b0057613b00614e11565b602090810291909101015250600101613a98565b606081806001600160401b03811115613b2f57613b2f6148f7565b604051908082528060200260200182016040528015613b6257816020015b6060815260200190600190039081613b4d5790505b50915060005b818110156137485736858583818110613b8357613b83614e11565b9050602002810190613b959190614f26565b90506000613bc0613ba96020840184614612565b6020840135613bbb6040860186614b01565b613cc8565b868581518110613bd257613bd2614e11565b6020908102919091010152905080613c37577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110613c1857613c18614e11565b6020026020010151604051613c2e929190614e27565b60405180910390a15b5050600101613b68565b6000803681613c536014828789614a21565b613c5c91614b47565b60601c9350613c6f603460148789614a21565b613c7891614f46565b9250613c878560348189614a21565b949793965094505050565b60405181838237600038838387895af1613caf573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b815481101561164257613d3b8282815481106137a3576137a3614e11565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081613d6957613d69614e11565b919091013560f81c8088528290039050613e1d57613d8b600960018587614a21565b613d9491614ecc565b60c01c6020870181905284906009908590613daf9083614efa565b92613dbc93929190614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152602086015184908490613e09906009614efa565b613e14928290614a21565b93509350613e89565b855160ff16811115613e4257604051630760bdcf60e11b815260040160405180910390fd5b613e4f6000808587614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003613f755760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694613ef0946001600160e01b0319909216939092600401614f64565b602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190614dcf565b9050806001600160a01b03811615613f5f57604051631f24c1fb60e11b815260048101849052602401610a48565b613f6d886040015183613692565b604089015250505b600101613d1d565b60003660008036600036600036600080613f988f8e8e614101565b9750975097509750975097509750975060748d013560348e0101995060208a03359850613fc98f89898989896121b8565b600482106140ee576001600160e01b03198e16613fea600460008587614a21565b613ff391614a4b565b6001600160e01b0319161461403d5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21039b2b632b1ba37b960811b6044820152606401610a48565b602c821061409b5761408a8e614057601860048688614a21565b61406091614b47565b60601c614071602c60188789614a21565b61407a91614b47565b60601c61196d86602c818a614a21565b6140968f8f60016142b3565b6140ee565b600482146140e25760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a48565b6140ee8f8f60016142b3565b9950505050505050509450945094915050565b6040805180820190915260008082526020820152366000366000366000806000614129612148565b9050614139601460008c8e614a21565b61414291614b47565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c01019350602084033592506142a37fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5058d8360000160159054906101000a900463ffffffff168c602001518c8c604051614216929190614f91565b60405180910390208b8b60405161422e929190614f91565b60405180910390208a8a604051614246929190614f91565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e08101919091526101000161249e565b9150509397509397509397509397565b60006142bd612148565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b6001600160a01b038116811461435b57600080fd5b50565b803561214381614346565b60008083601f84011261437b57600080fd5b5081356001600160401b0381111561439257600080fd5b6020830191508360208285010111156143aa57600080fd5b9250929050565b600080600080606085870312156143c757600080fd5b8435935060208501356143d981614346565b925060408501356001600160401b038111156143f457600080fd5b61440087828801614369565b95989497509550505050565b80356001600160581b03198116811461214357600080fd5b6000806000806000806080878903121561443d57600080fd5b6144468761440c565b9550602087013561445681614346565b945060408701356001600160401b038082111561447257600080fd5b61447e8a838b01614369565b9096509450606089013591508082111561449757600080fd5b506144a489828a01614369565b979a9699509497509295939492505050565b6000806000604084860312156144cb57600080fd5b8335925060208401356001600160401b038111156144e857600080fd5b6144f486828701614369565b9497909650939450505050565b6000610120828403121561451457600080fd5b50919050565b60008060006060848603121561452f57600080fd5b83356001600160401b0381111561454557600080fd5b61455186828701614501565b9660208601359650604090950135949350505050565b60006020828403121561457957600080fd5b813563ffffffff81168114610ce257600080fd5b60006020828403121561459f57600080fd5b610ce28261440c565b6001600160e01b03198116811461435b57600080fd5b6000602082840312156145d057600080fd5b8135610ce2816145a8565b600080604083850312156145ee57600080fd5b6145f78361440c565b91506020830135614607816145a8565b809150509250929050565b60006020828403121561462457600080fd5b8135610ce281614346565b60008060006040848603121561464457600080fd5b61464d8461440c565b925060208401356001600160401b038111156144e857600080fd5b60005b8381101561468357818101518382015260200161466b565b50506000910152565b600081518084526146a4816020860160208601614668565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526146d960e084018a61468c565b83810360408501526146eb818a61468c565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561473f57835183529284019291840191600101614723565b50909c9b505050505050505050505050565b6000806040838503121561476457600080fd5b82356001600160401b0381111561477a57600080fd5b61478685828601614501565b95602094909401359450505050565b602081526000610ce2602083018461468c565b6000602082840312156147ba57600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561481857603f1988860301845261480685835161468c565b945092850192908501906001016147ea565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561489e57835169ffffffffffffffffffff19168252928401926001929092019190840190614871565b509695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906125b090830184866148a9565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614930576149306148f7565b60405290565b604051601f8201601f191681016001600160401b038111828210171561495e5761495e6148f7565b604052919050565b60006001600160401b0382111561497f5761497f6148f7565b50601f01601f191660200190565b60006020828403121561499f57600080fd5b81516001600160401b038111156149b557600080fd5b8201601f810184136149c657600080fd5b80516149d96149d482614966565b614936565b8181528560208385010111156149ee57600080fd5b6125b0826020830160208601614668565b600060208284031215614a1157600080fd5b81518015158114610ce257600080fd5b60008085851115614a3157600080fd5b83861115614a3e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156137485760049490940360031b84901b1690921692915050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818103614aa857614aa8614a79565b6001019392505050565b60018060a01b0385168152836020820152606060408201526000614ada6060830184866148a9565b9695505050505050565b600060208284031215614af657600080fd5b8151610ce2816145a8565b6000808335601e19843603018112614b1857600080fd5b8301803591506001600160401b03821115614b3257600080fd5b6020019150368190038213156143aa57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156137485760149490940360031b84901b1690921692915050565b6020815260006107f76020830184866148a9565b85815260018060a01b0385166020820152836040820152608060608201526000614bbc6080830184866148a9565b979650505050505050565b600082601f830112614bd857600080fd5b8135614be66149d482614966565b818152846020838601011115614bfb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215614c2b57600080fd5b614c3361490d565b614c3c8361435e565b81526020830135602082015260408301356001600160401b0380821115614c6257600080fd5b614c6e36838701614bc7565b60408401526060850135915080821115614c8757600080fd5b614c9336838701614bc7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115614cca57600080fd5b614cd636838701614bc7565b60e084015261010091508185013581811115614cf157600080fd5b614cfd36828801614bc7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152614d408286018261468c565b91505060608301518482036060860152614d5a828261468c565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152614d92828261468c565b9150506101008084015185830382870152614ada838261468c565b604081526000614dc06040830185614d0d565b90508260208301529392505050565b600060208284031215614de157600080fd5b5051919050565b838152606060208201526000614e016060830185614d0d565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006107f7604083018461468c565b818103818111156112e2576112e2614a79565b69ffffffffffffffffffff1981358181169160168510156137485760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156137485760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156137485760089490940360031b84901b1690921692915050565b808201808211156112e2576112e2614a79565b8281526040602082015260006107f76040830184614d0d565b60008235605e19833603018112614f3c57600080fd5b9190910192915050565b803560208310156112e257600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000614ada608083018461468c565b818382376000910190815291905056fea26469706673582212207aae277b50f37d0f482e9f52c381a27653d542c7dc01e629c367059d5a5f98b264736f6c634300081800330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x25",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b"
+ ],
+ "returns": {},
+ "timestamp": 1710948578,
+ "chain": 11155111,
+ "multi": false,
+ "commit": "19ba63c"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1710948591.json b/broadcast/Deploy.s.sol/11155111/run-1710948591.json
new file mode 100644
index 00000000..10390adb
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1710948591.json
@@ -0,0 +1,51 @@
+{
+ "transactions": [
+ {
+ "hash": "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x079D5D8A3275A230AF743cB59c341Ff74B82488D",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee7ca",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200522a3803806200522a833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051614fd7620002536000396000818161058801528181610cf60152818161102c015281816113380152818161154e0152818161168101528181611bcb0152611fb60152600061326b01526000613325015260006132ff015260006132af0152600061328c0152614fd76000f3fe60806040526004361061016a5760003560e01c806390ef8862116100d1578063b101dd3a1161008a578063e0dfd36511610064578063e0dfd36514610660578063e9ae5c531461068d578063f1f7f0f9146106a0578063f2dc691d146106ce576101a9565b8063b101dd3a146105ea578063d03c79141461061f578063d691c96414610640576101a9565b806390ef8862146104ed5780639517e29f146105175780639cfd7cff1461052a578063a65d69d414610576578063a71763a8146105c2578063adb610a3146105d5576101a9565b806357b3a5f41161012357806357b3a5f4146104005780636e6fa0c614610447578063721e67f41461046757806383d423591461049f57806384b0196e146104b25780638dd7712f146104da576101a9565b8063112d3a7d146102f457806312af322c146103295780631626ba7e1461034957806319822f7c146103825780631f1b92e3146103a3578063364d7a70146103b6576101a9565b366101a957604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101c06000356001600160e01b0319166106ee565b6040805180820190915281546001600160a01b039081168083526001909301541660208201529150600090606090610280576000806101fd610728565b90925090506001600160a01b03821661022957604051635a93724d60e01b815260040160405180910390fd5b6001600160a01b03811660011461026a5760006102488260003661077d565b9050610253836107ff565b90955093506102648282878761084e565b50610279565b610273826107ff565b90945092505b50506102dd565b82516060906001600160a01b03166001146102a65783516102a39060003661077d565b90505b6102b684602001516000366108c4565b855191945092506001600160a01b03166001146102db5783516102db9082858561084e565b505b816102ea57805160208201fd5b805160208201f35b005b34801561030057600080fd5b5061031461030f3660046143b1565b6108f3565b60405190151581526020015b60405180910390f35b34801561033557600080fd5b506102f2610344366004614424565b6109ed565b34801561035557600080fd5b506103696103643660046144b6565b610b47565b6040516001600160e01b03199091168152602001610320565b61039561039036600461451a565b610ce9565b604051908152602001610320565b6102f26103b1366004614567565b611005565b3480156103c257600080fd5b506103d66103d136600461458d565b6111ec565b60408051825163ffffffff1681526020928301516001600160a01b03169281019290925201610320565b34801561040c57600080fd5b5061042061041b3660046145be565b611255565b6040805182516001600160a01b039081168252602093840151169281019290925201610320565b34801561045357600080fd5b506103146104623660046145db565b61129f565b34801561047357600080fd5b50610487610482366004614612565b6112e8565b60405190516001600160a01b03168152602001610320565b6102f26104ad36600461462f565b61131e565b3480156104be57600080fd5b506104c76114e0565b60405161032097969594939291906146b8565b6102f26104e8366004614751565b611543565b3480156104f957600080fd5b5061050261164a565b60405163ffffffff9091168152602001610320565b6102f26105253660046143b1565b611667565b34801561053657600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d626574610000000000602082015290516103209190614795565b34801561058257600080fd5b506105aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610320565b6102f26105d03660046143b1565b611bb1565b3480156105e157600080fd5b50610502611ddb565b3480156105f657600080fd5b506105ff611df8565b604080516001600160a01b03938416815292909116602083015201610320565b34801561062b57600080fd5b5061031461063a3660046147a8565b50600190565b61065361064e3660046144b6565b611e0b565b60405161032091906147c1565b34801561066c57600080fd5b5061068061067b36600461458d565b611eb7565b6040516103209190614825565b6102f261069b3660046144b6565b611f9c565b3480156106ac57600080fd5b506106b5612115565b6040516001600160581b03199091168152602001610320565b3480156106da57600080fd5b506103146106e93660046147a8565b612128565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3d6020526040902090565b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b547f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3c546001600160a01b0391821692911690565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107b0903390879087906004016148d2565b6000604051808303816000875af11580156107cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f7919081019061498d565b949350505050565b6000606060408051368101909152366000823760408051601481019091523360601b90526000803660140183875afa92505060405190503d8152602081013d6000823e3d810160405250915091565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da9061087a908690600401614795565b6020604051808303816000875af1158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd91906149ff565b5050505050565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b60008460010361094457610905612148565b600101600061091a8660581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205463ffffffff16151590506107f7565b8460020361096a5760006109578561216c565b546001600160a01b0316141590506107f7565b8460030361099c57600061097c610728565b509050846001600160a01b0316816001600160a01b0316149150506107f7565b846006036109e2576001600160a01b0384166109cd6109bf600460008688614a21565b6109c891614a4b565b6106ee565b600101546001600160a01b03161490506107f7565b506000949350505050565b60006109f7612148565b805490915060581b6001600160581b03191615610a515760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a7957604051631a0a9b9f60e21b815260040160405180910390fd5b86610a8881600160f81b6121a5565b8015610a9d5750610a9d81600160f91b6121a5565b15610abb576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610b028982898989896121b8565b8254600160a81b900463ffffffff16836015610b1d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b600080610b52612148565b90506000366000610b6387876123e3565b925092509250610b7a610b738490565b6000612451565b15610b8757835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610bd157604051631a0a9b9f60e21b815260040160405180910390fd5b610bdf83600160f81b612451565b15610c79576000610bf08460581c90565b9050806001600160a01b031663f551e2ee33610c0b8c612463565b86866040518563ffffffff1660e01b8152600401610c2c9493929190614ab2565b602060405180830381865afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d9190614ae4565b95505050505050610ce2565b6000610c858460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610ccc57604051635b71057960e01b815260040160405180910390fd5b610cd982338c87876124b9565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d34576040516348f5c3ed60e01b815260040160405180910390fd5b6000610d3e612148565b90506000806000610d5288602001356125b9565b91945092509050610d64826000612451565b15610d705750825460581b5b610d7c83828a8a6125e7565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610dd29084906121a5565b8015610df057508454815163ffffffff600160c81b90920482169116105b15610e0e57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610e3a57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610f0257610e778460006121a5565b8015610edf57506001600160581b031983166000908152600287016020526040812090610ea760608d018d614b01565b610eb691600491600091614a21565b610ebf91614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610efd57604051631a0a9b9f60e21b815260040160405180910390fd5b610fe8565b610f0d8460006121a5565b8015610f7557506001600160581b031983166000908152600287016020526040812090610f3d60608d018d614b01565b610f4c91600891600491614a21565b610f5591614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f9357604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610fa860608c018c614b01565b610fb791600491600091614a21565b610fc091614a4b565b6001600160e01b03191614610fe85760405163dbbb044b60e01b815260040160405180910390fd5b8715610ff857343434348b335af1505b5050505050509392505050565b600061101f611012612148565b546001600160a81b031690565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061105a5750333014155b156111df5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110ff903390859036906004016148d2565b6000604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611146919081019061498d565b9050611151836128ae565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061117d908490600401614795565b6020604051808303816000875af115801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c091906149ff565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b6111e8826128ae565b5050565b6040805180820190915260008082526020820152611208612148565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b6040805180820190915260008082526020820152611272826106ee565b6040805180820190915281546001600160a01b039081168252600190920154909116602082015292915050565b60006112a9612148565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff1690505b92915050565b6040805160208101909152600081526113008261216c565b604080516020810190915290546001600160a01b0316815292915050565b600061132b611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906113665750333014155b156114d55760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d391906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061140b903390859036906004016148d2565b6000604051808303816000875af115801561142a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611452919081019061498d565b905061145f85858561294c565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6020604051808303816000875af11580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce91906149ff565b50506111c0565b6111c084848461294c565b600f60f81b6060806000808083611531604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158c576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b0316600181146115d6576115d3816115c06060870187614b01565b6115ce916004908290614a21565b61077d565b91505b6000806115fd306115ea6060890189614b01565b6115f8916004908290614a21565b6108c4565b90925090506001600160a01b0383166001146116245761161f8385848461084e565b611642565b816116425760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b6000611654612148565b54600160c81b900463ffffffff16919050565b6000611674611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906116af5750333014155b15611a065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611754903390859036906004016148d2565b6000604051808303816000875af1158015611773573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179b919081019061498d565b9050856001036118785760006117af612148565b905060006117c38760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016117f56014848a8c614a21565b6117fe91614b47565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356118328686868686866121b8565b8654600160a81b900463ffffffff1687601561184d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050611990565b856002036118d2576014848101358501603481810192918201359181880135880191820191810135906118c9908a906118b49060008b8d614a21565b6118bd91614b47565b60601c86868686612a10565b50505050611990565b85600303611923576014848101358501603481810192918201359181880135880191820191810135906118c9908a9061190e9060008b8d614a21565b61191791614b47565b60601c86868686612b21565b856006036119775761197261193c600460008688614a21565b61194591614a4b565b8661195460186004888a614a21565b61195d91614b47565b60601c61196d876018818b614a21565b612c58565b611990565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906119bc908490600401614795565b6020604051808303816000875af11580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff91906149ff565b50506108bd565b84600103611ae1576000611a18612148565b90506000611a2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611a5e601484898b614a21565b611a6791614b47565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611a9b8686868686866121b8565b8654600160a81b900463ffffffff16876015611ab683614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050506108bd565b84600203611b2657601483810135840160348181019291820135918187013587019182019181013590611b1d9089906118b49060008a8c614a21565b505050506108bd565b84600303611b6257601483810135840160348181019291820135918187013587019182019181013590611b1d90899061190e9060008a8c614a21565b8460060361197757611bac611b7b600460008587614a21565b611b8491614a4b565b85611b93601860048789614a21565b611b9c91614b47565b60601c61196d866018818a614a21565b6108bd565b6000611bbe611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611bf95750333014155b15611d745760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6691906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611c9e903390859036906004016148d2565b6000604051808303816000875af1158015611cbd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ce5919081019061498d565b604051638a91b0e360e01b81529091506001600160a01b03861690638a91b0e390611d169087908790600401614b7a565b600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b5050604051630b9dfbed60e11b81526001600160a01b038516925063173bf7da91506119bc908490600401614795565b604051638a91b0e360e01b81526001600160a01b03851690638a91b0e390611da29086908690600401614b7a565b600060405180830381600087803b158015611dbc57600080fd5b505af1158015611dd0573d6000803e3d6000fd5b505050505050505050565b6000611de5612148565b54600160a81b900463ffffffff16919050565b600080611e03610728565b915091509091565b60606000611e183361216c565b546001600160a01b0316905080611e425760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b038216600114611e6457611e618260003661077d565b90505b611e6f868686612cde565b92506001600160a01b038216600114611eae57611eae8282600186604051602001611e9a91906147c1565b60405160208183030381529060405261084e565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b611ee0612148565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b03168184015260018201805485518186028101860187528181529295939493860193830182828015611f8b57602002820191906000526020600020905b815460501b69ffffffffffffffffffff19168152600190910190602001808311611f66575b505050505081525050915050919050565b6000611fa9611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611fe45750333014155b1561210a5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205191906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90612089903390859036906004016148d2565b6000604051808303816000875af11580156120a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d0919081019061498d565b90506120dd858585612cde565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6108bd848484612cde565b600061211f612148565b5460581b919050565b6000600882101561213b57506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006121c2612148565b60208701519091506001600160a01b03166121df57600160208701525b85518154600160a81b900463ffffffff9081169116141580612227575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b1561224557604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff90921691909117939093179055146123055785602001516001600160a01b0316636d61fe7084846040518363ffffffff1660e01b81526004016122d2929190614b7a565b600060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b505050505b8661231481600160f81b612451565b1561238e5760006123258960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612356908a908a90600401614b7a565b600060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b50505050506123d9565b61239c81600160f91b612451565b156123c05760006123ad8960081b90565b90506123ba818888612f0a565b506123d9565b6040516361c4e91b60e11b815260040160405180910390fd5b5050505050505050565b813536600060f883901c8015612409576001811461241e576002811461242f5760206000fd5b60009350600186019250600186039150612449565b601586019250601585039150612449565b6001600160d81b0319841693506005860192506005850391505b509250925092565b6001600160f81b031990811691161490565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906112e2906060015b60405160208183030381529060405280519060200120613269565b60008060003660006124ce8a8a8a8a8a613381565b93509350935093506000806124e28561348d565b50915091508165ffffffffffff1642108061250457508065ffffffffffff1642115b1561252057506001600160e01b031995506125b0945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d6125448e612463565b88886040518663ffffffff1660e01b8152600401612566959493929190614b8e565b602060405180830381865afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ae4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c1660011981016125df576001600160d81b0319821691505b509193909250565b6000806125f2612148565b905060006125ff85614c18565b9050366000612612610100880188614b01565b909250905061262589600160f81b612451565b1561274e576000638dd7712f60e01b61264160608a018a614b01565b61265091600491600091614a21565b61265991614a4b565b6001600160e01b03191614612692576126756060890189614b01565b61268491600491600091614a21565b61268d91614a4b565b6126b7565b61269f6060890189614b01565b6126ae91600891600491614a21565b6126b791614a4b565b90506126d189826126cc6101008c018c614b01565b6134c0565b604080516020601f8401819004810282018101909252828152939950919550935084908490819084018382808284376000920191909152505050506101008501528454600160a81b900463ffffffff1685601561272d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b8761275d81600160f81b612451565b156127ec576127e5866127708b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b815260040161279d929190614dad565b6020604051808303816000875af11580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614dcf565b613692565b95506128a1565b60006127f88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b161561283e576040516314b9743f60e01b815260040160405180910390fd5b60008061284d83888888613750565b9150915061285b8983613692565b985061289b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b815260040161279d93929190614de8565b98505050505b5050505050949350505050565b60006128b8612148565b805490915063ffffffff600160c81b9091048116908316116128ed57604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b90910490911610156111e857805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612956612148565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b031916905590508361299481600160f81b612451565b156108bd5760006129a58660581c90565b604051638a91b0e360e01b81529091506001600160a01b03821690638a91b0e3906129d69088908890600401614b7a565b600060405180830381600087803b1580156129f057600080fd5b505af1158015612a04573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038516612a2357600194505b6000612a2e8761216c565b80546001600160a01b0319166001600160a01b038881169190911782556040516306d61fe760e41b8152919250881690636d61fe7090612a749088908890600401614b7a565b600060405180830381600087803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b505050506001600160a01b038616600114612b18576040516306d61fe760e41b81526001600160a01b03871690636d61fe7090612ae59086908690600401614b7a565b600060405180830381600087803b158015612aff57600080fd5b505af1158015612b13573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038516612b3457600194505b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b80546001600160a01b0319166001600160a01b03881690811782556040516306d61fe760e41b8152829190636d61fe7090612b969089908990600401614b7a565b600060405180830381600087803b158015612bb057600080fd5b505af1158015612bc4573d6000803e3d6000fd5b50505050600182810180546001600160a01b0319166001600160a01b038a16908117909155146123d9576040516306d61fe760e41b81526001600160a01b03881690636d61fe7090612c1c9087908790600401614b7a565b600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038316612c6b57600192505b6000612c76866106ee565b80546001600160a01b038087166001600160a01b03199283168117845560018085018054938b16939094169290921790925591925014611642576040516306d61fe760e41b81526001600160a01b03851690636d61fe70906129d69086908690600401614b7a565b606083600881901b612cf482600160f81b612451565b15612d7e5784358501602081019035612d0e836000612451565b15612d2457612d1d8282613a44565b9450612d77565b612d3283600160f81b612451565b15612d4157612d1d8282613b14565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a48565b5050611eae565b612d89826000612451565b15612eb757600080366000612d9e8989613c41565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081612dbd5790505096506000612de08682612451565b15612e1457612df185858585613c92565b88600081518110612e0457612e04614e11565b6020026020010181905250612ead565b612e2286600160f81b612451565b15612d4157612e3385858585613cc8565b89600081518110612e4657612e46614e11565b6020908102919091010152905080612ead577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7600089600081518110612e8e57612e8e614e11565b6020026020010151604051612ea4929190614e27565b60405180910390a15b5050505050611eae565b612ec9826001600160f81b0319612451565b15612d41576000612edd6014828789614a21565b612ee691614b47565b60601c9050366000612efb876014818b614a21565b91509150612ead8383836108c4565b6000612f14612148565b9050823583016020810190358060fe811180612f2e575081155b15612f4c5760405163b62d956d60e01b815260040160405180910390fd5b60005b612f5a600184614e40565b8110156130e4576001600160e01b0319881660009081526003860160205260409020600101848483818110612f9157612f91614e11565b9050602002810190612fa39190614b01565b612fb291601691600091614a21565b612fbb91614e53565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055838382818110612ffa57612ffa614e11565b905060200281019061300c9190614b01565b61301b91601691600291614a21565b61302491614b47565b60601c636d61fe706001600160e01b03198a1686868581811061304957613049614e11565b905060200281019061305b9190614b01565b613069916016908290614a21565b60405160200161307b93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016130a69190614795565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505060019092019150612f4f9050565b50600083836130f4600182614e40565b81811061310357613103614e11565b90506020028101906131159190614b01565b61312491601691600291614a21565b61312d91614b47565b6001600160e01b031989166000908152600387016020526040902080546201000060609390931c92830262010000600160b01b031990911617905590508383613177600182614e40565b81811061318657613186614e11565b90506020028101906131989190614b01565b6131a791600291600091614a21565b6131b091614e9e565b6001600160e01b0319891660008181526003880160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709086866131fd600182614e40565b81811061320c5761320c614e11565b905060200281019061321e9190614b01565b61322c916016908290614a21565b60405160200161323e93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401612c1c9190614795565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141661335c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613390612148565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a90529091506133fa81838a8a613cf9565b8787600081811061340d5761340d614e11565b9091013560f81c60ff1490506134365760405163b32eeb6960e01b815260040160405180910390fd5b613443876001818b614a21565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016134b25765ffffffffffff92505b508360d01c92509193909250565b6000366000806134ce612148565b905060003660006134e18b8b8b8b613f7d565b8654929550909350915060581b60006134fe82600160f81b612451565b1561358a578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906135419030908a908a908a90600401614ab2565b602060405180830381865afa15801561355e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135829190614ae4565b915050613640565b61359882600160f91b612451565b156123c057855460601b60006135b18230898989613381565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf906135fa906001600160e01b031986169030908c908c908c90600401614b8e565b602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b9190614ae4565b925050505b630b135d3f60e11b6001600160e01b0319821614613671576040516362467c7760e11b815260040160405180910390fd5b50969b60948a0135909901603481019b506014013599505050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146136c65760019250613748565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161370b5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680613729575065ffffffffffff60a01b5b808218908211021880613742575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061375d612148565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015613988576000806137bb8484815481106137a3576137a3614e11565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106137d4576137d4614e11565b919091013560f81c91505083810361387b5760006137f6600960018c8e614a21565b6137ff91614ecc565b60c01c90508a60098b6138128483614efa565b9261381f93929190614a21565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d01528a8a613866836009614efa565b613871928290614a21565b9a509a50506138b5565b838160ff16101561389f57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b831660000361397d576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b81526004016138fd929190614f0d565b6020604051808303816000875af115801561391c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139409190614dcf565b9050806001600160a01b0381161561396e57604051631f24c1fb60e11b815260048101879052602401610a48565b6139788a83613692565b995050505b505050600101613782565b508585600081811061399c5761399c614e11565b9091013560f81c60ff1490506139c55760405163b32eeb6960e01b815260040160405180910390fd5b6139d28560018189614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b606081806001600160401b03811115613a5f57613a5f6148f7565b604051908082528060200260200182016040528015613a9257816020015b6060815260200190600190039081613a7d5790505b50915060005b818110156137485736858583818110613ab357613ab3614e11565b9050602002810190613ac59190614f26565b9050613aee613ad76020830183614612565b6020830135613ae96040850185614b01565b613c92565b848381518110613b0057613b00614e11565b602090810291909101015250600101613a98565b606081806001600160401b03811115613b2f57613b2f6148f7565b604051908082528060200260200182016040528015613b6257816020015b6060815260200190600190039081613b4d5790505b50915060005b818110156137485736858583818110613b8357613b83614e11565b9050602002810190613b959190614f26565b90506000613bc0613ba96020840184614612565b6020840135613bbb6040860186614b01565b613cc8565b868581518110613bd257613bd2614e11565b6020908102919091010152905080613c37577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110613c1857613c18614e11565b6020026020010151604051613c2e929190614e27565b60405180910390a15b5050600101613b68565b6000803681613c536014828789614a21565b613c5c91614b47565b60601c9350613c6f603460148789614a21565b613c7891614f46565b9250613c878560348189614a21565b949793965094505050565b60405181838237600038838387895af1613caf573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b815481101561164257613d3b8282815481106137a3576137a3614e11565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081613d6957613d69614e11565b919091013560f81c8088528290039050613e1d57613d8b600960018587614a21565b613d9491614ecc565b60c01c6020870181905284906009908590613daf9083614efa565b92613dbc93929190614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152602086015184908490613e09906009614efa565b613e14928290614a21565b93509350613e89565b855160ff16811115613e4257604051630760bdcf60e11b815260040160405180910390fd5b613e4f6000808587614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003613f755760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694613ef0946001600160e01b0319909216939092600401614f64565b602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190614dcf565b9050806001600160a01b03811615613f5f57604051631f24c1fb60e11b815260048101849052602401610a48565b613f6d886040015183613692565b604089015250505b600101613d1d565b60003660008036600036600036600080613f988f8e8e614101565b9750975097509750975097509750975060748d013560348e0101995060208a03359850613fc98f89898989896121b8565b600482106140ee576001600160e01b03198e16613fea600460008587614a21565b613ff391614a4b565b6001600160e01b0319161461403d5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21039b2b632b1ba37b960811b6044820152606401610a48565b602c821061409b5761408a8e614057601860048688614a21565b61406091614b47565b60601c614071602c60188789614a21565b61407a91614b47565b60601c61196d86602c818a614a21565b6140968f8f60016142b3565b6140ee565b600482146140e25760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a48565b6140ee8f8f60016142b3565b9950505050505050509450945094915050565b6040805180820190915260008082526020820152366000366000366000806000614129612148565b9050614139601460008c8e614a21565b61414291614b47565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c01019350602084033592506142a37fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5058d8360000160159054906101000a900463ffffffff168c602001518c8c604051614216929190614f91565b60405180910390208b8b60405161422e929190614f91565b60405180910390208a8a604051614246929190614f91565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e08101919091526101000161249e565b9150509397509397509397509397565b60006142bd612148565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b6001600160a01b038116811461435b57600080fd5b50565b803561214381614346565b60008083601f84011261437b57600080fd5b5081356001600160401b0381111561439257600080fd5b6020830191508360208285010111156143aa57600080fd5b9250929050565b600080600080606085870312156143c757600080fd5b8435935060208501356143d981614346565b925060408501356001600160401b038111156143f457600080fd5b61440087828801614369565b95989497509550505050565b80356001600160581b03198116811461214357600080fd5b6000806000806000806080878903121561443d57600080fd5b6144468761440c565b9550602087013561445681614346565b945060408701356001600160401b038082111561447257600080fd5b61447e8a838b01614369565b9096509450606089013591508082111561449757600080fd5b506144a489828a01614369565b979a9699509497509295939492505050565b6000806000604084860312156144cb57600080fd5b8335925060208401356001600160401b038111156144e857600080fd5b6144f486828701614369565b9497909650939450505050565b6000610120828403121561451457600080fd5b50919050565b60008060006060848603121561452f57600080fd5b83356001600160401b0381111561454557600080fd5b61455186828701614501565b9660208601359650604090950135949350505050565b60006020828403121561457957600080fd5b813563ffffffff81168114610ce257600080fd5b60006020828403121561459f57600080fd5b610ce28261440c565b6001600160e01b03198116811461435b57600080fd5b6000602082840312156145d057600080fd5b8135610ce2816145a8565b600080604083850312156145ee57600080fd5b6145f78361440c565b91506020830135614607816145a8565b809150509250929050565b60006020828403121561462457600080fd5b8135610ce281614346565b60008060006040848603121561464457600080fd5b61464d8461440c565b925060208401356001600160401b038111156144e857600080fd5b60005b8381101561468357818101518382015260200161466b565b50506000910152565b600081518084526146a4816020860160208601614668565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526146d960e084018a61468c565b83810360408501526146eb818a61468c565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561473f57835183529284019291840191600101614723565b50909c9b505050505050505050505050565b6000806040838503121561476457600080fd5b82356001600160401b0381111561477a57600080fd5b61478685828601614501565b95602094909401359450505050565b602081526000610ce2602083018461468c565b6000602082840312156147ba57600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561481857603f1988860301845261480685835161468c565b945092850192908501906001016147ea565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561489e57835169ffffffffffffffffffff19168252928401926001929092019190840190614871565b509695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906125b090830184866148a9565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614930576149306148f7565b60405290565b604051601f8201601f191681016001600160401b038111828210171561495e5761495e6148f7565b604052919050565b60006001600160401b0382111561497f5761497f6148f7565b50601f01601f191660200190565b60006020828403121561499f57600080fd5b81516001600160401b038111156149b557600080fd5b8201601f810184136149c657600080fd5b80516149d96149d482614966565b614936565b8181528560208385010111156149ee57600080fd5b6125b0826020830160208601614668565b600060208284031215614a1157600080fd5b81518015158114610ce257600080fd5b60008085851115614a3157600080fd5b83861115614a3e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156137485760049490940360031b84901b1690921692915050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818103614aa857614aa8614a79565b6001019392505050565b60018060a01b0385168152836020820152606060408201526000614ada6060830184866148a9565b9695505050505050565b600060208284031215614af657600080fd5b8151610ce2816145a8565b6000808335601e19843603018112614b1857600080fd5b8301803591506001600160401b03821115614b3257600080fd5b6020019150368190038213156143aa57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156137485760149490940360031b84901b1690921692915050565b6020815260006107f76020830184866148a9565b85815260018060a01b0385166020820152836040820152608060608201526000614bbc6080830184866148a9565b979650505050505050565b600082601f830112614bd857600080fd5b8135614be66149d482614966565b818152846020838601011115614bfb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215614c2b57600080fd5b614c3361490d565b614c3c8361435e565b81526020830135602082015260408301356001600160401b0380821115614c6257600080fd5b614c6e36838701614bc7565b60408401526060850135915080821115614c8757600080fd5b614c9336838701614bc7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115614cca57600080fd5b614cd636838701614bc7565b60e084015261010091508185013581811115614cf157600080fd5b614cfd36828801614bc7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152614d408286018261468c565b91505060608301518482036060860152614d5a828261468c565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152614d92828261468c565b9150506101008084015185830382870152614ada838261468c565b604081526000614dc06040830185614d0d565b90508260208301529392505050565b600060208284031215614de157600080fd5b5051919050565b838152606060208201526000614e016060830185614d0d565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006107f7604083018461468c565b818103818111156112e2576112e2614a79565b69ffffffffffffffffffff1981358181169160168510156137485760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156137485760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156137485760089490940360031b84901b1690921692915050565b808201808211156112e2576112e2614a79565b8281526040602082015260006107f76040830184614d0d565b60008235605e19833603018112614f3c57600080fd5b9190910192915050565b803560208310156112e257600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000614ada608083018461468c565b818382376000910190815291905056fea26469706673582212207aae277b50f37d0f482e9f52c381a27653d542c7dc01e629c367059d5a5f98b264736f6c634300081800330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x25",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b",
+ "transactionIndex": "0x29",
+ "blockHash": "0xaa19c4052debc48b819d74ece5c03ef460558455a8eae9520fafa3e2c1492d9c",
+ "blockNumber": "0x544e61",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x5d721d",
+ "gasUsed": "0x44badd",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d87a4f"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1710948591,
+ "chain": 11155111,
+ "multi": false,
+ "commit": "19ba63c"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078165.json b/broadcast/Deploy.s.sol/11155111/run-1712078165.json
new file mode 100644
index 00000000..9403f895
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712078165.json
@@ -0,0 +1,50 @@
+{
+ "transactions": [
+ {
+ "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x784bc8",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x2d",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionIndex": "0x0",
+ "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47",
+ "blockNumber": "0x55acac",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x524718",
+ "gasUsed": "0x524718",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xc5c9a23a"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712078165,
+ "chain": 11155111,
+ "commit": "ef4e38d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078188.json b/broadcast/Deploy.s.sol/11155111/run-1712078188.json
new file mode 100644
index 00000000..d2d0d3fd
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712078188.json
@@ -0,0 +1,50 @@
+{
+ "transactions": [
+ {
+ "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x784bc8",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x2d",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionIndex": "0x0",
+ "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47",
+ "blockNumber": "0x55acac",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x524718",
+ "gasUsed": "0x524718",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xc5c9a23a"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712078188,
+ "chain": 11155111,
+ "commit": "ef4e38d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078215.json b/broadcast/Deploy.s.sol/11155111/run-1712078215.json
new file mode 100644
index 00000000..fa5500ab
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712078215.json
@@ -0,0 +1,50 @@
+{
+ "transactions": [
+ {
+ "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x784bc8",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x2d",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionIndex": "0x0",
+ "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47",
+ "blockNumber": "0x55acac",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x524718",
+ "gasUsed": "0x524718",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xc5c9a23a"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712078215,
+ "chain": 11155111,
+ "commit": "ef4e38d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078252.json b/broadcast/Deploy.s.sol/11155111/run-1712078252.json
new file mode 100644
index 00000000..5d9c2838
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712078252.json
@@ -0,0 +1,50 @@
+{
+ "transactions": [
+ {
+ "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x784bc8",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x2d",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919",
+ "transactionIndex": "0x0",
+ "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47",
+ "blockNumber": "0x55acac",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x524718",
+ "gasUsed": "0x524718",
+ "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E",
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xc5c9a23a"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712078252,
+ "chain": 11155111,
+ "commit": "ef4e38d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078612.json b/broadcast/Deploy.s.sol/11155111/run-1712078612.json
new file mode 100644
index 00000000..528692b7
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712078612.json
@@ -0,0 +1,50 @@
+{
+ "transactions": [
+ {
+ "hash": "0x1aae5c0d5e0619aa7ae9098b4ce220d5de82096a8be0dbfef3908d64a56bacc2",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x541E811D24A54745619a5B9f0c1d4B08D5740144",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x77c193",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b50604051620061cf380380620061cf833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615f6e620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611e620152818161250f01526126f901526000613e1b01526000613ed501526000613eaf01526000613e5f01526000613e3c0152615f6e6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b366004615144565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e6103603660046151b7565b6109b8565b34801561037157600080fd5b50610385610380366004615249565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac3660046152ad565b610c7a565b60405190815260200161033c565b61030e6103cd36600461530e565b610f96565b61030e6103e0366004615329565b61117d565b3480156103f157600080fd5b5061040561040036600461535c565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a366004615379565b611400565b34801561046b57600080fd5b5061047f61047a366004615329565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615400565b61030e6104cd366004615499565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e6105173660046155b2565b611605565b61030e61052a366004615144565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615712565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d5366004615144565b611e48565b3480156105e657600080fd5b506104e76122de565b3480156105fb57600080fd5b5061060f61060a366004615725565b6122fb565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b50610330610654366004615740565b50600190565b61066d610668366004615249565b612364565b60405161033c9190615759565b34801561068657600080fd5b5061069a610695366004615725565b612410565b60405161033c91906157bd565b61030e6106b5366004615841565b6124f5565b61030e6106c8366004615249565b6126df565b3480156106d957600080fd5b506106e26128a2565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b50610330610716366004615740565b6128b5565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a90610788903390879087906004016158ea565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf9190810190615936565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615712565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc91906159a8565b5050505050565b6000846001036109415760006108f76128d5565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b84600203610967576000610954856128f9565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a6004600086886159ca565b610993916159f4565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c26128d5565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b612932565b8015610a685750610a6881600160f91b612932565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd898289898989612945565b505050505050505050565b600080610ae36128d5565b90506000366000610af48787612b10565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612b7e565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a22565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615a54565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612bd4565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf6128d5565b90506000806000610ce38860200135612cd4565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d02565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d63908490612932565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e08846000612932565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615a71565b610e47916004916000916159ca565b610e50916159f4565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e846000612932565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615a71565b610edd916008916004916159ca565b610ee6916159f4565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615a71565b610f48916004916000916159ca565b610f51916159f4565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa36128d5565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105891906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611090903390859036906004016158ea565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d79190810190615936565b90506110e283612efe565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615712565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115191906159a8565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612efe565b5050565b600061118a610fa36128d5565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123291906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a903390859036906004016158ea565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b19190810190615936565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615712565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a6128d5565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b604080516020810190915260008152611460826128f9565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615a71565b61156c9160049082906159ca565b610755565b91505b60008061159b306115886060890189615a71565b6115969160049082906159ca565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f26128d5565b54600160c81b900463ffffffff16919050565b6000611612610fa36128d5565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f2903390859036906004016158ea565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117399190810190615936565b905061174a89898989898989612fe0565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615712565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b991906159a8565b50506117cf565b6117cf88888888888888612fe0565b5050505050505050565b60006117e6610fa36128d5565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c6903390859036906004016158ea565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d9190810190615936565b9050856001036119b05760006119216128d5565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c6159ca565b61197091615ab7565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a48686868686866130d5565b50505050505050611b90565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c6159ca565b6119f191615ab7565b60601c9050611a028a86868461315f565b611a0d8184846131f0565b5050505050611b90565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c6159ca565b611a58916159f4565b8a611a67601860048c8e6159ca565b611a7091615ab7565b60601c8787613340565b611a9e611a8b601860048a8c6159ca565b611a9491615ab7565b60601c83836131f0565b50505050611b90565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615aea565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615aea565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615aea565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bbc908490600401615712565b6020604051808303816000875af1158015611bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bff91906159a8565b50506108dc565b84600103611ca7576000611c186128d5565b90506000611c2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c5e601484898b6159ca565b611c6791615ab7565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611c9b8686868686866130d5565b505050505050506108dc565b84600203611d0e57601483810135840160348181019291820135918187013587019182019181013590600090611cdf9082898b6159ca565b611ce891615ab7565b60601c9050611cf98986868461315f565b611d048184846131f0565b50505050506108dc565b84600303611d785760188381013584016038818101929182013591818701358701918201910135611d5e611d4660046000898b6159ca565b611d4f916159f4565b89611a67601860048b8d6159ca565b611d6f611a8b60186004898b6159ca565b505050506108dc565b84600403611ddc576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615aea565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611d6f573d6000803e3d6000fd5b84600503611e12576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615aea565b84600603611b77576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615aea565b6000611e55610fa36128d5565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611e905750333014155b156121345760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611f35903390859036906004016158ea565b6000604051808303816000875af1158015611f54573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f7c9190810190615936565b90506000198603611fc957611fc78585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b505b85600103612004576000611fdb6128d5565b90506000611fef8760581b600160f81b1790565b9050611ffc81878761352a565b505050611b90565b8560020361201d57612017858585613682565b50611b90565b8560030361205c57600061203460048286886159ca565b61203d916159f4565b905061205581612050866004818a6159ca565b6136ed565b5050611b90565b856004036120a4576120178585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b856005036120ec576120178585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b85600603611b77576120178585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b600019850361217f5761217d8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b505b846001036121ba5760006121916128d5565b905060006121a58660581b600160f81b1790565b90506121b281868661352a565b5050506108dc565b846002036121d3576121cd848484613682565b506108dc565b846003036122065760006121ea60048285876159ca565b6121f3916159f4565b9050611bff8161205085600481896159ca565b8460040361224e576121cd8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b84600503612296576121cd8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b84600603611b77576121cd8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b60006122e86128d5565b54600160a81b900463ffffffff16919050565b60408051808201909152600080825260208201526123176128d5565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b60606000612371336128f9565b546001600160a01b031690508061239b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b0382166001146123bd576123ba82600036610755565b90505b6123c886868661377e565b92506001600160a01b0382166001146124075761240782826001866040516020016123f39190615759565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124396128d5565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b031681840152600182018054855181860281018601875281815292959394938601938301828280156124e457602002820191906000526020600020905b815460501b69ffffffffffffffffffff191681526001909101906020018083116124bf575b505050505081525050915050919050565b6000612502610fa36128d5565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061253d5750333014155b156126bc5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906125e2903390859036906004016158ea565b6000604051808303816000875af1158015612601573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126299190810190615936565b9050600061263888888861352a565b90506126458186866139a3565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90612672908490600401615712565b6020604051808303816000875af1158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b591906159a8565b50506115e0565b60006126c987878761352a565b90506126d68185856139a3565b50505050505050565b60006126ec610fa36128d5565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127275750333014155b156128975760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279491906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906127cc903390859036906004016158ea565b6000604051808303816000875af11580156127eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128139190810190615936565b905061282085858561377e565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061284d908490600401615712565b6020604051808303816000875af115801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906159a8565b5050611151565b6108dc84848461377e565b60006128ac6128d5565b5460581b919050565b600060088210156128c857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b600061294f6128d5565b60208701519091506001600160a01b031661296c57600160208701525b85518154600160a81b900463ffffffff90811691161415806129b4575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b156129d257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612a3c57612a3c866020015184846131f0565b86612a4b81600160f81b6107d7565b15612ac5576000612a5c8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612a8d908a908a90600401615aea565b600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50505050506117cf565b612ad381600160f91b6107d7565b15612af7576000612ae48960081b90565b9050612af1818888613a4a565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612b365760018114612b4b5760028114612b5c5760206000fd5b60009350600186019250600186039150612b76565b601586019250601585039150612b76565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e19565b6000806000366000612be98a8a8a8a8a613f31565b9350935093509350600080612bfd8561403d565b50915091508165ffffffffffff16421080612c1f57508065ffffffffffff1642115b15612c3b57506001600160e01b03199550612ccb945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612c5f8e612b7e565b88886040518663ffffffff1660e01b8152600401612c81959493929190615afe565b602060405180830381865afa158015612c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc29190615a54565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612cfa576001600160d81b0319821691505b509193909250565b600080612d0d6128d5565b90506000612d1a85615b88565b9050366000612d2d610100880188615a71565b9092509050612d4089600160f81b6107d7565b15612d9e57612d5c88612d576101008a018a615a71565b614070565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612dad81600160f81b6107d7565b15612e3c57612e3586612dc08b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612ded929190615d1d565b6020604051808303816000875af1158015612e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e309190615d3f565b614241565b9550612ef1565b6000612e488a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612e8e576040516314b9743f60e01b815260040160405180910390fd5b600080612e9d838888886142ff565b91509150612eab8983614241565b9850612eeb89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612ded93929190615d58565b98505050505b5050505050949350505050565b6000612f086128d5565b805490915063ffffffff80841691612f2a91600a91600160a81b900416615d97565b63ffffffff161015612f4f5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612f8157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612fea6128d5565b905060005b878110156130905761308889898381811061300c5761300c615dbb565b90506020020160208101906130219190615725565b88838151811061303357613033615dbb565b602002602001015188888581811061304d5761304d615dbb565b905060200281019061305f9190615a71565b88888781811061307157613071615dbb565b90506020028101906130839190615a71565b612945565b600101612fef565b508054600160a81b900463ffffffff168160156130ac83615dd1565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b60006130df6128d5565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b9091048116911603613151578054600160a81b900463ffffffff1681601561313183615dd1565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6126d6878787878787612945565b6001600160a01b038116613171575060015b600061317c856128f9565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906131c29087908790600401615aea565b600060405180830381600087803b1580156131dc57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061320f57506001600160a01b0383166001145b1561321957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa15801561325d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328191906159a8565b6132ec576001600160a01b038316636d61fe706132a183600181876159ca565b6040518363ffffffff1660e01b81526004016132be929190615aea565b600060405180830381600087803b1580156132d857600080fd5b505af11580156126d6573d6000803e3d6000fd5b6001600160f81b0319828260008161330657613306615dbb565b9050013560f81c60f81b6001600160f81b0319160361333b576001600160a01b038316636d61fe706132a183600181876159ca565b505050565b6001600160a01b03831661335357600192505b600061335e8661071b565b905060008383600081811061337557613375615dbb565b9050013560f81c60f81b905061338f81600060f81b6107d7565b15613404576001600160a01b038616636d61fe706133b085600181896159ca565b6040518363ffffffff1660e01b81526004016133cd929190615aea565b600060405180830381600087803b1580156133e757600080fd5b505af11580156133fb573d6000803e3d6000fd5b50505050613434565b613416816001600160f81b0319612932565b1561343457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b60006134dd835a600080638a91b0e360e01b876040516024016134a69190615712565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526145df565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135356128d5565b805490915060581b6001600160581b0319908116908616036135a55760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b03169150846135f681600160f81b6107d7565b156136505760006136078760581c90565b90506136498187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b5050612407565b61365e81600160f91b6107d7565b15612af757600061366f8760081b90565b905061367c818787614669565b50612407565b60008061368e856128f9565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b03909216945091925061240791879190879087908190840183828082843760009201919091525061348392505050565b6000806136f98561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b03938416965093945061375f939190921691879087908190840183828082843760009201919091525061348392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61379482600160f81b6107d7565b1561381757843585016020810190356137ae8360006107d7565b156137c4576137bd82826147e1565b9450613649565b6137d283600160f81b6107d7565b156137e1576137bd82826148b1565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138228260006107d7565b156139505760008036600061383789896149de565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081613856579050509650600061387986826107d7565b156138ad5761388a85858585614a2f565b8860008151811061389d5761389d615dbb565b6020026020010181905250613946565b6138bb86600160f81b6107d7565b156137e1576138cc85858585614a65565b896000815181106138df576138df615dbb565b6020908102919091010152905080613946577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061392757613927615dbb565b602002602001015160405161393d929190615df4565b60405180910390a15b5050505050612407565b613962826001600160f81b03196107d7565b156137e157600061397660148287896159ca565b61397f91615ab7565b60601c9050366000613994876014818b6159ca565b9150915061394683838361083e565b6001600160a01b03831615806139c257506001600160a01b0383166001145b156139cc57505050565b6001600160f81b031982826000816139e6576139e6615dbb565b9050013560f81c60f81b6001600160f81b0319160361333b5761115183613a1083600181876159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b6000613a546128d5565b90508235830160208101903560fe811180613a6d575080155b15613a8b5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613ad9576001600160e01b0319861660009081526003840160205260408120613ad9916001909101906150a2565b60005b6000198201811015613c6b576001600160e01b0319871660009081526003850160205260409020600101838383818110613b1857613b18615dbb565b9050602002810190613b2a9190615a71565b613b39916016916000916159ca565b613b4291615e0d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613b8157613b81615dbb565b9050602002810190613b939190615a71565b613ba2916016916002916159ca565b613bab91615ab7565b60601c636d61fe706001600160e01b03198916858585818110613bd057613bd0615dbb565b9050602002810190613be29190615a71565b613bf09160169082906159ca565b604051602001613c0293929190615e3e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c2d9190615712565b600060405180830381600087803b158015613c4757600080fd5b505af1158015613c5b573d6000803e3d6000fd5b505060019092019150613adc9050565b50600082826000198101818110613c8457613c84615dbb565b9050602002810190613c969190615a71565b613ca5916016916002916159ca565b613cae91615ab7565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d0157613d01615dbb565b9050602002810190613d139190615a71565b613d22916002916000916159ca565b613d2b91615e58565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613d8157613d81615dbb565b9050602002810190613d939190615a71565b613da19160169082906159ca565b604051602001613db393929190615e3e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613dde9190615712565b600060405180830381600087803b158015613df857600080fd5b505af1158015613e0c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f0c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613f406128d5565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a9052909150613faa81838a8a614a96565b87876000818110613fbd57613fbd615dbb565b9091013560f81c60ff149050613fe65760405163b32eeb6960e01b815260040160405180910390fd5b613ff3876001818b6159ca565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140625765ffffffffffff92505b508360d01c92509193909250565b60003660008061407e6128d5565b905060003660006140908a8a8a614d03565b8654929550909350915060581b60006140ad82600160f81b6107d7565b15614139578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906140f09030908a908a908a90600401615a22565b602060405180830381865afa15801561410d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141319190615a54565b9150506141ef565b61414782600160f91b6107d7565b15612af757855460601b60006141608230898989613f31565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf906141a9906001600160e01b031986169030908c908c908c90600401615afe565b602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190615a54565b925050505b630b135d3f60e11b6001600160e01b0319821614614220576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b038486181615176001811461427557600192506142f7565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b861690816142ba5765ffffffffffff60a01b91505b5065ffffffffffff60a01b8516806142d8575065ffffffffffff60a01b5b8082189082110218806142f1575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061430c6128d5565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b81548110156145235760008061436a84848154811061435257614352615dbb565b60009182526020909120015460501b90605082901c90565b9150915060008989600081811061438357614383615dbb565b919091013560f81c9150508381036144165760006143a5600960018c8e6159ca565b6143ae91615e86565b60c01c90506143c36009808301908c8e6159ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261440c8a60098301818e6159ca565b9a509a5050614450565b838160ff16101561443a57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614518576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614498929190615eb4565b6020604051808303816000875af11580156144b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144db9190615d3f565b9050806001600160a01b0381161561450957604051631f24c1fb60e11b815260048101879052602401610a13565b6145138a83614241565b995050505b505050600101614331565b508585600081811061453757614537615dbb565b9091013560f81c60ff1490506145605760405163b32eeb6960e01b815260040160405180910390fd5b61456d85600181896159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561460457614604615521565b6040519080825280601f01601f19166020018201604052801561462e576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561464f578692505b828152826000602083013e90999098509650505050505050565b81358201602081019035600061467d6128d5565b6001600160e01b031987166000908152600391909101602052604090206001808201549192506146ad9190615ecd565b82146146cc5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147595760006146f383838154811061435257614352615dbb565b91505061474f818a6001600160e01b03191688888681811061471757614717615dbb565b90506020028101906147299190615a71565b60405160200161473b93929190615e3e565b604051602081830303815290604052613483565b50506001016146d3565b506147626128d5565b6001600160e01b0319881660009081526003919091016020526040812061478e916001909101906150a2565b81546147ca906201000090046001600160a01b03166001600160e01b0319891686866147bb600182615ee0565b81811061471757614717615dbb565b505080546001600160b01b03191690555050505050565b606081806001600160401b038111156147fc576147fc615521565b60405190808252806020026020018201604052801561482f57816020015b606081526020019060019003908161481a5790505b50915060005b818110156142f7573685858381811061485057614850615dbb565b90506020028101906148629190615ef3565b905061488b6148746020830183615329565b60208301356148866040850185615a71565b614a2f565b84838151811061489d5761489d615dbb565b602090810291909101015250600101614835565b606081806001600160401b038111156148cc576148cc615521565b6040519080825280602002602001820160405280156148ff57816020015b60608152602001906001900390816148ea5790505b50915060005b818110156142f7573685858381811061492057614920615dbb565b90506020028101906149329190615ef3565b9050600061495d6149466020840184615329565b60208401356149586040860186615a71565b614a65565b86858151811061496f5761496f615dbb565b60209081029190910101529050806149d4577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7838685815181106149b5576149b5615dbb565b60200260200101516040516149cb929190615df4565b60405180910390a15b5050600101614905565b60008036816149f060148287896159ca565b6149f991615ab7565b60601c9350614a0c6034601487896159ca565b614a1591615f13565b9250614a2485603481896159ca565b949793965094505050565b60405181838237600038838387895af1614a4c573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614ad882828154811061435257614352615dbb565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b0657614b06615dbb565b919091013560f81c8088528290039050614ba357614b286009600185876159ca565b614b3191615e86565b60c01c60208701819052614b4c9060099081019085876159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614b9a90849060090181876159ca565b93509350614c0f565b855160ff16811115614bc857604051630760bdcf60e11b815260040160405180910390fd5b614bd560008085876159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614cfb5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614c76946001600160e01b0319909216939092600401615f31565b602060405180830381865afa158015614c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cb79190615d3f565b9050806001600160a01b03811615614ce557604051631f24c1fb60e11b815260048101849052602401610a13565b614cf3886040015183614241565b604089015250505b600101614aba565b60003660008036600036600036600080614d1e8e8e8e614d8d565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614d4f8e89898989896130d5565b614d598383614f42565b614d7b8e614d6b6004600086886159ca565b614d74916159f4565b600161500f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614db56128d5565b9050614dc5601460008c8e6159ca565b614dce91615ab7565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614f327fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614ea5929190615f5e565b60405180910390208b8b604051614ebd929190615f5e565b60405180910390208a8a604051614ed5929190615f5e565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612bb9565b9150509397509397509397509397565b6000614f5160048284866159ca565b614f5a916159f4565b90506004821061333b57602c8210614fc857602c838101358401604c818101929182013591818701358701918201910135614fb785614f9d601860048a8c6159ca565b614fa691615ab7565b60601c611a67602c60188b8d6159ca565b6126d6611a8b602c6018898b6159ca565b6004821461333b5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b60006150196128d5565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906150c091906150c3565b50565b5b808211156150d857600081556001016150c4565b5090565b6001600160a01b03811681146150c057600080fd5b80356128d0816150dc565b60008083601f84011261510e57600080fd5b5081356001600160401b0381111561512557600080fd5b60208301915083602082850101111561513d57600080fd5b9250929050565b6000806000806060858703121561515a57600080fd5b84359350602085013561516c816150dc565b925060408501356001600160401b0381111561518757600080fd5b615193878288016150fc565b95989497509550505050565b80356001600160581b0319811681146128d057600080fd5b600080600080600080608087890312156151d057600080fd5b6151d98761519f565b955060208701356151e9816150dc565b945060408701356001600160401b038082111561520557600080fd5b6152118a838b016150fc565b9096509450606089013591508082111561522a57600080fd5b5061523789828a016150fc565b979a9699509497509295939492505050565b60008060006040848603121561525e57600080fd5b8335925060208401356001600160401b0381111561527b57600080fd5b615287868287016150fc565b9497909650939450505050565b600061012082840312156152a757600080fd5b50919050565b6000806000606084860312156152c257600080fd5b83356001600160401b038111156152d857600080fd5b6152e486828701615294565b9660208601359650604090950135949350505050565b803563ffffffff811681146128d057600080fd5b60006020828403121561532057600080fd5b610c73826152fa565b60006020828403121561533b57600080fd5b8135610c73816150dc565b6001600160e01b0319811681146150c057600080fd5b60006020828403121561536e57600080fd5b8135610c7381615346565b6000806040838503121561538c57600080fd5b6153958361519f565b915060208301356153a581615346565b809150509250929050565b60005b838110156153cb5781810151838201526020016153b3565b50506000910152565b600081518084526153ec8160208601602086016153b0565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261542160e084018a6153d4565b8381036040850152615433818a6153d4565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154875783518352928401929184019160010161546b565b50909c9b505050505050505050505050565b600080604083850312156154ac57600080fd5b82356001600160401b038111156154c257600080fd5b6154ce85828601615294565b95602094909401359450505050565b60008083601f8401126154ef57600080fd5b5081356001600160401b0381111561550657600080fd5b6020830191508360208260051b850101111561513d57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561555957615559615521565b60405290565b60405161012081016001600160401b038111828210171561555957615559615521565b604051601f8201601f191681016001600160401b03811182821017156155aa576155aa615521565b604052919050565b60008060008060008060006080888a0312156155cd57600080fd5b6001600160401b0380893511156155e357600080fd5b6155f08a8a358b016154dd565b909850965060208901358181111561560757600080fd5b8901601f81018b1361561857600080fd5b80358281111561562a5761562a615521565b61563960208260051b01615582565b8082825260208201915060208360061b85010192508d83111561565b57600080fd5b6020840193505b828410156156b7576040848f03121561567a57600080fd5b615682615537565b61568b856152fa565b8152602085013561569b816150dc565b8060208301525080835250602082019150604084019350615662565b98505050506040890135818111156156ce57600080fd5b6156da8b828c016154dd565b9096509450506060890135818111156156f257600080fd5b6156fe8b828c016154dd565b999c989b5096995094979396939450505050565b602081526000610c7360208301846153d4565b60006020828403121561573757600080fd5b610c738261519f565b60006020828403121561575257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156157b057603f1988860301845261579e8583516153d4565b94509285019290850190600101615782565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561583657835169ffffffffffffffffffff19168252928401926001929092019190840190615809565b509695505050505050565b60008060008060006060868803121561585957600080fd5b6158628661519f565b945060208601356001600160401b038082111561587e57600080fd5b61588a89838a016150fc565b909650945060408801359150808211156158a357600080fd5b506158b0888289016150fc565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612ccb90830184866158c1565b60006001600160401b0382111561592857615928615521565b50601f01601f191660200190565b60006020828403121561594857600080fd5b81516001600160401b0381111561595e57600080fd5b8201601f8101841361596f57600080fd5b805161598261597d8261590f565b615582565b81815285602083850101111561599757600080fd5b612ccb8260208301602086016153b0565b6000602082840312156159ba57600080fd5b81518015158114610c7357600080fd5b600080858511156159da57600080fd5b838611156159e757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156142f75760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615a4a6060830184866158c1565b9695505050505050565b600060208284031215615a6657600080fd5b8151610c7381615346565b6000808335601e19843603018112615a8857600080fd5b8301803591506001600160401b03821115615aa257600080fd5b60200191503681900382131561513d57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156142f75760149490940360031b84901b1690921692915050565b6020815260006107cf6020830184866158c1565b85815260018060a01b0385166020820152836040820152608060608201526000615b2c6080830184866158c1565b979650505050505050565b600082601f830112615b4857600080fd5b8135615b5661597d8261590f565b818152846020838601011115615b6b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615b9b57600080fd5b615ba361555f565b615bac836150f1565b81526020830135602082015260408301356001600160401b0380821115615bd257600080fd5b615bde36838701615b37565b60408401526060850135915080821115615bf757600080fd5b615c0336838701615b37565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615c3a57600080fd5b615c4636838701615b37565b60e084015261010091508185013581811115615c6157600080fd5b615c6d36828801615b37565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615cb0828601826153d4565b91505060608301518482036060860152615cca82826153d4565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d0282826153d4565b9150506101008084015185830382870152615a4a83826153d4565b604081526000615d306040830185615c7d565b90508260208301529392505050565b600060208284031215615d5157600080fd5b5051919050565b838152606060208201526000615d716060830185615c7d565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615db457615db4615d81565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615dea57615dea615d81565b6001019392505050565b8281526040602082015260006107cf60408301846153d4565b69ffffffffffffffffffff1981358181169160168510156142f75760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156142f75760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156142f75760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615c7d565b808201808211156107e8576107e8615d81565b818103818111156107e8576107e8615d81565b60008235605e19833603018112615f0957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615a4a60808301846153d4565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x2e",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x1aae5c0d5e0619aa7ae9098b4ce220d5de82096a8be0dbfef3908d64a56bacc2",
+ "transactionIndex": "0x7",
+ "blockHash": "0x3a7e45eb9be58ede0c1476398153aa4036e3c52ea7717bb645bb7ef92943ecb9",
+ "blockNumber": "0x55accf",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x5535e6",
+ "gasUsed": "0x51e892",
+ "contractAddress": "0x541E811D24A54745619a5B9f0c1d4B08D5740144",
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xede72eb9"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712078612,
+ "chain": 11155111,
+ "commit": "ef4e38d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712595823.json b/broadcast/Deploy.s.sol/11155111/run-1712595823.json
new file mode 100644
index 00000000..401c728b
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712595823.json
@@ -0,0 +1,180 @@
+{
+ "transactions": [
+ {
+ "hash": "0x710c7e453988a351631693916c8ba9f05966a24efaaa1c133f1767135868f9c8",
+ "transactionType": "CREATE2",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "function": null,
+ "arguments": [
+ "0x9775137314fE595c943712B0b336327dfa80aE8A"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "data": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x30",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x2b56a22f73c5bce6917093ede70e05f97a800c4da77168977308a4b4911d33f3",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0xe59cffb45AFFB215e3823F7D1a207a71C1aa09c3",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x779014",
+ "value": "0x0",
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b50604051620061a7380380620061a7833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615f46620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611e62015281816124e701526126d101526000613df301526000613ead01526000613e8701526000613e3701526000613e140152615f466000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b36600461511c565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e61036036600461518f565b6109b8565b34801561037157600080fd5b50610385610380366004615221565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac366004615285565b610c7a565b60405190815260200161033c565b61030e6103cd3660046152e6565b610f96565b61030e6103e0366004615301565b61117d565b3480156103f157600080fd5b50610405610400366004615334565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a366004615351565b611400565b34801561046b57600080fd5b5061047f61047a366004615301565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c97969594939291906153d8565b61030e6104cd366004615471565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e61051736600461558a565b611605565b61030e61052a36600461511c565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c91906156ea565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d536600461511c565b611e48565b3480156105e657600080fd5b506104e76122b6565b3480156105fb57600080fd5b5061060f61060a3660046156fd565b6122d3565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b50610330610654366004615718565b50600190565b61066d610668366004615221565b61233c565b60405161033c9190615731565b34801561068657600080fd5b5061069a6106953660046156fd565b6123e8565b60405161033c9190615795565b61030e6106b5366004615819565b6124cd565b61030e6106c8366004615221565b6126b7565b3480156106d957600080fd5b506106e261287a565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b50610330610716366004615718565b61288d565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a90610788903390879087906004016158c2565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf919081019061590e565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da906108999086906004016156ea565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615980565b5050505050565b6000846001036109415760006108f76128ad565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b84600203610967576000610954856128d1565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a6004600086886159a2565b610993916159cc565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c26128ad565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b61290a565b8015610a685750610a6881600160f91b61290a565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd89828989898961291d565b505050505050505050565b600080610ae36128ad565b90506000366000610af48787612ae8565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612b56565b86866040518563ffffffff1660e01b8152600401610bbd94939291906159fa565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615a2c565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612bac565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf6128ad565b90506000806000610ce38860200135612cac565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612cda565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d6390849061290a565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e0884600061290a565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615a49565b610e47916004916000916159a2565b610e50916159cc565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e84600061290a565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615a49565b610edd916008916004916159a2565b610ee6916159cc565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615a49565b610f48916004916000916159a2565b610f51916159cc565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa36128ad565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611090903390859036906004016158c2565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d7919081019061590e565b90506110e283612ed6565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e9084906004016156ea565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615980565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612ed6565b5050565b600061118a610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a903390859036906004016158c2565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b1919081019061590e565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e9084906004016156ea565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a6128ad565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b604080516020810190915260008152611460826128d1565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615a49565b61156c9160049082906159a2565b610755565b91505b60008061159b306115886060890189615a49565b6115969160049082906159a2565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f26128ad565b54600160c81b900463ffffffff16919050565b6000611612610fa36128ad565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f2903390859036906004016158c2565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611739919081019061590e565b905061174a89898989898989612fb8565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906117769084906004016156ea565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615980565b50506117cf565b6117cf88888888888888612fb8565b5050505050505050565b60006117e6610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c6903390859036906004016158c2565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d919081019061590e565b9050856001036119b05760006119216128ad565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c6159a2565b61197091615a8f565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a48686868686866130ad565b50505050505050611b90565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c6159a2565b6119f191615a8f565b60601c9050611a028a868684613137565b611a0d8184846131c8565b5050505050611b90565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c6159a2565b611a58916159cc565b8a611a67601860048c8e6159a2565b611a7091615a8f565b60601c8787613318565b611a9e611a8b601860048a8c6159a2565b611a9491615a8f565b60601c83836131c8565b50505050611b90565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615ac2565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615ac2565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615ac2565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bbc9084906004016156ea565b6020604051808303816000875af1158015611bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bff9190615980565b50506108dc565b84600103611ca7576000611c186128ad565b90506000611c2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c5e601484898b6159a2565b611c6791615a8f565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611c9b8686868686866130ad565b505050505050506108dc565b84600203611d0e57601483810135840160348181019291820135918187013587019182019181013590600090611cdf9082898b6159a2565b611ce891615a8f565b60601c9050611cf989868684613137565b611d048184846131c8565b50505050506108dc565b84600303611d785760188381013584016038818101929182013591818701358701918201910135611d5e611d4660046000898b6159a2565b611d4f916159cc565b89611a67601860048b8d6159a2565b611d6f611a8b60186004898b6159a2565b505050506108dc565b84600403611ddc576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615ac2565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611d6f573d6000803e3d6000fd5b84600503611e12576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615ac2565b84600603611b77576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615ac2565b6000611e55610fa36128ad565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611e905750333014155b156121205760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611f35903390859036906004016158c2565b6000604051808303816000875af1158015611f54573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f7c919081019061590e565b90506000198603611fc957611fc78585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b505b85600103611ff7576000611fe38660581b600160f81b1790565b9050611ff0818686613502565b5050611b90565b856002036120105761200a85858561365a565b50611b90565b8560030361204857600061202760048286886159a2565b612030916159cc565b9050611ff081612043866004818a6159a2565b6136c5565b856004036120905761200a8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b856005036120d85761200a8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b85600603611b775761200a8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b600019850361216b576121698484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b505b846001036121925760006121858560581b600160f81b1790565b9050611bff818585613502565b846002036121ab576121a584848461365a565b506108dc565b846003036121de5760006121c260048285876159a2565b6121cb916159cc565b9050611bff8161204385600481896159a2565b84600403612226576121a58484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b8460050361226e576121a58484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b84600603611b77576121a58484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b60006122c06128ad565b54600160a81b900463ffffffff16919050565b60408051808201909152600080825260208201526122ef6128ad565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b60606000612349336128d1565b546001600160a01b03169050806123735760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b0382166001146123955761239282600036610755565b90505b6123a0868686613756565b92506001600160a01b0382166001146123df576123df82826001866040516020016123cb9190615731565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124116128ad565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b031681840152600182018054855181860281018601875281815292959394938601938301828280156124bc57602002820191906000526020600020905b815460501b69ffffffffffffffffffff19168152600190910190602001808311612497575b505050505081525050915050919050565b60006124da610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125155750333014155b156126945760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561255e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125829190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906125ba903390859036906004016158c2565b6000604051808303816000875af11580156125d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612601919081019061590e565b90506000612610888888613502565b905061261d81868661397b565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061264a9084906004016156ea565b6020604051808303816000875af1158015612669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268d9190615980565b50506115e0565b60006126a1878787613502565b90506126ae81858561397b565b50505050505050565b60006126c4610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906126ff5750333014155b1561286f5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906127a4903390859036906004016158c2565b6000604051808303816000875af11580156127c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127eb919081019061590e565b90506127f8858585613756565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128259084906004016156ea565b6020604051808303816000875af1158015612844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128689190615980565b5050611151565b6108dc848484613756565b60006128846128ad565b5460581b919050565b600060078210156128a057506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129276128ad565b60208701519091506001600160a01b031661294457600160208701525b85518154600160a81b900463ffffffff908116911614158061298c575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b156129aa57604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612a1457612a14866020015184846131c8565b86612a2381600160f81b6107d7565b15612a9d576000612a348960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612a65908a908a90600401615ac2565b600060405180830381600087803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b50505050506117cf565b612aab81600160f91b6107d7565b15612acf576000612abc8960081b90565b9050612ac9818888613a22565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612b0e5760018114612b235760028114612b345760206000fd5b60009350600186019250600185039150612b4e565b601586019250601585039150612b4e565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613df1565b6000806000366000612bc18a8a8a8a8a613f09565b9350935093509350600080612bd585614015565b50915091508165ffffffffffff16421080612bf757508065ffffffffffff1642115b15612c1357506001600160e01b03199550612ca3945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612c378e612b56565b88886040518663ffffffff1660e01b8152600401612c59959493929190615ad6565b602060405180830381865afa158015612c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9a9190615a2c565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612cd2576001600160d81b0319821691505b509193909250565b600080612ce56128ad565b90506000612cf285615b60565b9050366000612d05610100880188615a49565b9092509050612d1889600160f81b6107d7565b15612d7657612d3488612d2f6101008a018a615a49565b614048565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612d8581600160f81b6107d7565b15612e1457612e0d86612d988b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612dc5929190615cf5565b6020604051808303816000875af1158015612de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e089190615d17565b614219565b9550612ec9565b6000612e208a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612e66576040516314b9743f60e01b815260040160405180910390fd5b600080612e75838888886142d7565b91509150612e838983614219565b9850612ec389826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612dc593929190615d30565b98505050505b5050505050949350505050565b6000612ee06128ad565b805490915063ffffffff80841691612f0291600a91600160a81b900416615d6f565b63ffffffff161015612f275760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612f5957604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612fc26128ad565b905060005b8781101561306857613060898983818110612fe457612fe4615d93565b9050602002016020810190612ff991906156fd565b88838151811061300b5761300b615d93565b602002602001015188888581811061302557613025615d93565b90506020028101906130379190615a49565b88888781811061304957613049615d93565b905060200281019061305b9190615a49565b61291d565b600101612fc7565b508054600160a81b900463ffffffff1681601561308483615da9565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b60006130b76128ad565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b9091048116911603613129578054600160a81b900463ffffffff1681601561310983615da9565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6126ae87878787878761291d565b6001600160a01b038116613149575060015b6000613154856128d1565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe709061319a9087908790600401615ac2565b600060405180830381600087803b1580156131b457600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b03831615806131e757506001600160a01b0383166001145b156131f157505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa158015613235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132599190615980565b6132c4576001600160a01b038316636d61fe7061327983600181876159a2565b6040518363ffffffff1660e01b8152600401613296929190615ac2565b600060405180830381600087803b1580156132b057600080fd5b505af11580156126ae573d6000803e3d6000fd5b6001600160f81b031982826000816132de576132de615d93565b9050013560f81c60f81b6001600160f81b03191603613313576001600160a01b038316636d61fe7061327983600181876159a2565b505050565b6001600160a01b03831661332b57600192505b60006133368661071b565b905060008383600081811061334d5761334d615d93565b9050013560f81c60f81b905061336781600060f81b6107d7565b156133dc576001600160a01b038616636d61fe7061338885600181896159a2565b6040518363ffffffff1660e01b81526004016133a5929190615ac2565b600060405180830381600087803b1580156133bf57600080fd5b505af11580156133d3573d6000803e3d6000fd5b5050505061340c565b6133ee816001600160f81b031961290a565b1561340c57604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b60006134b5835a600080638a91b0e360e01b8760405160240161347e91906156ea565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526145b7565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b60008061350d6128ad565b805490915060581b6001600160581b03199081169086160361357d5760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b03169150846135ce81600160f81b6107d7565b156136285760006135df8760581c90565b90506136218187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b50506123df565b61363681600160f91b6107d7565b15612acf5760006136478760081b90565b9050613654818787614641565b506123df565b600080613666856128d1565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506123df91879190879087908190840183828082843760009201919091525061345b92505050565b6000806136d18561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b039384169650939450613737939190921691879087908190840183828082843760009201919091525061345b92505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61376c82600160f81b6107d7565b156137ef57843585016020810190356137868360006107d7565b1561379c5761379582826147b9565b9450613621565b6137aa83600160f81b6107d7565b156137b9576137958282614889565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6137fa8260006107d7565b156139285760008036600061380f89896149b6565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161382e579050509650600061385186826107d7565b156138855761386285858585614a07565b8860008151811061387557613875615d93565b602002602001018190525061391e565b61389386600160f81b6107d7565b156137b9576138a485858585614a3d565b896000815181106138b7576138b7615d93565b602090810291909101015290508061391e577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76000896000815181106138ff576138ff615d93565b6020026020010151604051613915929190615dcc565b60405180910390a15b50505050506123df565b61393a826001600160f81b03196107d7565b156137b957600061394e60148287896159a2565b61395791615a8f565b60601c905036600061396c876014818b6159a2565b9150915061391e83838361083e565b6001600160a01b038316158061399a57506001600160a01b0383166001145b156139a457505050565b6001600160f81b031982826000816139be576139be615d93565b9050013560f81c60f81b6001600160f81b0319160361331357611151836139e883600181876159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b6000613a2c6128ad565b90508235830160208101903560fe811180613a45575080155b15613a635760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613ab1576001600160e01b0319861660009081526003840160205260408120613ab19160019091019061507a565b60005b6000198201811015613c43576001600160e01b0319871660009081526003850160205260409020600101838383818110613af057613af0615d93565b9050602002810190613b029190615a49565b613b11916016916000916159a2565b613b1a91615de5565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613b5957613b59615d93565b9050602002810190613b6b9190615a49565b613b7a916016916002916159a2565b613b8391615a8f565b60601c636d61fe706001600160e01b03198916858585818110613ba857613ba8615d93565b9050602002810190613bba9190615a49565b613bc89160169082906159a2565b604051602001613bda93929190615e16565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c0591906156ea565b600060405180830381600087803b158015613c1f57600080fd5b505af1158015613c33573d6000803e3d6000fd5b505060019092019150613ab49050565b50600082826000198101818110613c5c57613c5c615d93565b9050602002810190613c6e9190615a49565b613c7d916016916002916159a2565b613c8691615a8f565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613cd957613cd9615d93565b9050602002810190613ceb9190615a49565b613cfa916002916000916159a2565b613d0391615e30565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613d5957613d59615d93565b9050602002810190613d6b9190615a49565b613d799160169082906159a2565b604051602001613d8b93929190615e16565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613db691906156ea565b600060405180830381600087803b158015613dd057600080fd5b505af1158015613de4573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613ee45750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613f186128ad565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a9052909150613f8281838a8a614a6e565b87876000818110613f9557613f95615d93565b9091013560f81c60ff149050613fbe5760405163b32eeb6960e01b815260040160405180910390fd5b613fcb876001818b6159a2565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff16828115600019810161403a5765ffffffffffff92505b508360d01c92509193909250565b6000366000806140566128ad565b905060003660006140688a8a8a614cdb565b8654929550909350915060581b600061408582600160f81b6107d7565b15614111578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906140c89030908a908a908a906004016159fa565b602060405180830381865afa1580156140e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141099190615a2c565b9150506141c7565b61411f82600160f91b6107d7565b15612acf57855460601b60006141388230898989613f09565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614181906001600160e01b031986169030908c908c908c90600401615ad6565b602060405180830381865afa15801561419e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141c29190615a2c565b925050505b630b135d3f60e11b6001600160e01b03198216146141f8576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b038486181615176001811461424d57600192506142cf565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b861690816142925765ffffffffffff60a01b91505b5065ffffffffffff60a01b8516806142b0575065ffffffffffff60a01b5b8082189082110218806142c9575065ffffffffffff60a01b5b92909217915b505092915050565b60008060006142e46128ad565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b81548110156144fb5760008061434284848154811061432a5761432a615d93565b60009182526020909120015460501b90605082901c90565b9150915060008989600081811061435b5761435b615d93565b919091013560f81c9150508381036143ee57600061437d600960018c8e6159a2565b61438691615e5e565b60c01c905061439b6009808301908c8e6159a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d01526143e48a60098301818e6159a2565b9a509a5050614428565b838160ff16101561441257604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b83166000036144f0576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614470929190615e8c565b6020604051808303816000875af115801561448f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b39190615d17565b9050806001600160a01b038116156144e157604051631f24c1fb60e11b815260048101879052602401610a13565b6144eb8a83614219565b995050505b505050600101614309565b508585600081811061450f5761450f615d93565b9091013560f81c60ff1490506145385760405163b32eeb6960e01b815260040160405180910390fd5b61454585600181896159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b038111156145dc576145dc6154f9565b6040519080825280601f01601f191660200182016040528015614606576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115614627578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146556128ad565b6001600160e01b031987166000908152600391909101602052604090206001808201549192506146859190615ea5565b82146146a45760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147315760006146cb83838154811061432a5761432a615d93565b915050614727818a6001600160e01b0319168888868181106146ef576146ef615d93565b90506020028101906147019190615a49565b60405160200161471393929190615e16565b60405160208183030381529060405261345b565b50506001016146ab565b5061473a6128ad565b6001600160e01b031988166000908152600391909101602052604081206147669160019091019061507a565b81546147a2906201000090046001600160a01b03166001600160e01b031989168686614793600182615eb8565b8181106146ef576146ef615d93565b505080546001600160b01b03191690555050505050565b606081806001600160401b038111156147d4576147d46154f9565b60405190808252806020026020018201604052801561480757816020015b60608152602001906001900390816147f25790505b50915060005b818110156142cf573685858381811061482857614828615d93565b905060200281019061483a9190615ecb565b905061486361484c6020830183615301565b602083013561485e6040850185615a49565b614a07565b84838151811061487557614875615d93565b60209081029190910101525060010161480d565b606081806001600160401b038111156148a4576148a46154f9565b6040519080825280602002602001820160405280156148d757816020015b60608152602001906001900390816148c25790505b50915060005b818110156142cf57368585838181106148f8576148f8615d93565b905060200281019061490a9190615ecb565b9050600061493561491e6020840184615301565b60208401356149306040860186615a49565b614a3d565b86858151811061494757614947615d93565b60209081029190910101529050806149ac577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb78386858151811061498d5761498d615d93565b60200260200101516040516149a3929190615dcc565b60405180910390a15b50506001016148dd565b60008036816149c860148287896159a2565b6149d191615a8f565b60601c93506149e46034601487896159a2565b6149ed91615eeb565b92506149fc85603481896159a2565b949793965094505050565b60405181838237600038838387895af1614a24573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614ab082828154811061432a5761432a615d93565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614ade57614ade615d93565b919091013560f81c8088528290039050614b7b57614b006009600185876159a2565b614b0991615e5e565b60c01c60208701819052614b249060099081019085876159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614b7290849060090181876159a2565b93509350614be7565b855160ff16811115614ba057604051630760bdcf60e11b815260040160405180910390fd5b614bad60008085876159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614cd35760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614c4e946001600160e01b0319909216939092600401615f09565b602060405180830381865afa158015614c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c8f9190615d17565b9050806001600160a01b03811615614cbd57604051631f24c1fb60e11b815260048101849052602401610a13565b614ccb886040015183614219565b604089015250505b600101614a92565b60003660008036600036600036600080614cf68e8e8e614d65565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614d278e89898989896130ad565b614d318383614f1a565b614d538e614d436004600086886159a2565b614d4c916159cc565b6001614fe7565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614d8d6128ad565b9050614d9d601460008c8e6159a2565b614da691615a8f565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614f0a7fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614e7d929190615f36565b60405180910390208b8b604051614e95929190615f36565b60405180910390208a8a604051614ead929190615f36565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612b91565b9150509397509397509397509397565b6000614f2960048284866159a2565b614f32916159cc565b90506004821061331357602c8210614fa057602c838101358401604c818101929182013591818701358701918201910135614f8f85614f75601860048a8c6159a2565b614f7e91615a8f565b60601c611a67602c60188b8d6159a2565b6126ae611a8b602c6018898b6159a2565b600482146133135760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000614ff16128ad565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b5080546000825590600052602060002090810190615098919061509b565b50565b5b808211156150b0576000815560010161509c565b5090565b6001600160a01b038116811461509857600080fd5b80356128a8816150b4565b60008083601f8401126150e657600080fd5b5081356001600160401b038111156150fd57600080fd5b60208301915083602082850101111561511557600080fd5b9250929050565b6000806000806060858703121561513257600080fd5b843593506020850135615144816150b4565b925060408501356001600160401b0381111561515f57600080fd5b61516b878288016150d4565b95989497509550505050565b80356001600160581b0319811681146128a857600080fd5b600080600080600080608087890312156151a857600080fd5b6151b187615177565b955060208701356151c1816150b4565b945060408701356001600160401b03808211156151dd57600080fd5b6151e98a838b016150d4565b9096509450606089013591508082111561520257600080fd5b5061520f89828a016150d4565b979a9699509497509295939492505050565b60008060006040848603121561523657600080fd5b8335925060208401356001600160401b0381111561525357600080fd5b61525f868287016150d4565b9497909650939450505050565b6000610120828403121561527f57600080fd5b50919050565b60008060006060848603121561529a57600080fd5b83356001600160401b038111156152b057600080fd5b6152bc8682870161526c565b9660208601359650604090950135949350505050565b803563ffffffff811681146128a857600080fd5b6000602082840312156152f857600080fd5b610c73826152d2565b60006020828403121561531357600080fd5b8135610c73816150b4565b6001600160e01b03198116811461509857600080fd5b60006020828403121561534657600080fd5b8135610c738161531e565b6000806040838503121561536457600080fd5b61536d83615177565b9150602083013561537d8161531e565b809150509250929050565b60005b838110156153a357818101518382015260200161538b565b50506000910152565b600081518084526153c4816020860160208601615388565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526153f960e084018a6153ac565b838103604085015261540b818a6153ac565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561545f57835183529284019291840191600101615443565b50909c9b505050505050505050505050565b6000806040838503121561548457600080fd5b82356001600160401b0381111561549a57600080fd5b6154a68582860161526c565b95602094909401359450505050565b60008083601f8401126154c757600080fd5b5081356001600160401b038111156154de57600080fd5b6020830191508360208260051b850101111561511557600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715615531576155316154f9565b60405290565b60405161012081016001600160401b0381118282101715615531576155316154f9565b604051601f8201601f191681016001600160401b0381118282101715615582576155826154f9565b604052919050565b60008060008060008060006080888a0312156155a557600080fd5b6001600160401b0380893511156155bb57600080fd5b6155c88a8a358b016154b5565b90985096506020890135818111156155df57600080fd5b8901601f81018b136155f057600080fd5b803582811115615602576156026154f9565b61561160208260051b0161555a565b8082825260208201915060208360061b85010192508d83111561563357600080fd5b6020840193505b8284101561568f576040848f03121561565257600080fd5b61565a61550f565b615663856152d2565b81526020850135615673816150b4565b806020830152508083525060208201915060408401935061563a565b98505050506040890135818111156156a657600080fd5b6156b28b828c016154b5565b9096509450506060890135818111156156ca57600080fd5b6156d68b828c016154b5565b999c989b5096995094979396939450505050565b602081526000610c7360208301846153ac565b60006020828403121561570f57600080fd5b610c7382615177565b60006020828403121561572a57600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561578857603f198886030184526157768583516153ac565b9450928501929085019060010161575a565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561580e57835169ffffffffffffffffffff191682529284019260019290920191908401906157e1565b509695505050505050565b60008060008060006060868803121561583157600080fd5b61583a86615177565b945060208601356001600160401b038082111561585657600080fd5b61586289838a016150d4565b9096509450604088013591508082111561587b57600080fd5b50615888888289016150d4565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612ca39083018486615899565b60006001600160401b03821115615900576159006154f9565b50601f01601f191660200190565b60006020828403121561592057600080fd5b81516001600160401b0381111561593657600080fd5b8201601f8101841361594757600080fd5b805161595a615955826158e7565b61555a565b81815285602083850101111561596f57600080fd5b612ca3826020830160208601615388565b60006020828403121561599257600080fd5b81518015158114610c7357600080fd5b600080858511156159b257600080fd5b838611156159bf57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156142cf5760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615a22606083018486615899565b9695505050505050565b600060208284031215615a3e57600080fd5b8151610c738161531e565b6000808335601e19843603018112615a6057600080fd5b8301803591506001600160401b03821115615a7a57600080fd5b60200191503681900382131561511557600080fd5b6bffffffffffffffffffffffff1981358181169160148510156142cf5760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615899565b85815260018060a01b0385166020820152836040820152608060608201526000615b04608083018486615899565b979650505050505050565b600082601f830112615b2057600080fd5b8135615b2e615955826158e7565b818152846020838601011115615b4357600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615b7357600080fd5b615b7b615537565b615b84836150c9565b81526020830135602082015260408301356001600160401b0380821115615baa57600080fd5b615bb636838701615b0f565b60408401526060850135915080821115615bcf57600080fd5b615bdb36838701615b0f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615c1257600080fd5b615c1e36838701615b0f565b60e084015261010091508185013581811115615c3957600080fd5b615c4536828801615b0f565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615c88828601826153ac565b91505060608301518482036060860152615ca282826153ac565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615cda82826153ac565b9150506101008084015185830382870152615a2283826153ac565b604081526000615d086040830185615c55565b90508260208301529392505050565b600060208284031215615d2957600080fd5b5051919050565b838152606060208201526000615d496060830185615c55565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615d8c57615d8c615d59565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615dc257615dc2615d59565b6001019392505050565b8281526040602082015260006107cf60408301846153ac565b69ffffffffffffffffffff1981358181169160168510156142cf5760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156142cf5760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156142cf5760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615c55565b808201808211156107e8576107e8615d59565b818103818111156107e8576107e8615d59565b60008235605e19833603018112615ee157600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615a2260808301846153ac565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x31",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xecc3c51ae1323f38365dcd10c63bd5d81722373c346863b2ac283fd17aa1cd89",
+ "transactionType": "CREATE",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x24beDBabCb63b04E0042a4e39d322577766726EA",
+ "function": null,
+ "arguments": [
+ "0xe59cffb45AFFB215e3823F7D1a207a71C1aa09c3"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "gas": "0x5b920",
+ "value": "0x0",
+ "data": "0x60a060405234801561001057600080fd5b506040516104d33803806104d383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161043c6100976000396000818160870152818160f10152610159015261043c6000f3fe6080604052600436106100345760003560e01c806348aac392146100395780635c60da1b14610075578063ea6d13ac146100a9575b600080fd5b34801561004557600080fd5b506100596100543660046103a2565b6100bc565b6040516001600160a01b03909116815260200160405180910390f35b34801561008157600080fd5b506100597f000000000000000000000000000000000000000000000000000000000000000081565b6100596100b73660046103a2565b610120565b6000808484846040516020016100d49392919061041a565b6040516020818303038152906040528051906020012090506101177f00000000000000000000000000000000000000000000000000000000000000008230610213565b95945050505050565b6000808484846040516020016101389392919061041a565b60405160208183030381529060405280519060200120905060008061017e347f00000000000000000000000000000000000000000000000000000000000000008561029c565b9150915081610209576000816001600160a01b031688886040516101a392919061042c565b6000604051808303816000865af19150503d80600081146101e0576040519150601f19603f3d011682016040523d82523d6000602084013e6101e5565b606091505b50509050806102075760405163487e630960e11b815260040160405180910390fd5b505b9695505050505050565b60008061028f85604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20768352616009602052601e9390935268603d3d8160223d3973600a52605f6021209152600090915290565b9050610117818585610380565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6103485783605f602188f59150816103435763301164256000526004601cfd5b61036e565b60019250851561036e5760003860003889865af161036e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806000604084860312156103b757600080fd5b833567ffffffffffffffff808211156103cf57600080fd5b818601915086601f8301126103e357600080fd5b8135818111156103f257600080fd5b87602082850101111561040457600080fd5b6020928301989097509590910135949350505050565b82848237909101908152602001919050565b818382376000910190815291905056000000000000000000000000e59cffb45affb215e3823f7d1a207a71c1aa09c3",
+ "nonce": "0x32",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x5dac929c7b2d9575830cb2498aa1a4cd7a4a40a62a018ccbcbc8c7fa5c23f241",
+ "transactionType": "CALL",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x24beDBabCb63b04E0042a4e39d322577766726EA",
+ "true"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0xfa0a",
+ "value": "0x0",
+ "data": "0x6e7dbabb00000000000000000000000024bedbabcb63b04e0042a4e39d322577766726ea0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x33",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x710c7e453988a351631693916c8ba9f05966a24efaaa1c133f1767135868f9c8",
+ "transactionIndex": "0x7",
+ "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895",
+ "blockNumber": "0x564bfb",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0xe4435",
+ "gasUsed": "0x76534",
+ "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "logs": [
+ {
+ "address": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "topics": [
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a"
+ ],
+ "data": "0x",
+ "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895",
+ "blockNumber": "0x564bfb",
+ "transactionHash": "0x710c7e453988a351631693916c8ba9f05966a24efaaa1c133f1767135868f9c8",
+ "transactionIndex": "0x7",
+ "logIndex": "0x7",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2e6a0a3"
+ },
+ {
+ "transactionHash": "0x2b56a22f73c5bce6917093ede70e05f97a800c4da77168977308a4b4911d33f3",
+ "transactionIndex": "0x9",
+ "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895",
+ "blockNumber": "0x564bfb",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
+ "cumulativeGasUsed": "0x60c911",
+ "gasUsed": "0x51c6b8",
+ "contractAddress": "0xe59cffb45AFFB215e3823F7D1a207a71C1aa09c3",
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2e6a0a3"
+ },
+ {
+ "transactionHash": "0xecc3c51ae1323f38365dcd10c63bd5d81722373c346863b2ac283fd17aa1cd89",
+ "transactionIndex": "0xa",
+ "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895",
+ "blockNumber": "0x564bfb",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": null,
+ "cumulativeGasUsed": "0x653066",
+ "gasUsed": "0x46755",
+ "contractAddress": "0x24beDBabCb63b04E0042a4e39d322577766726EA",
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2e6a0a3"
+ },
+ {
+ "transactionHash": "0x5dac929c7b2d9575830cb2498aa1a4cd7a4a40a62a018ccbcbc8c7fa5c23f241",
+ "transactionIndex": "0xb",
+ "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895",
+ "blockNumber": "0x564bfb",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "cumulativeGasUsed": "0x65e56d",
+ "gasUsed": "0xb507",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2e6a0a3"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712595823,
+ "chain": 11155111,
+ "commit": "2ed1bf4"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712597270.json b/broadcast/Deploy.s.sol/11155111/run-1712597270.json
new file mode 100644
index 00000000..3b42784a
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712597270.json
@@ -0,0 +1,66 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd4371d9913bac7d8f71709c88990c7c2a9e879beb024ce1a1e425184053d23c0",
+ "transactionType": "CALL",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "type": "0x02",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "data": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x36",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0xd4371d9913bac7d8f71709c88990c7c2a9e879beb024ce1a1e425184053d23c0",
+ "transactionIndex": "0x1b",
+ "blockHash": "0xe3a8b76fd29cec09b8089de169c90f56be68a61da0f69d2f516cde482fdf4e88",
+ "blockNumber": "0x564c79",
+ "from": "0x9775137314fE595c943712B0b336327dfa80aE8A",
+ "to": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
+ "cumulativeGasUsed": "0x4f5a35",
+ "gasUsed": "0xed9b",
+ "contractAddress": null,
+ "logs": [
+ {
+ "address": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xe3a8b76fd29cec09b8089de169c90f56be68a61da0f69d2f516cde482fdf4e88",
+ "blockNumber": "0x564c79",
+ "transactionHash": "0xd4371d9913bac7d8f71709c88990c7c2a9e879beb024ce1a1e425184053d23c0",
+ "transactionIndex": "0x1b",
+ "logIndex": "0x50",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d7d848"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712597270,
+ "chain": 11155111,
+ "commit": "f6316b3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712840412.json b/broadcast/Deploy.s.sol/11155111/run-1712840412.json
new file mode 100644
index 00000000..dd1d70db
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712840412.json
@@ -0,0 +1,81 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x701810859d77cdba314b27302996fdbc35edfa45",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee6c1",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520d38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcc928362000241843960805183614094015260a051836140b7015260c05183614129015260e0518361414f0152518261407301525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fac8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fac833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d81565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f66565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fac8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fac8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fac8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310d565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310d565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ed565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613339565b92909115610d7d5761001b93613360565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b7565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ee565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613233565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fac8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d38565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c87565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fac8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613429565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613429565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fac8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136b0565b603460148301359201906135e3565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613497565b611a46565b6018860135956038019491612274565b6135e3565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a2565b600284036125c9576121f993506001600160a01b0316613858565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fe565b91926004810361267e57506121f99261264b91612624600080516020614fac8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374f565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fac8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fac8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a2565b613b58565b906121f992916139ee565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb5565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b61292993613360565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613312565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613233565b91386128aa565b6001600160a01b03166000908152600080516020614f8c8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fac8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fac83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf4565b612b7a926135e3565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fac833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4c5780600114612c3f57600214612c295760206000fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca694612c9a91858585613f54565b94929391969096614048565b509065ffffffffffff8091164210918215612d2c575b5050612d1957612cfa612cd0602096612d38565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbc565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7981610e5c565b519020614071565b90818060081b9160ff839260f01c16600214612d9957565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd8610ef7565b92612de2816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e10918401612da8565b604086015260608201358381116101d35781612e2d918401612da8565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e68918401612da8565b60e086015261010092838301359081116101d357612e869201612da8565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f19612ee9612ed761012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f4a906040928652606060208701526060860190612e9b565b930152565b929190612f4a602091604086526040860190612e9b565b929092600092612f763682612dc3565b916101009182810191612f898383611f2a565b90949093600160f81b936001600160f81b031993841685146130d2575b505050871603613033575050604051639700320360e01b815293602092859283916000918391612fd99160048401612f4f565b039260581c6001600160a01b03165af190811561089057611d7d92600092613002575b5061456f565b61302591925060203d60201161302c575b61301d8183610ec9565b810190612e8c565b9038612ffc565b503d613013565b909460081b93909291600160f01b613050611eae611ea788611d30565b166130c057600061307161306b60209661309b99858a61436f565b9461456f565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2d565b03926001600160a01b03165af190811561089057611d7d92600092613002575061456f565b6040516314b9743f60e01b8152600490fd5b909195506130ee9398506130e7929450611f2a565b9088614185565b969192909361310185899599369161254d565b90860152388080612fa6565b600080516020614fac83398151915280549163ffffffff92600a848260a81c1601908482116131d75782851691851682116131c55760c81c84161015612b8257600080516020614fac833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131935750565b600080516020614fac833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f981610e92565b600681526512d95c9b995b60d21b60208201529060405161321981610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a357505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132de95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fd575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a3600080946133bc60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cd5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f95760200190565b6133d6565b80518210156133f95760209160051b010190565b908210156133f95761024d9160051b810190611f2a565b96959192939694909460005b86811061344757505050505050509050565b806134888a60019360051b85013561345e81610277565b6134748461346c818c6133fe565b51938c613412565b90613480868b8b613412565b949093612a14565b01613435565b90156133f95790565b6001600160a01b039391929190848316156135da575b6134b690611cf8565b946134e26134d56134c7838561348e565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135bb575050908061350492861693611a73565b823b156101d35761352f92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356b61358b936001936101e3986135a8575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b592610e44565b3861354d565b92509250509491940361296a57600161358b9161356b6101e39661354f565b600192506134ad565b6001600160a01b031691821580156136a6575b6136a15760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613682575b501561364d576001600160f81b0319806136426134c7848661348e565b161461364d57505050565b8061365792611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369b915060203d6020116108f8576108ea8183610ec9565b38613625565b505050565b50600183146135f6565b919392916001600160a01b039081841615613735575b166000818152600080516020614f8c8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613731576133bc9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c6565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137af876137a16020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c28c610e77565b828c525193f1943d90816137f5575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d1565b61380e6138419194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8c8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d46138c2600080516020614fac8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e4611c2583611b7a565b936139056138f184611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393e57506121f9929161392c91369161254d565b9060581c6001600160a01b031661374f565b600160f91b141590506103a9576101e39160081b61460a565b60405161396381610e92565b600181528060005b6020808210156139865790606060209282850101520161396b565b50505090565b9061399682610f04565b6139a36040519182610ec9565b82815280926139b4601f1991610f04565b019060005b8281106139c557505050565b8060606020809385010152016139b9565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a8057505050613a27908035019060208201913590565b929093168015600014613a3f575050611d7d91614888565b03613a4d57611d7d916147cb565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2357505090613a979161471f565b93909294613aa3613957565b971680613ac8575050613ab593614770565b613abe836133ec565b526121f9826133ec565b03613a4d57613ad693614747565b613adf846133ec565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1e613b11846133ec565b51604051918291826139d6565b0390a1565b909650919390925003613a4d57613b4e8280613b486122f16122eb613b549787611a57565b93611a90565b91613339565b5050565b6001600160a01b03169081158015613bab575b6136a15782156133f9576001600160f81b03198135811614613b8c57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6b565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0957505050565b6000526020600020918201915b828110613c2257505050565b818155600101613c16565b6001600160501b03199035818116939260168110613c4a57505050565b60160360031b82901b16169150565b80548210156133f95760005260206000200190600090565b805468010000000000000000811015610e5757613c9391600182018155613c59565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce557505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4c575b613f3a57600180613d1b85611d30565b0154613f21575b60001982019260005b848110613e445750613e099594613e17949093613ded9350613de69250613d86613dd7613dbe611eae613db8613db287878e613dad8e613d7e611c626122f16122eb613d78898989613412565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613412565b90611ae9565b90613cc8565b613dc788611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613412565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb2565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373e565b613e9b611c62611c626122f16122eb613d78868a8e613dad8f613e678e91611d30565b01613e95613e88613e82613e7c888888613412565b90611aad565b90613c2d565b6001600160501b03191690565b90613c71565b90613eaa613de682878b613412565b90613ecb604091613e0983519485928d63ffffffff60e01b168a8501613cb2565b833b156101d3576000938492613ef592519586809481936306d61fe760e41b83526004830161373e565b03925af1918215610890578492613f0e575b5001613d2b565b8061088a613f1b92610e44565b38613f07565b613f356001613f2f86611d30565b01613bf5565b613d22565b60405163b62d956d60e01b8152600490fd5b508015613d0b565b8484613fd792613fc2979694989560405191613f6f83610ead565b613fd160009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614921565b60ff80613ff0613fea6134c7878661348e565b60f81c90565b16036140365761401f61400a8461401a9561402f94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614069575b5060d01c92565b925038614062565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140df565b91929092614191612720565b9061419c9085611a57565b6141a591612274565b60601c60208201819052600080516020614fac8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142169261254d565b80519060200120913661422a90888861254d565b805190602001203661423d908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c961010082610ec9565b5190206142d590614071565b607489013589018d8b82013591016142ec92614b73565b9a6142f79488612a14565b6143018183614d10565b61430a91611a1b565b61431391611b4e565b61431c91614eca565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434957505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9b565b60009493916001868161438185611d30565b016000835b6143ce575b5050505060ff806143a2613fea6134c7878961348e565b1603614036576101006143c66143bf8561401f96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614567576143ff6143f76143ea8385613c59565b90549060031b1c60501b90565b908160501c90565b98909761441b614415613fea6134c7858561348e565b60ff1690565b808403614536575090818161445461444861444261443c8461447198611af7565b9061432c565b60c01c90565b6001600160401b031690565b600901916144666143bf848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448b575b50830183614386565b99866144c8929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614358565b0393165af1958615610890578896614517575b505084166144fd5750506144f385949392859261456f565b9a91929350614482565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452e929650803d1061302c5761301d8183610ec9565b9338806144db565b909991989083111561455457604051630760bdcf60e11b8152600490fd5b61455c6124fa565b610100880152614476565b96959661438b565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146145a057505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614602575b83811680156145fb575b8781109088180280881897146145f3575b508181119082180218921716171790565b9550386145e2565b50806145d1565b9550856145c7565b9190803501916020906020840193359061462381611d30565b9260019060018501906001825401850361470d57906000835b61469f575b5050505061468e9161468982613ded6101e397986146666001613f2f613e0998611d30565b875461467d9060101c6001600160a01b0316611c62565b94600019810191613412565b61374f565b5080546001600160b01b0319169055565b8154811015614708579083826146fe613e098c6146f08a6146d5868e6146cd6143f76143ea8c9f9e8e613c59565b969050613412565b6040519586939092906001600160e01b0319168c8501613cb2565b6001600160a01b031661374f565b500190919261463c565b614641565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479f573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f95760051b81013590605e19813603018212156101d3570190565b9190916147d78361398c565b9260005b8181106147e757505050565b806147f560019284866147a9565b8035614800816101c2565b6148216020809360409361481685830183611f2a565b939092013590614747565b61482b858b6133fe565b521561483a575b5050016147db565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487e614869858b6133fe565b51838051948594888652850152830190610bef565b0390a13880614832565b9190916148948361398c565b9260005b8181106148a457505050565b806148da60206148b760019486886147a9565b80356148c2816101c2565b6148cf6040830183611f2a565b939092013590614770565b6148e482886133fe565b526148ef81876133fe565b5001614898565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161494061401a845163ffffffff60e01b1690565b01936000936000958054965b87811061495e57505050505050505050565b806149706143f76143ea8c9486613c59565b6001600160a01b031660a0880190815260808801959091614999906001600160f01b0319168752565b6149b36149ac613fea6134c78a8561348e565b60ff168952565b6149c1614415895160ff1690565b808403614b3b57508681816149e661444861444261443c614a3a9c9d614a0d98611af7565b60208c018181528c60c0614a026143bf60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2c906001600160f01b031916611eae565b166001600160f01b03191690565b15614a47575b500161494c565b51909150614a5d906001600160a01b0316611c62565b8651614a8190614a74906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac66101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f6565b03915afa938415610890578b94614b1c575b50506001600160a01b038316614b015750860180518b9392614af99161456f565b905238614a40565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b33929450803d1061302c5761301d8183610ec9565b913880614ad8565b839196945010600014614b5a57604051630760bdcf60e11b8152600490fd5b614a3a8b93614b69368861252a565b60c08a0152614a12565b600080516020614fac8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c365750604051637aa8f17760e11b8152936020938593909284928392614bcb923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c17575b505b6001600160e01b0319166374eca2c160e11b01614c0557565b6040516362467c7760e11b8152600490fd5b614c30915060203d602011611e8657611e7e8183610ec9565b38614bea565b919550929190600160f91b036103a957602091614c599160081b95843088613f54565b60405163392dffaf60e01b81529297929586949385938493614c8c93909230906001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091614cae575b50614bec565b614cc7915060203d602011611e8657611e7e8183610ec9565b38614ca8565b15614cd457565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1d6105c98383611a1b565b906004831015614d2c57505050565b602c8310614ebc57614d47611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d81614d736134d56134c7878761348e565b6001600160f81b0319161590565b80614e2b575b94614dc861242895611c6295614dcd956101e39b956122f19a614ddd575b614db8611c626122f16122eb8a8a611b25565b916001600160a01b031690613497565b611b25565b602c86013595604c019491612274565b614e26606c8701358701614e20602c604c830192013580614e07611c626122f16122eb8488611a57565b93614e1b856001600160a01b038a16614f2f565b611a90565b916135e3565b614da5565b5091939092956040519163ecd0596160e01b835260208380614e5560048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcd97614dc895600091614e9d575b50959a50959b5095509550955050614d87565b614eb6915060203d6020116108f8576108ea8183610ec9565b38614e8a565b505060046101e39114614ccd565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efc82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f82575b16600052600080516020614f8c83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4656fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x38",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0xf6b3d3edfce2ae313faffe7d6578dfa1e3d00969",
+ "function": null,
+ "arguments": [
+ "0x701810859d77CdbA314b27302996fDBC35edFa45"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000701810859d77cdba314b27302996fdbc35edfa45",
+ "nonce": "0x39",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0xf6b3d3EdFCe2aE313FAffE7d6578dfa1e3D00969",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb000000000000000000000000f6b3d3edfce2ae313faffe7d6578dfa1e3d009690000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x3a",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712840412,
+ "chain": 11155111,
+ "commit": "b5e4a4a"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712840540.json b/broadcast/Deploy.s.sol/11155111/run-1712840540.json
new file mode 100644
index 00000000..ed97f3e4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712840540.json
@@ -0,0 +1,130 @@
+{
+ "transactions": [
+ {
+ "hash": "0xc0602c672bb88fd9ca5a5429bfd547e6b2a1001f3955766d8dbb7d4c82b38bd9",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x701810859d77cdba314b27302996fdbc35edfa45",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee6c1",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520d38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcc928362000241843960805183614094015260a051836140b7015260c05183614129015260e0518361414f0152518261407301525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fac8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fac833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d81565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f66565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fac8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fac8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fac8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310d565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310d565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ed565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613339565b92909115610d7d5761001b93613360565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b7565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ee565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613233565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fac8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d38565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c87565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fac8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613429565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613429565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fac8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136b0565b603460148301359201906135e3565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613497565b611a46565b6018860135956038019491612274565b6135e3565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a2565b600284036125c9576121f993506001600160a01b0316613858565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fe565b91926004810361267e57506121f99261264b91612624600080516020614fac8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374f565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fac8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fac8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a2565b613b58565b906121f992916139ee565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb5565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b61292993613360565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613312565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613233565b91386128aa565b6001600160a01b03166000908152600080516020614f8c8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fac8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fac83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf4565b612b7a926135e3565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fac833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4c5780600114612c3f57600214612c295760206000fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca694612c9a91858585613f54565b94929391969096614048565b509065ffffffffffff8091164210918215612d2c575b5050612d1957612cfa612cd0602096612d38565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbc565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7981610e5c565b519020614071565b90818060081b9160ff839260f01c16600214612d9957565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd8610ef7565b92612de2816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e10918401612da8565b604086015260608201358381116101d35781612e2d918401612da8565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e68918401612da8565b60e086015261010092838301359081116101d357612e869201612da8565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f19612ee9612ed761012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f4a906040928652606060208701526060860190612e9b565b930152565b929190612f4a602091604086526040860190612e9b565b929092600092612f763682612dc3565b916101009182810191612f898383611f2a565b90949093600160f81b936001600160f81b031993841685146130d2575b505050871603613033575050604051639700320360e01b815293602092859283916000918391612fd99160048401612f4f565b039260581c6001600160a01b03165af190811561089057611d7d92600092613002575b5061456f565b61302591925060203d60201161302c575b61301d8183610ec9565b810190612e8c565b9038612ffc565b503d613013565b909460081b93909291600160f01b613050611eae611ea788611d30565b166130c057600061307161306b60209661309b99858a61436f565b9461456f565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2d565b03926001600160a01b03165af190811561089057611d7d92600092613002575061456f565b6040516314b9743f60e01b8152600490fd5b909195506130ee9398506130e7929450611f2a565b9088614185565b969192909361310185899599369161254d565b90860152388080612fa6565b600080516020614fac83398151915280549163ffffffff92600a848260a81c1601908482116131d75782851691851682116131c55760c81c84161015612b8257600080516020614fac833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131935750565b600080516020614fac833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f981610e92565b600681526512d95c9b995b60d21b60208201529060405161321981610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a357505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132de95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fd575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a3600080946133bc60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cd5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f95760200190565b6133d6565b80518210156133f95760209160051b010190565b908210156133f95761024d9160051b810190611f2a565b96959192939694909460005b86811061344757505050505050509050565b806134888a60019360051b85013561345e81610277565b6134748461346c818c6133fe565b51938c613412565b90613480868b8b613412565b949093612a14565b01613435565b90156133f95790565b6001600160a01b039391929190848316156135da575b6134b690611cf8565b946134e26134d56134c7838561348e565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135bb575050908061350492861693611a73565b823b156101d35761352f92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356b61358b936001936101e3986135a8575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b592610e44565b3861354d565b92509250509491940361296a57600161358b9161356b6101e39661354f565b600192506134ad565b6001600160a01b031691821580156136a6575b6136a15760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613682575b501561364d576001600160f81b0319806136426134c7848661348e565b161461364d57505050565b8061365792611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369b915060203d6020116108f8576108ea8183610ec9565b38613625565b505050565b50600183146135f6565b919392916001600160a01b039081841615613735575b166000818152600080516020614f8c8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613731576133bc9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c6565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137af876137a16020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c28c610e77565b828c525193f1943d90816137f5575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d1565b61380e6138419194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8c8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d46138c2600080516020614fac8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e4611c2583611b7a565b936139056138f184611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393e57506121f9929161392c91369161254d565b9060581c6001600160a01b031661374f565b600160f91b141590506103a9576101e39160081b61460a565b60405161396381610e92565b600181528060005b6020808210156139865790606060209282850101520161396b565b50505090565b9061399682610f04565b6139a36040519182610ec9565b82815280926139b4601f1991610f04565b019060005b8281106139c557505050565b8060606020809385010152016139b9565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a8057505050613a27908035019060208201913590565b929093168015600014613a3f575050611d7d91614888565b03613a4d57611d7d916147cb565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2357505090613a979161471f565b93909294613aa3613957565b971680613ac8575050613ab593614770565b613abe836133ec565b526121f9826133ec565b03613a4d57613ad693614747565b613adf846133ec565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1e613b11846133ec565b51604051918291826139d6565b0390a1565b909650919390925003613a4d57613b4e8280613b486122f16122eb613b549787611a57565b93611a90565b91613339565b5050565b6001600160a01b03169081158015613bab575b6136a15782156133f9576001600160f81b03198135811614613b8c57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6b565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0957505050565b6000526020600020918201915b828110613c2257505050565b818155600101613c16565b6001600160501b03199035818116939260168110613c4a57505050565b60160360031b82901b16169150565b80548210156133f95760005260206000200190600090565b805468010000000000000000811015610e5757613c9391600182018155613c59565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce557505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4c575b613f3a57600180613d1b85611d30565b0154613f21575b60001982019260005b848110613e445750613e099594613e17949093613ded9350613de69250613d86613dd7613dbe611eae613db8613db287878e613dad8e613d7e611c626122f16122eb613d78898989613412565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613412565b90611ae9565b90613cc8565b613dc788611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613412565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb2565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373e565b613e9b611c62611c626122f16122eb613d78868a8e613dad8f613e678e91611d30565b01613e95613e88613e82613e7c888888613412565b90611aad565b90613c2d565b6001600160501b03191690565b90613c71565b90613eaa613de682878b613412565b90613ecb604091613e0983519485928d63ffffffff60e01b168a8501613cb2565b833b156101d3576000938492613ef592519586809481936306d61fe760e41b83526004830161373e565b03925af1918215610890578492613f0e575b5001613d2b565b8061088a613f1b92610e44565b38613f07565b613f356001613f2f86611d30565b01613bf5565b613d22565b60405163b62d956d60e01b8152600490fd5b508015613d0b565b8484613fd792613fc2979694989560405191613f6f83610ead565b613fd160009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614921565b60ff80613ff0613fea6134c7878661348e565b60f81c90565b16036140365761401f61400a8461401a9561402f94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614069575b5060d01c92565b925038614062565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140df565b91929092614191612720565b9061419c9085611a57565b6141a591612274565b60601c60208201819052600080516020614fac8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142169261254d565b80519060200120913661422a90888861254d565b805190602001203661423d908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c961010082610ec9565b5190206142d590614071565b607489013589018d8b82013591016142ec92614b73565b9a6142f79488612a14565b6143018183614d10565b61430a91611a1b565b61431391611b4e565b61431c91614eca565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434957505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9b565b60009493916001868161438185611d30565b016000835b6143ce575b5050505060ff806143a2613fea6134c7878961348e565b1603614036576101006143c66143bf8561401f96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614567576143ff6143f76143ea8385613c59565b90549060031b1c60501b90565b908160501c90565b98909761441b614415613fea6134c7858561348e565b60ff1690565b808403614536575090818161445461444861444261443c8461447198611af7565b9061432c565b60c01c90565b6001600160401b031690565b600901916144666143bf848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448b575b50830183614386565b99866144c8929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614358565b0393165af1958615610890578896614517575b505084166144fd5750506144f385949392859261456f565b9a91929350614482565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452e929650803d1061302c5761301d8183610ec9565b9338806144db565b909991989083111561455457604051630760bdcf60e11b8152600490fd5b61455c6124fa565b610100880152614476565b96959661438b565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146145a057505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614602575b83811680156145fb575b8781109088180280881897146145f3575b508181119082180218921716171790565b9550386145e2565b50806145d1565b9550856145c7565b9190803501916020906020840193359061462381611d30565b9260019060018501906001825401850361470d57906000835b61469f575b5050505061468e9161468982613ded6101e397986146666001613f2f613e0998611d30565b875461467d9060101c6001600160a01b0316611c62565b94600019810191613412565b61374f565b5080546001600160b01b0319169055565b8154811015614708579083826146fe613e098c6146f08a6146d5868e6146cd6143f76143ea8c9f9e8e613c59565b969050613412565b6040519586939092906001600160e01b0319168c8501613cb2565b6001600160a01b031661374f565b500190919261463c565b614641565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479f573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f95760051b81013590605e19813603018212156101d3570190565b9190916147d78361398c565b9260005b8181106147e757505050565b806147f560019284866147a9565b8035614800816101c2565b6148216020809360409361481685830183611f2a565b939092013590614747565b61482b858b6133fe565b521561483a575b5050016147db565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487e614869858b6133fe565b51838051948594888652850152830190610bef565b0390a13880614832565b9190916148948361398c565b9260005b8181106148a457505050565b806148da60206148b760019486886147a9565b80356148c2816101c2565b6148cf6040830183611f2a565b939092013590614770565b6148e482886133fe565b526148ef81876133fe565b5001614898565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161494061401a845163ffffffff60e01b1690565b01936000936000958054965b87811061495e57505050505050505050565b806149706143f76143ea8c9486613c59565b6001600160a01b031660a0880190815260808801959091614999906001600160f01b0319168752565b6149b36149ac613fea6134c78a8561348e565b60ff168952565b6149c1614415895160ff1690565b808403614b3b57508681816149e661444861444261443c614a3a9c9d614a0d98611af7565b60208c018181528c60c0614a026143bf60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2c906001600160f01b031916611eae565b166001600160f01b03191690565b15614a47575b500161494c565b51909150614a5d906001600160a01b0316611c62565b8651614a8190614a74906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac66101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f6565b03915afa938415610890578b94614b1c575b50506001600160a01b038316614b015750860180518b9392614af99161456f565b905238614a40565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b33929450803d1061302c5761301d8183610ec9565b913880614ad8565b839196945010600014614b5a57604051630760bdcf60e11b8152600490fd5b614a3a8b93614b69368861252a565b60c08a0152614a12565b600080516020614fac8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c365750604051637aa8f17760e11b8152936020938593909284928392614bcb923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c17575b505b6001600160e01b0319166374eca2c160e11b01614c0557565b6040516362467c7760e11b8152600490fd5b614c30915060203d602011611e8657611e7e8183610ec9565b38614bea565b919550929190600160f91b036103a957602091614c599160081b95843088613f54565b60405163392dffaf60e01b81529297929586949385938493614c8c93909230906001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091614cae575b50614bec565b614cc7915060203d602011611e8657611e7e8183610ec9565b38614ca8565b15614cd457565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1d6105c98383611a1b565b906004831015614d2c57505050565b602c8310614ebc57614d47611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d81614d736134d56134c7878761348e565b6001600160f81b0319161590565b80614e2b575b94614dc861242895611c6295614dcd956101e39b956122f19a614ddd575b614db8611c626122f16122eb8a8a611b25565b916001600160a01b031690613497565b611b25565b602c86013595604c019491612274565b614e26606c8701358701614e20602c604c830192013580614e07611c626122f16122eb8488611a57565b93614e1b856001600160a01b038a16614f2f565b611a90565b916135e3565b614da5565b5091939092956040519163ecd0596160e01b835260208380614e5560048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcd97614dc895600091614e9d575b50959a50959b5095509550955050614d87565b614eb6915060203d6020116108f8576108ea8183610ec9565b38614e8a565b505060046101e39114614ccd565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efc82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f82575b16600052600080516020614f8c83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4656fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x38",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x53b260e2af5aa71931e40c149a294e23739e3d934126b2f8f77d436dc18d1d45",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0xf6b3d3edfce2ae313faffe7d6578dfa1e3d00969",
+ "function": null,
+ "arguments": [
+ "0x701810859d77CdbA314b27302996fDBC35edFa45"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000701810859d77cdba314b27302996fdbc35edfa45",
+ "nonce": "0x39",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x248755f82a3728c9a08562d8414b8fd46a04ee96e78a561438c1893539c708a8",
+ "transactionType": "CALL",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0xf6b3d3EdFCe2aE313FAffE7d6578dfa1e3D00969",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb000000000000000000000000f6b3d3edfce2ae313faffe7d6578dfa1e3d009690000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x3a",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb59a4d",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xc0602c672bb88fd9ca5a5429bfd547e6b2a1001f3955766d8dbb7d4c82b38bd9",
+ "transactionIndex": "0x3a",
+ "blockHash": "0xc6dff577531959b3b9256e3690159a3b615606d727540dffee9f004ffc91a691",
+ "blockNumber": "0x56983a",
+ "gasUsed": "0x44ba1b",
+ "effectiveGasPrice": "0x193f597db",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x701810859d77cdba314b27302996fdbc35edfa45"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb9b590",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x53b260e2af5aa71931e40c149a294e23739e3d934126b2f8f77d436dc18d1d45",
+ "transactionIndex": "0x3b",
+ "blockHash": "0xc6dff577531959b3b9256e3690159a3b615606d727540dffee9f004ffc91a691",
+ "blockNumber": "0x56983a",
+ "gasUsed": "0x41b43",
+ "effectiveGasPrice": "0x193f597db",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0xf6b3d3edfce2ae313faffe7d6578dfa1e3d00969"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xba6aa3",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x248755f82a3728c9a08562d8414b8fd46a04ee96e78a561438c1893539c708a8",
+ "transactionIndex": "0x3c",
+ "blockHash": "0xc6dff577531959b3b9256e3690159a3b615606d727540dffee9f004ffc91a691",
+ "blockNumber": "0x56983a",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x193f597db",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712840540,
+ "chain": 11155111,
+ "commit": "b5e4a4a"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-1712840868.json b/broadcast/Deploy.s.sol/11155111/run-1712840868.json
new file mode 100644
index 00000000..91d55ca4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-1712840868.json
@@ -0,0 +1,130 @@
+{
+ "transactions": [
+ {
+ "hash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x3b",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x3c",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda",
+ "transactionType": "CALL",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x3d",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xfcee88",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737",
+ "transactionIndex": "0x58",
+ "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034",
+ "blockNumber": "0x569855",
+ "gasUsed": "0x44b92b",
+ "effectiveGasPrice": "0x17c9db020",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x10109cb",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59",
+ "transactionIndex": "0x59",
+ "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034",
+ "blockNumber": "0x569855",
+ "gasUsed": "0x41b43",
+ "effectiveGasPrice": "0x17c9db020",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x101bede",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda",
+ "transactionIndex": "0x5a",
+ "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034",
+ "blockNumber": "0x569855",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x17c9db020",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712840868,
+ "chain": 11155111,
+ "commit": "b5e4a4a"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155111/run-latest.json b/broadcast/Deploy.s.sol/11155111/run-latest.json
new file mode 100644
index 00000000..91d55ca4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155111/run-latest.json
@@ -0,0 +1,130 @@
+{
+ "transactions": [
+ {
+ "hash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x3b",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x3c",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda",
+ "transactionType": "CALL",
+ "contractName": "FactoryStaker",
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x3d",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xfcee88",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737",
+ "transactionIndex": "0x58",
+ "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034",
+ "blockNumber": "0x569855",
+ "gasUsed": "0x44b92b",
+ "effectiveGasPrice": "0x17c9db020",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x10109cb",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59",
+ "transactionIndex": "0x59",
+ "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034",
+ "blockNumber": "0x569855",
+ "gasUsed": "0x41b43",
+ "effectiveGasPrice": "0x17c9db020",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x101bede",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda",
+ "transactionIndex": "0x5a",
+ "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034",
+ "blockNumber": "0x569855",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x17c9db020",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712840868,
+ "chain": 11155111,
+ "commit": "b5e4a4a"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155420/run-1712853341.json b/broadcast/Deploy.s.sol/11155420/run-1712853341.json
new file mode 100644
index 00000000..b35e5a76
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155420/run-1712853341.json
@@ -0,0 +1,59 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0xaa37dc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0xaa37dc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853341,
+ "chain": 11155420,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155420/run-1712853370.json b/broadcast/Deploy.s.sol/11155420/run-1712853370.json
new file mode 100644
index 00000000..b2b2cd71
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155420/run-1712853370.json
@@ -0,0 +1,113 @@
+{
+ "transactions": [
+ {
+ "hash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0xaa37dc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0xaa37dc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xe287e",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c",
+ "transactionIndex": "0x4",
+ "blockHash": "0x3fc9197b42b5ed7a19ee5a1388ef4f48636586e26414d6887226e988dc28d56b",
+ "blockNumber": "0xa09ae3",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0xf433c",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0xbac3fa6d19be",
+ "l1GasPrice": "0x139c231f",
+ "l1GasUsed": "0x8dc"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5a28a",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945",
+ "blockNumber": "0xa09ae4",
+ "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad",
+ "transactionIndex": "0x3",
+ "logIndex": "0x6",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad",
+ "transactionIndex": "0x3",
+ "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945",
+ "blockNumber": "0xa09ae4",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0xf433c",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0xd125b91c9b75",
+ "l1GasPrice": "0x13458264",
+ "l1GasUsed": "0x92c"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853370,
+ "chain": 11155420,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/11155420/run-latest.json b/broadcast/Deploy.s.sol/11155420/run-latest.json
new file mode 100644
index 00000000..b2b2cd71
--- /dev/null
+++ b/broadcast/Deploy.s.sol/11155420/run-latest.json
@@ -0,0 +1,113 @@
+{
+ "transactions": [
+ {
+ "hash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0xaa37dc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0xaa37dc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xe287e",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c",
+ "transactionIndex": "0x4",
+ "blockHash": "0x3fc9197b42b5ed7a19ee5a1388ef4f48636586e26414d6887226e988dc28d56b",
+ "blockNumber": "0xa09ae3",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0xf433c",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0xbac3fa6d19be",
+ "l1GasPrice": "0x139c231f",
+ "l1GasUsed": "0x8dc"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5a28a",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945",
+ "blockNumber": "0xa09ae4",
+ "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad",
+ "transactionIndex": "0x3",
+ "logIndex": "0x6",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad",
+ "transactionIndex": "0x3",
+ "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945",
+ "blockNumber": "0xa09ae4",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0xf433c",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0xd125b91c9b75",
+ "l1GasPrice": "0x13458264",
+ "l1GasUsed": "0x92c"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853370,
+ "chain": 11155420,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/137/run-1712900481.json b/broadcast/Deploy.s.sol/137/run-1712900481.json
new file mode 100644
index 00000000..90fb70ff
--- /dev/null
+++ b/broadcast/Deploy.s.sol/137/run-1712900481.json
@@ -0,0 +1,172 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x2e",
+ "chainId": "0x89",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x2f",
+ "chainId": "0x89",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1044556",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000055fbdad206a140000000000000000000000000000000000000000000000173e59c031424266b500000000000000000000000000000000000000000000072ea660d016f7a28d270000000000000000000000000000000000000000000000173e5460739521fca100000000000000000000000000000000000000000000072ea6662fd4a4c2f73b",
+ "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4",
+ "blockNumber": "0x35257b9",
+ "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0",
+ "transactionIndex": "0x48",
+ "logIndex": "0x4c2",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000200000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000000001000000000000000000000000000000100000000000002000000000000000000000000000000000000000000000000000000000100000",
+ "type": "0x0",
+ "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0",
+ "transactionIndex": "0x48",
+ "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4",
+ "blockNumber": "0x35257b9",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x3310148ffc",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x89fb08",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000173df051e7ad9088fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173c8d0c6f500688fd000000000000000000000000000000000000000000000000016345785d8a0000",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe0",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5",
+ "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000033da085acde16f6ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033f03cb253ba0f6ce",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe1",
+ "removed": false
+ },
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe2",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000006f65114f9c9550000000000000000000000000000000000000000000000173e35a20886ee8b0100000000000000000000000000000000000000000000072ede6a10c0b3ba0b9a0000000000000000000000000000000000000000000000173e2eabb771f4c1ac00000000000000000000000000000000000000000000072ede710711c8b3d4ef",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe3",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000210000000000000000000000000000800040000000000000000100000000000200000000000800000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000400001000000000000000040000000800000108000000000002100000000000000000000000000000000800a00000000000100000000100000",
+ "type": "0x0",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x3310148ffc",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712900481,
+ "chain": 137,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/137/run-latest.json b/broadcast/Deploy.s.sol/137/run-latest.json
new file mode 100644
index 00000000..90fb70ff
--- /dev/null
+++ b/broadcast/Deploy.s.sol/137/run-latest.json
@@ -0,0 +1,172 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x2e",
+ "chainId": "0x89",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x2f",
+ "chainId": "0x89",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1044556",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000055fbdad206a140000000000000000000000000000000000000000000000173e59c031424266b500000000000000000000000000000000000000000000072ea660d016f7a28d270000000000000000000000000000000000000000000000173e5460739521fca100000000000000000000000000000000000000000000072ea6662fd4a4c2f73b",
+ "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4",
+ "blockNumber": "0x35257b9",
+ "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0",
+ "transactionIndex": "0x48",
+ "logIndex": "0x4c2",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000200000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000000001000000000000000000000000000000100000000000002000000000000000000000000000000000000000000000000000000000100000",
+ "type": "0x0",
+ "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0",
+ "transactionIndex": "0x48",
+ "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4",
+ "blockNumber": "0x35257b9",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x3310148ffc",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x89fb08",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000173df051e7ad9088fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173c8d0c6f500688fd000000000000000000000000000000000000000000000000016345785d8a0000",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe0",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5",
+ "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000033da085acde16f6ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033f03cb253ba0f6ce",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe1",
+ "removed": false
+ },
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe2",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000006f65114f9c9550000000000000000000000000000000000000000000000173e35a20886ee8b0100000000000000000000000000000000000000000000072ede6a10c0b3ba0b9a0000000000000000000000000000000000000000000000173e2eabb771f4c1ac00000000000000000000000000000000000000000000072ede710711c8b3d4ef",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "logIndex": "0xe3",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000210000000000000000000000000000800040000000000000000100000000000200000000000800000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000400001000000000000000040000000800000108000000000002100000000000000000000000000000000800a00000000000100000000100000",
+ "type": "0x0",
+ "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184",
+ "transactionIndex": "0x3f",
+ "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0",
+ "blockNumber": "0x35257bc",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x3310148ffc",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712900481,
+ "chain": 137,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925069.json b/broadcast/Deploy.s.sol/168587773/run-1712925069.json
new file mode 100644
index 00000000..7ae8c0a8
--- /dev/null
+++ b/broadcast/Deploy.s.sol/168587773/run-1712925069.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x5",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x6",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x7",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925069,
+ "chain": 168587773,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925099.json b/broadcast/Deploy.s.sol/168587773/run-1712925099.json
new file mode 100644
index 00000000..11d6a0dd
--- /dev/null
+++ b/broadcast/Deploy.s.sol/168587773/run-1712925099.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x5",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x6",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x7",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925099,
+ "chain": 168587773,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925243.json b/broadcast/Deploy.s.sol/168587773/run-1712925243.json
new file mode 100644
index 00000000..7dd54506
--- /dev/null
+++ b/broadcast/Deploy.s.sol/168587773/run-1712925243.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x5",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x6",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x7",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925243,
+ "chain": 168587773,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925385.json b/broadcast/Deploy.s.sol/168587773/run-1712925385.json
new file mode 100644
index 00000000..40bd4f4b
--- /dev/null
+++ b/broadcast/Deploy.s.sol/168587773/run-1712925385.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x5",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x6",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x7",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925385,
+ "chain": 168587773,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925425.json b/broadcast/Deploy.s.sol/168587773/run-1712925425.json
new file mode 100644
index 00000000..d59907ab
--- /dev/null
+++ b/broadcast/Deploy.s.sol/168587773/run-1712925425.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x5",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x6",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x7",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925425,
+ "chain": 168587773,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/168587773/run-latest.json b/broadcast/Deploy.s.sol/168587773/run-latest.json
new file mode 100644
index 00000000..d59907ab
--- /dev/null
+++ b/broadcast/Deploy.s.sol/168587773/run-latest.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x5",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x6",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x7",
+ "chainId": "0xa0c71fd",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712925425,
+ "chain": 168587773,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/204/run-1712900818.json b/broadcast/Deploy.s.sol/204/run-1712900818.json
new file mode 100644
index 00000000..26ff09d5
--- /dev/null
+++ b/broadcast/Deploy.s.sol/204/run-1712900818.json
@@ -0,0 +1,158 @@
+{
+ "transactions": [
+ {
+ "hash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0xd",
+ "chainId": "0xcc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xe",
+ "chainId": "0xcc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xf",
+ "chainId": "0xcc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x76ee91",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f",
+ "transactionIndex": "0x32",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0xa",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null,
+ "l1Fee": "0x2661e7f0c8400",
+ "l1FeeScalar": "0.684",
+ "l1GasPrice": "0xb2d05e00",
+ "l1GasUsed": "0x50564"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x77a3a4",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007",
+ "transactionIndex": "0x33",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0xa",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x4861c5d3800",
+ "l1FeeScalar": "0.684",
+ "l1GasPrice": "0xb2d05e00",
+ "l1GasUsed": "0x978"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x78913f",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8",
+ "transactionIndex": "0x34",
+ "logIndex": "0x3d",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8",
+ "transactionIndex": "0x34",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0xa",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x4ac55100800",
+ "l1FeeScalar": "0.684",
+ "l1GasPrice": "0xb2d05e00",
+ "l1GasUsed": "0x9c8"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712900818,
+ "chain": 204,
+ "commit": "1de94fa"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/204/run-latest.json b/broadcast/Deploy.s.sol/204/run-latest.json
new file mode 100644
index 00000000..26ff09d5
--- /dev/null
+++ b/broadcast/Deploy.s.sol/204/run-latest.json
@@ -0,0 +1,158 @@
+{
+ "transactions": [
+ {
+ "hash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0xd",
+ "chainId": "0xcc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xe",
+ "chainId": "0xcc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xf",
+ "chainId": "0xcc",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x76ee91",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f",
+ "transactionIndex": "0x32",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0xa",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null,
+ "l1Fee": "0x2661e7f0c8400",
+ "l1FeeScalar": "0.684",
+ "l1GasPrice": "0xb2d05e00",
+ "l1GasUsed": "0x50564"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x77a3a4",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007",
+ "transactionIndex": "0x33",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0xa",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x4861c5d3800",
+ "l1FeeScalar": "0.684",
+ "l1GasPrice": "0xb2d05e00",
+ "l1GasUsed": "0x978"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x78913f",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8",
+ "transactionIndex": "0x34",
+ "logIndex": "0x3d",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8",
+ "transactionIndex": "0x34",
+ "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239",
+ "blockNumber": "0x142adce",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0xa",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x4ac55100800",
+ "l1FeeScalar": "0.684",
+ "l1GasPrice": "0xb2d05e00",
+ "l1GasUsed": "0x9c8"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712900818,
+ "chain": 204,
+ "commit": "1de94fa"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/42161/run-1712897474.json b/broadcast/Deploy.s.sol/42161/run-1712897474.json
new file mode 100644
index 00000000..c9c933ba
--- /dev/null
+++ b/broadcast/Deploy.s.sol/42161/run-1712897474.json
@@ -0,0 +1,111 @@
+{
+ "transactions": [
+ {
+ "hash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x1b35f",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1e",
+ "chainId": "0xa4b1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x208e8",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1f",
+ "chainId": "0xa4b1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1293f",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba",
+ "transactionIndex": "0x1",
+ "blockHash": "0xd39a7c665479e96fb1817d7c70d7b980fa68634cbdc9ed42e143f6f2a37600c6",
+ "blockNumber": "0xbede03f",
+ "gasUsed": "0x1293f",
+ "effectiveGasPrice": "0x989680",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x742c",
+ "l1BlockNumber": "0x12ba404"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x801bd",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5",
+ "blockNumber": "0xbede043",
+ "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3",
+ "transactionIndex": "0x3",
+ "logIndex": "0x2",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3",
+ "transactionIndex": "0x3",
+ "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5",
+ "blockNumber": "0xbede043",
+ "gasUsed": "0x16708",
+ "effectiveGasPrice": "0x989680",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x796d",
+ "l1BlockNumber": "0x12ba404"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712897474,
+ "chain": 42161,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/42161/run-latest.json b/broadcast/Deploy.s.sol/42161/run-latest.json
new file mode 100644
index 00000000..c9c933ba
--- /dev/null
+++ b/broadcast/Deploy.s.sol/42161/run-latest.json
@@ -0,0 +1,111 @@
+{
+ "transactions": [
+ {
+ "hash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x1b35f",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1e",
+ "chainId": "0xa4b1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x208e8",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1f",
+ "chainId": "0xa4b1",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1293f",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba",
+ "transactionIndex": "0x1",
+ "blockHash": "0xd39a7c665479e96fb1817d7c70d7b980fa68634cbdc9ed42e143f6f2a37600c6",
+ "blockNumber": "0xbede03f",
+ "gasUsed": "0x1293f",
+ "effectiveGasPrice": "0x989680",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x742c",
+ "l1BlockNumber": "0x12ba404"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x801bd",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5",
+ "blockNumber": "0xbede043",
+ "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3",
+ "transactionIndex": "0x3",
+ "logIndex": "0x2",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3",
+ "transactionIndex": "0x3",
+ "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5",
+ "blockNumber": "0xbede043",
+ "gasUsed": "0x16708",
+ "effectiveGasPrice": "0x989680",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x796d",
+ "l1BlockNumber": "0x12ba404"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712897474,
+ "chain": 42161,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/421614/run-1712852878.json b/broadcast/Deploy.s.sol/421614/run-1712852878.json
new file mode 100644
index 00000000..32413539
--- /dev/null
+++ b/broadcast/Deploy.s.sol/421614/run-1712852878.json
@@ -0,0 +1,111 @@
+{
+ "transactions": [
+ {
+ "hash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x119036",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1c",
+ "chainId": "0x66eee",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x12809b",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1d",
+ "chainId": "0x66eee",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x8801f",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62",
+ "transactionIndex": "0x1",
+ "blockHash": "0x56a845331f68cddabf7bd9b1b92ac55abda5e5cb2cf346fdecb396d503c13be9",
+ "blockNumber": "0x1f2254d",
+ "gasUsed": "0x8801f",
+ "effectiveGasPrice": "0x1a77f870",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x7cb0c",
+ "l1BlockNumber": "0x569c14"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1c514d",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537",
+ "blockNumber": "0x1f22551",
+ "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b",
+ "transactionIndex": "0x3",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b",
+ "transactionIndex": "0x3",
+ "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537",
+ "blockNumber": "0x1f22551",
+ "gasUsed": "0x91be7",
+ "effectiveGasPrice": "0x1a529620",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x82e4c",
+ "l1BlockNumber": "0x569c14"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712852878,
+ "chain": 421614,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/421614/run-latest.json b/broadcast/Deploy.s.sol/421614/run-latest.json
new file mode 100644
index 00000000..32413539
--- /dev/null
+++ b/broadcast/Deploy.s.sol/421614/run-latest.json
@@ -0,0 +1,111 @@
+{
+ "transactions": [
+ {
+ "hash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x119036",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1c",
+ "chainId": "0x66eee",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x12809b",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1d",
+ "chainId": "0x66eee",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x8801f",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62",
+ "transactionIndex": "0x1",
+ "blockHash": "0x56a845331f68cddabf7bd9b1b92ac55abda5e5cb2cf346fdecb396d503c13be9",
+ "blockNumber": "0x1f2254d",
+ "gasUsed": "0x8801f",
+ "effectiveGasPrice": "0x1a77f870",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x7cb0c",
+ "l1BlockNumber": "0x569c14"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1c514d",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537",
+ "blockNumber": "0x1f22551",
+ "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b",
+ "transactionIndex": "0x3",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b",
+ "transactionIndex": "0x3",
+ "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537",
+ "blockNumber": "0x1f22551",
+ "gasUsed": "0x91be7",
+ "effectiveGasPrice": "0x1a529620",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x82e4c",
+ "l1BlockNumber": "0x569c14"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712852878,
+ "chain": 421614,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/42170/run-1712904562.json b/broadcast/Deploy.s.sol/42170/run-1712904562.json
new file mode 100644
index 00000000..238c9ac4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/42170/run-1712904562.json
@@ -0,0 +1,152 @@
+{
+ "transactions": [
+ {
+ "hash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0xa",
+ "chainId": "0xa4ba",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xb",
+ "chainId": "0xa4ba",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xc",
+ "chainId": "0xa4ba",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x460c51",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc",
+ "transactionIndex": "0x1",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "gasUsed": "0x460c51",
+ "effectiveGasPrice": "0x2fc9660",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null,
+ "gasUsedForL1": "0x15326",
+ "l1BlockNumber": "0x12ba64e"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x46c66f",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5",
+ "transactionIndex": "0x2",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "gasUsed": "0xba1e",
+ "effectiveGasPrice": "0x2fc9660",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x50b",
+ "l1BlockNumber": "0x12ba64e"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x47b94e",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1",
+ "transactionIndex": "0x3",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1",
+ "transactionIndex": "0x3",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "gasUsed": "0xf2df",
+ "effectiveGasPrice": "0x2fc9660",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x544",
+ "l1BlockNumber": "0x12ba64e"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712904562,
+ "chain": 42170,
+ "commit": "a3cd755"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/42170/run-latest.json b/broadcast/Deploy.s.sol/42170/run-latest.json
new file mode 100644
index 00000000..238c9ac4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/42170/run-latest.json
@@ -0,0 +1,152 @@
+{
+ "transactions": [
+ {
+ "hash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0xa",
+ "chainId": "0xa4ba",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xb",
+ "chainId": "0xa4ba",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xc",
+ "chainId": "0xa4ba",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x460c51",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc",
+ "transactionIndex": "0x1",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "gasUsed": "0x460c51",
+ "effectiveGasPrice": "0x2fc9660",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null,
+ "gasUsedForL1": "0x15326",
+ "l1BlockNumber": "0x12ba64e"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x46c66f",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5",
+ "transactionIndex": "0x2",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "gasUsed": "0xba1e",
+ "effectiveGasPrice": "0x2fc9660",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x50b",
+ "l1BlockNumber": "0x12ba64e"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x47b94e",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1",
+ "transactionIndex": "0x3",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1",
+ "transactionIndex": "0x3",
+ "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a",
+ "blockNumber": "0x3db9e86",
+ "gasUsed": "0xf2df",
+ "effectiveGasPrice": "0x2fc9660",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "gasUsedForL1": "0x544",
+ "l1BlockNumber": "0x12ba64e"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712904562,
+ "chain": 42170,
+ "commit": "a3cd755"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/42220/run-1712924410.json b/broadcast/Deploy.s.sol/42220/run-1712924410.json
new file mode 100644
index 00000000..14c7cb40
--- /dev/null
+++ b/broadcast/Deploy.s.sol/42220/run-1712924410.json
@@ -0,0 +1,238 @@
+{
+ "transactions": [
+ {
+ "hash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b",
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x5",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x6",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x7",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x8",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x9",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xc6dd2",
+ "logs": [
+ {
+ "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "topics": [
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a"
+ ],
+ "data": "0x",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b",
+ "transactionIndex": "0x2",
+ "logIndex": "0x5",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b",
+ "transactionIndex": "0x2",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0x764b0",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5121d9",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0",
+ "transactionIndex": "0x3",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x553cd2",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb",
+ "transactionIndex": "0x4",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0x41af9",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x55f1e5",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d",
+ "transactionIndex": "0x5",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x56df80",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938",
+ "transactionIndex": "0x6",
+ "logIndex": "0x6",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938",
+ "transactionIndex": "0x6",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924410,
+ "chain": 42220,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/42220/run-latest.json b/broadcast/Deploy.s.sol/42220/run-latest.json
new file mode 100644
index 00000000..14c7cb40
--- /dev/null
+++ b/broadcast/Deploy.s.sol/42220/run-latest.json
@@ -0,0 +1,238 @@
+{
+ "transactions": [
+ {
+ "hash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b",
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x5",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x6",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x7",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x8",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x9",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xc6dd2",
+ "logs": [
+ {
+ "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "topics": [
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a"
+ ],
+ "data": "0x",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b",
+ "transactionIndex": "0x2",
+ "logIndex": "0x5",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b",
+ "transactionIndex": "0x2",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0x764b0",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5121d9",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0",
+ "transactionIndex": "0x3",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x553cd2",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb",
+ "transactionIndex": "0x4",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0x41af9",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x55f1e5",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d",
+ "transactionIndex": "0x5",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x56df80",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938",
+ "transactionIndex": "0x6",
+ "logIndex": "0x6",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938",
+ "transactionIndex": "0x6",
+ "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7",
+ "blockNumber": "0x17e3e90",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924410,
+ "chain": 42220,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/43113/run-1712852801.json b/broadcast/Deploy.s.sol/43113/run-1712852801.json
new file mode 100644
index 00000000..9d331352
--- /dev/null
+++ b/broadcast/Deploy.s.sol/43113/run-1712852801.json
@@ -0,0 +1,59 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1b",
+ "chainId": "0xa869",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1c",
+ "chainId": "0xa869",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712852801,
+ "chain": 43113,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/43113/run-1712852835.json b/broadcast/Deploy.s.sol/43113/run-1712852835.json
new file mode 100644
index 00000000..dd7911c4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/43113/run-1712852835.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1b",
+ "chainId": "0xa869",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1c",
+ "chainId": "0xa869",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb513",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af",
+ "transactionIndex": "0x0",
+ "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724",
+ "blockNumber": "0x1e49e2e",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x6fc23ac00",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1a2ae",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724",
+ "blockNumber": "0x1e49e2e",
+ "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989",
+ "transactionIndex": "0x1",
+ "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724",
+ "blockNumber": "0x1e49e2e",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x6fc23ac00",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712852835,
+ "chain": 43113,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/43113/run-latest.json b/broadcast/Deploy.s.sol/43113/run-latest.json
new file mode 100644
index 00000000..dd7911c4
--- /dev/null
+++ b/broadcast/Deploy.s.sol/43113/run-latest.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1b",
+ "chainId": "0xa869",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1c",
+ "chainId": "0xa869",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb513",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af",
+ "transactionIndex": "0x0",
+ "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724",
+ "blockNumber": "0x1e49e2e",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x6fc23ac00",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1a2ae",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724",
+ "blockNumber": "0x1e49e2e",
+ "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989",
+ "transactionIndex": "0x1",
+ "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724",
+ "blockNumber": "0x1e49e2e",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x6fc23ac00",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712852835,
+ "chain": 43113,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/43114/run-1712900579.json b/broadcast/Deploy.s.sol/43114/run-1712900579.json
new file mode 100644
index 00000000..1f96f824
--- /dev/null
+++ b/broadcast/Deploy.s.sol/43114/run-1712900579.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1a",
+ "chainId": "0xa86a",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1b",
+ "chainId": "0xa86a",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x2d28b",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca",
+ "transactionIndex": "0x1",
+ "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb",
+ "blockNumber": "0x2a0d978",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x62b85e900",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x3c026",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb",
+ "blockNumber": "0x2a0d978",
+ "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862",
+ "transactionIndex": "0x2",
+ "logIndex": "0x1",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862",
+ "transactionIndex": "0x2",
+ "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb",
+ "blockNumber": "0x2a0d978",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x62b85e900",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712900579,
+ "chain": 43114,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/43114/run-latest.json b/broadcast/Deploy.s.sol/43114/run-latest.json
new file mode 100644
index 00000000..1f96f824
--- /dev/null
+++ b/broadcast/Deploy.s.sol/43114/run-latest.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1a",
+ "chainId": "0xa86a",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1b",
+ "chainId": "0xa86a",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x2d28b",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca",
+ "transactionIndex": "0x1",
+ "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb",
+ "blockNumber": "0x2a0d978",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x62b85e900",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x3c026",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb",
+ "blockNumber": "0x2a0d978",
+ "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862",
+ "transactionIndex": "0x2",
+ "logIndex": "0x1",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862",
+ "transactionIndex": "0x2",
+ "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb",
+ "blockNumber": "0x2a0d978",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x62b85e900",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712900579,
+ "chain": 43114,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/44787/run-1712924330.json b/broadcast/Deploy.s.sol/44787/run-1712924330.json
new file mode 100644
index 00000000..195525c5
--- /dev/null
+++ b/broadcast/Deploy.s.sol/44787/run-1712924330.json
@@ -0,0 +1,238 @@
+{
+ "transactions": [
+ {
+ "hash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53",
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x5",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x6",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x7",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x8",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x9",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x764b0",
+ "logs": [
+ {
+ "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "topics": [
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a"
+ ],
+ "data": "0x",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53",
+ "transactionIndex": "0x0",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53",
+ "transactionIndex": "0x0",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0x764b0",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x4c18b7",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6",
+ "transactionIndex": "0x1",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5033b0",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369",
+ "transactionIndex": "0x2",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0x41af9",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x50e8c3",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c",
+ "transactionIndex": "0x3",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x51d65e",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1",
+ "transactionIndex": "0x4",
+ "logIndex": "0x1",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1",
+ "transactionIndex": "0x4",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924330,
+ "chain": 44787,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/44787/run-latest.json b/broadcast/Deploy.s.sol/44787/run-latest.json
new file mode 100644
index 00000000..195525c5
--- /dev/null
+++ b/broadcast/Deploy.s.sol/44787/run-latest.json
@@ -0,0 +1,238 @@
+{
+ "transactions": [
+ {
+ "hash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53",
+ "transactionType": "CREATE2",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa3646",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "nonce": "0x5",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x6",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369",
+ "transactionType": "CREATE2",
+ "contractName": "KernelFactory",
+ "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f",
+ "function": null,
+ "arguments": [
+ "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x6010c",
+ "value": "0x0",
+ "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "nonce": "0x7",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x8",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x9",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x764b0",
+ "logs": [
+ {
+ "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "topics": [
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a"
+ ],
+ "data": "0x",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53",
+ "transactionIndex": "0x0",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53",
+ "transactionIndex": "0x0",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0x764b0",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x4c18b7",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6",
+ "transactionIndex": "0x1",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5033b0",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369",
+ "transactionIndex": "0x2",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0x41af9",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x50e8c3",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c",
+ "transactionIndex": "0x3",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x51d65e",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1",
+ "transactionIndex": "0x4",
+ "logIndex": "0x1",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1",
+ "transactionIndex": "0x4",
+ "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df",
+ "blockNumber": "0x166aead",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924330,
+ "chain": 44787,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/56/run-1712900012.json b/broadcast/Deploy.s.sol/56/run-1712900012.json
new file mode 100644
index 00000000..118f0581
--- /dev/null
+++ b/broadcast/Deploy.s.sol/56/run-1712900012.json
@@ -0,0 +1,61 @@
+{
+ "transactions": [
+ {
+ "hash": "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x15",
+ "chainId": "0x38",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x16",
+ "chainId": "0x38",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2"
+ ],
+ "returns": {},
+ "timestamp": 1712900012,
+ "chain": 56,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/56/run-latest.json b/broadcast/Deploy.s.sol/56/run-latest.json
new file mode 100644
index 00000000..118f0581
--- /dev/null
+++ b/broadcast/Deploy.s.sol/56/run-latest.json
@@ -0,0 +1,61 @@
+{
+ "transactions": [
+ {
+ "hash": "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x15",
+ "chainId": "0x38",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x16",
+ "chainId": "0x38",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2"
+ ],
+ "returns": {},
+ "timestamp": 1712900012,
+ "chain": 56,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/59140/run-1712853413.json b/broadcast/Deploy.s.sol/59140/run-1712853413.json
new file mode 100644
index 00000000..852bdaf8
--- /dev/null
+++ b/broadcast/Deploy.s.sol/59140/run-1712853413.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xe",
+ "chainId": "0xe704",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xf",
+ "chainId": "0xe704",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb513",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50",
+ "transactionIndex": "0x0",
+ "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50",
+ "blockNumber": "0x493086",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x23c34607",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1a2ae",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50",
+ "blockNumber": "0x493086",
+ "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3",
+ "transactionIndex": "0x1",
+ "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50",
+ "blockNumber": "0x493086",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x23c34607",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853413,
+ "chain": 59140,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/59140/run-latest.json b/broadcast/Deploy.s.sol/59140/run-latest.json
new file mode 100644
index 00000000..852bdaf8
--- /dev/null
+++ b/broadcast/Deploy.s.sol/59140/run-latest.json
@@ -0,0 +1,107 @@
+{
+ "transactions": [
+ {
+ "hash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xe",
+ "chainId": "0xe704",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xf",
+ "chainId": "0xe704",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb513",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50",
+ "transactionIndex": "0x0",
+ "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50",
+ "blockNumber": "0x493086",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x23c34607",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x1a2ae",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50",
+ "blockNumber": "0x493086",
+ "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3",
+ "transactionIndex": "0x1",
+ "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50",
+ "blockNumber": "0x493086",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x23c34607",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853413,
+ "chain": 59140,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/59144/run-1712904298.json b/broadcast/Deploy.s.sol/59144/run-1712904298.json
new file mode 100644
index 00000000..a712e51b
--- /dev/null
+++ b/broadcast/Deploy.s.sol/59144/run-1712904298.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x15",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x16",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x17",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712904298,
+ "chain": 59144,
+ "commit": "a3cd755"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/59144/run-1712904302.json b/broadcast/Deploy.s.sol/59144/run-1712904302.json
new file mode 100644
index 00000000..55fadc75
--- /dev/null
+++ b/broadcast/Deploy.s.sol/59144/run-1712904302.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x15",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x16",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x17",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712904302,
+ "chain": 59144,
+ "commit": "a3cd755"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/59144/run-1712904331.json b/broadcast/Deploy.s.sol/59144/run-1712904331.json
new file mode 100644
index 00000000..0d079338
--- /dev/null
+++ b/broadcast/Deploy.s.sol/59144/run-1712904331.json
@@ -0,0 +1,146 @@
+{
+ "transactions": [
+ {
+ "hash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x15",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x16",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x17",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5cfb9e",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921",
+ "transactionIndex": "0xb",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0x4425d46",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5db0b1",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172",
+ "transactionIndex": "0xc",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x4425d46",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5e9e4c",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b",
+ "transactionIndex": "0xd",
+ "logIndex": "0x24",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b",
+ "transactionIndex": "0xd",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x4425d46",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712904331,
+ "chain": 59144,
+ "commit": "a3cd755"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/59144/run-latest.json b/broadcast/Deploy.s.sol/59144/run-latest.json
new file mode 100644
index 00000000..0d079338
--- /dev/null
+++ b/broadcast/Deploy.s.sol/59144/run-latest.json
@@ -0,0 +1,146 @@
+{
+ "transactions": [
+ {
+ "hash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x15",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x16",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x17",
+ "chainId": "0xe708",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5cfb9e",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921",
+ "transactionIndex": "0xb",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "gasUsed": "0x44b407",
+ "effectiveGasPrice": "0x4425d46",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5db0b1",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172",
+ "transactionIndex": "0xc",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x4425d46",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x5e9e4c",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b",
+ "transactionIndex": "0xd",
+ "logIndex": "0x24",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b",
+ "transactionIndex": "0xd",
+ "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41",
+ "blockNumber": "0x373df8",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x4425d46",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712904331,
+ "chain": 59144,
+ "commit": "a3cd755"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/80001/run-1712853455.json b/broadcast/Deploy.s.sol/80001/run-1712853455.json
new file mode 100644
index 00000000..6c02e889
--- /dev/null
+++ b/broadcast/Deploy.s.sol/80001/run-1712853455.json
@@ -0,0 +1,172 @@
+{
+ "transactions": [
+ {
+ "hash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x124",
+ "chainId": "0x13881",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x125",
+ "chainId": "0x13881",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x90edc",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000000d2cc528059e300000000000000000000000000000000000000000000000016565c06bae859f50000000000000000000000000000000000000000000000a7fef9b788f0c573280000000000000000000000000000000000000000000000001655893a686800120000000000000000000000000000000000000000000000a7fefa8a554345cd0b",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9",
+ "transactionIndex": "0x4",
+ "logIndex": "0x10",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000001000000000100000000000200000001000000000000000000000000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000",
+ "type": "0x0",
+ "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9",
+ "transactionIndex": "0x4",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x12a05f200",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x9fc77",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000001653f4b0806455f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f0af3822da55f5000000000000000000000000000000000000000000000000016345785d8a0000",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x11",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5",
+ "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000082fe08c968d8b9d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084614e41c662b9d6",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x12",
+ "removed": false
+ },
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x13",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000001149bf29599eb0000000000000000000000000000000000000000000000001655893a685d63f50000000000000000000000000000000000000000000000a7fefa8a554345cd0b0000000000000000000000000000000000000000000000001654749e75c7ca0a0000000000000000000000000000000000000000000000a7fefb9ef135db66f6",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x14",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000010000000000000000000000000000800040000001000000000100000000000200000001000800000000000000200000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000400001000000000000000040000000800000108000000000000100000000000000000000000000000000800a00000000000100000000100000",
+ "type": "0x0",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x12a05f200",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853455,
+ "chain": 80001,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/80001/run-latest.json b/broadcast/Deploy.s.sol/80001/run-latest.json
new file mode 100644
index 00000000..6c02e889
--- /dev/null
+++ b/broadcast/Deploy.s.sol/80001/run-latest.json
@@ -0,0 +1,172 @@
+{
+ "transactions": [
+ {
+ "hash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x124",
+ "chainId": "0x13881",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x125",
+ "chainId": "0x13881",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x90edc",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000000d2cc528059e300000000000000000000000000000000000000000000000016565c06bae859f50000000000000000000000000000000000000000000000a7fef9b788f0c573280000000000000000000000000000000000000000000000001655893a686800120000000000000000000000000000000000000000000000a7fefa8a554345cd0b",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9",
+ "transactionIndex": "0x4",
+ "logIndex": "0x10",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000001000000000100000000000200000001000000000000000000000000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000",
+ "type": "0x0",
+ "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9",
+ "transactionIndex": "0x4",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0x12a05f200",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x9fc77",
+ "logs": [
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000001653f4b0806455f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f0af3822da55f5000000000000000000000000000000000000000000000000016345785d8a0000",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x11",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5",
+ "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000082fe08c968d8b9d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084614e41c662b9d6",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x12",
+ "removed": false
+ },
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x13",
+ "removed": false
+ },
+ {
+ "address": "0x0000000000000000000000000000000000001010",
+ "topics": [
+ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
+ "0x0000000000000000000000000000000000000000000000000000000000001010",
+ "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a",
+ "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000001149bf29599eb0000000000000000000000000000000000000000000000001655893a685d63f50000000000000000000000000000000000000000000000a7fefa8a554345cd0b0000000000000000000000000000000000000000000000001654749e75c7ca0a0000000000000000000000000000000000000000000000a7fefb9ef135db66f6",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "logIndex": "0x14",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000010000000000000000000000000000800040000001000000000100000000000200000001000800000000000000200000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000400001000000000000000040000000800000108000000000000100000000000000000000000000000000800a00000000000100000000100000",
+ "type": "0x0",
+ "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d",
+ "transactionIndex": "0x5",
+ "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8",
+ "blockNumber": "0x2de6e82",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0x12a05f200",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853455,
+ "chain": 80001,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/80002/run-1712896788.json b/broadcast/Deploy.s.sol/80002/run-1712896788.json
new file mode 100644
index 00000000..5a18c609
--- /dev/null
+++ b/broadcast/Deploy.s.sol/80002/run-1712896788.json
@@ -0,0 +1,82 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x9",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xa",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xb",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712896788,
+ "chain": 80002,
+ "commit": "1ae967d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/80002/run-1712896833.json b/broadcast/Deploy.s.sol/80002/run-1712896833.json
new file mode 100644
index 00000000..0fd49823
--- /dev/null
+++ b/broadcast/Deploy.s.sol/80002/run-1712896833.json
@@ -0,0 +1,85 @@
+{
+ "transactions": [
+ {
+ "hash": "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x9",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xa",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xb",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f",
+ "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b"
+ ],
+ "returns": {},
+ "timestamp": 1712896833,
+ "chain": 80002,
+ "commit": "1ae967d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/80002/run-latest.json b/broadcast/Deploy.s.sol/80002/run-latest.json
new file mode 100644
index 00000000..0fd49823
--- /dev/null
+++ b/broadcast/Deploy.s.sol/80002/run-latest.json
@@ -0,0 +1,85 @@
+{
+ "transactions": [
+ {
+ "hash": "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f",
+ "transactionType": "CREATE2",
+ "contractName": "Kernel",
+ "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27",
+ "function": null,
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0x5ee575",
+ "value": "0x0",
+ "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032",
+ "nonce": "0x9",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xa",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0xb",
+ "chainId": "0x13882",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f",
+ "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b"
+ ],
+ "returns": {},
+ "timestamp": 1712896833,
+ "chain": 80002,
+ "commit": "1ae967d"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/8453/run-latest.json b/broadcast/Deploy.s.sol/8453/run-latest.json
new file mode 100644
index 00000000..ac152243
--- /dev/null
+++ b/broadcast/Deploy.s.sol/8453/run-latest.json
@@ -0,0 +1,62 @@
+{
+ "transactions": [
+ {
+ "hash": "0x64fbd1ee9c767c67d9480aca9d39ae3ea3d1abe23a260bb3c2e73dfda93f3041",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0x1a",
+ "chainId": "0x2105",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xe465c36e182d2575c0ab7fd0d8d3a7904f96297acdb3fbe7abc5599cd004fb49",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x1b",
+ "chainId": "0x2105",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x64fbd1ee9c767c67d9480aca9d39ae3ea3d1abe23a260bb3c2e73dfda93f3041",
+ "0xe465c36e182d2575c0ab7fd0d8d3a7904f96297acdb3fbe7abc5599cd004fb49"
+ ],
+ "returns": {},
+ "timestamp": 1712899269,
+ "chain": 8453,
+ "commit": "feedc00"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/84532/run-1712853126.json b/broadcast/Deploy.s.sol/84532/run-1712853126.json
new file mode 100644
index 00000000..d9512fb6
--- /dev/null
+++ b/broadcast/Deploy.s.sol/84532/run-1712853126.json
@@ -0,0 +1,59 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853126,
+ "chain": 84532,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/84532/run-1712853142.json b/broadcast/Deploy.s.sol/84532/run-1712853142.json
new file mode 100644
index 00000000..c553ab57
--- /dev/null
+++ b/broadcast/Deploy.s.sol/84532/run-1712853142.json
@@ -0,0 +1,59 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853142,
+ "chain": 84532,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/84532/run-1712853185.json b/broadcast/Deploy.s.sol/84532/run-1712853185.json
new file mode 100644
index 00000000..345bad0f
--- /dev/null
+++ b/broadcast/Deploy.s.sol/84532/run-1712853185.json
@@ -0,0 +1,59 @@
+{
+ "transactions": [
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": null,
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853185,
+ "chain": 84532,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/84532/run-1712853220.json b/broadcast/Deploy.s.sol/84532/run-1712853220.json
new file mode 100644
index 00000000..b3c0695f
--- /dev/null
+++ b/broadcast/Deploy.s.sol/84532/run-1712853220.json
@@ -0,0 +1,113 @@
+{
+ "transactions": [
+ {
+ "hash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x6221a",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384",
+ "transactionIndex": "0x6",
+ "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708",
+ "blockNumber": "0x8258fe",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0xf4359",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x93a386cb4b44",
+ "l1GasPrice": "0x7fbaf22",
+ "l1GasUsed": "0x8cc"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x70fb5",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708",
+ "blockNumber": "0x8258fe",
+ "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22",
+ "transactionIndex": "0x7",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22",
+ "transactionIndex": "0x7",
+ "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708",
+ "blockNumber": "0x8258fe",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0xf4359",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x98e22c8c7daf",
+ "l1GasPrice": "0x7fbaf22",
+ "l1GasUsed": "0x91c"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853220,
+ "chain": 84532,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/Deploy.s.sol/84532/run-latest.json b/broadcast/Deploy.s.sol/84532/run-latest.json
new file mode 100644
index 00000000..b3c0695f
--- /dev/null
+++ b/broadcast/Deploy.s.sol/84532/run-latest.json
@@ -0,0 +1,113 @@
+{
+ "transactions": [
+ {
+ "hash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "approveFactory(address,bool)",
+ "arguments": [
+ "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
+ "true"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x108d1",
+ "value": "0x0",
+ "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001",
+ "nonce": "0xf",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22",
+ "transactionType": "CALL",
+ "contractName": null,
+ "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "function": "stake(address,uint32)",
+ "arguments": [
+ "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
+ "86400"
+ ],
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "gas": "0x15b7f",
+ "value": "0x16345785d8a0000",
+ "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180",
+ "nonce": "0x10",
+ "chainId": "0x14a34",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x6221a",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384",
+ "transactionIndex": "0x6",
+ "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708",
+ "blockNumber": "0x8258fe",
+ "gasUsed": "0xb513",
+ "effectiveGasPrice": "0xf4359",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x93a386cb4b44",
+ "l1GasPrice": "0x7fbaf22",
+ "l1GasUsed": "0x8cc"
+ },
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x70fb5",
+ "logs": [
+ {
+ "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
+ "topics": [
+ "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01",
+ "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5"
+ ],
+ "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180",
+ "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708",
+ "blockNumber": "0x8258fe",
+ "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22",
+ "transactionIndex": "0x7",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22",
+ "transactionIndex": "0x7",
+ "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708",
+ "blockNumber": "0x8258fe",
+ "gasUsed": "0xed9b",
+ "effectiveGasPrice": "0xf4359",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5",
+ "contractAddress": null,
+ "l1Fee": "0x98e22c8c7daf",
+ "l1GasPrice": "0x7fbaf22",
+ "l1GasUsed": "0x91c"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712853220,
+ "chain": 84532,
+ "commit": "de0f2f3"
+}
\ No newline at end of file
diff --git a/broadcast/DeployECDSA.s.sol/11155111/run-1712847787.json b/broadcast/DeployECDSA.s.sol/11155111/run-1712847787.json
new file mode 100644
index 00000000..485e7e90
--- /dev/null
+++ b/broadcast/DeployECDSA.s.sol/11155111/run-1712847787.json
@@ -0,0 +1,49 @@
+{
+ "transactions": [
+ {
+ "hash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4",
+ "transactionType": "CREATE2",
+ "contractName": "ECDSAValidator",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa28d7",
+ "value": "0x0",
+ "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56",
+ "nonce": "0x3e",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xaf2a76",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4",
+ "transactionIndex": "0x42",
+ "blockHash": "0x05be0f541009e1f0df7b4c62fdfe876fb76559f2d962acd90cb8f1afb24bfefe",
+ "blockNumber": "0x569a7d",
+ "gasUsed": "0x6f2d1",
+ "effectiveGasPrice": "0x66b60fa8",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712847787,
+ "chain": 11155111,
+ "commit": "f8be0c5"
+}
\ No newline at end of file
diff --git a/broadcast/DeployECDSA.s.sol/11155111/run-latest.json b/broadcast/DeployECDSA.s.sol/11155111/run-latest.json
new file mode 100644
index 00000000..485e7e90
--- /dev/null
+++ b/broadcast/DeployECDSA.s.sol/11155111/run-latest.json
@@ -0,0 +1,49 @@
+{
+ "transactions": [
+ {
+ "hash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4",
+ "transactionType": "CREATE2",
+ "contractName": "ECDSAValidator",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa28d7",
+ "value": "0x0",
+ "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56",
+ "nonce": "0x3e",
+ "chainId": "0xaa36a7",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xaf2a76",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "transactionHash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4",
+ "transactionIndex": "0x42",
+ "blockHash": "0x05be0f541009e1f0df7b4c62fdfe876fb76559f2d962acd90cb8f1afb24bfefe",
+ "blockNumber": "0x569a7d",
+ "gasUsed": "0x6f2d1",
+ "effectiveGasPrice": "0x66b60fa8",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712847787,
+ "chain": 11155111,
+ "commit": "f8be0c5"
+}
\ No newline at end of file
diff --git a/broadcast/DeployECDSA.s.sol/42220/run-1712924455.json b/broadcast/DeployECDSA.s.sol/42220/run-1712924455.json
new file mode 100644
index 00000000..d577d1db
--- /dev/null
+++ b/broadcast/DeployECDSA.s.sol/42220/run-1712924455.json
@@ -0,0 +1,49 @@
+{
+ "transactions": [
+ {
+ "hash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b",
+ "transactionType": "CREATE2",
+ "contractName": "ECDSAValidator",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa28d7",
+ "value": "0x0",
+ "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56",
+ "nonce": "0xa",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb8015",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b",
+ "transactionIndex": "0x3",
+ "blockHash": "0xe18d5a96741bb842dd23cf01cf69f7bf55b1b15205bacd899b86bb611fcc6f22",
+ "blockNumber": "0x17e3e99",
+ "gasUsed": "0x6f25b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924455,
+ "chain": 42220,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/DeployECDSA.s.sol/42220/run-latest.json b/broadcast/DeployECDSA.s.sol/42220/run-latest.json
new file mode 100644
index 00000000..d577d1db
--- /dev/null
+++ b/broadcast/DeployECDSA.s.sol/42220/run-latest.json
@@ -0,0 +1,49 @@
+{
+ "transactions": [
+ {
+ "hash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b",
+ "transactionType": "CREATE2",
+ "contractName": "ECDSAValidator",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa28d7",
+ "value": "0x0",
+ "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56",
+ "nonce": "0xa",
+ "chainId": "0xa4ec",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0xb8015",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b",
+ "transactionIndex": "0x3",
+ "blockHash": "0xe18d5a96741bb842dd23cf01cf69f7bf55b1b15205bacd899b86bb611fcc6f22",
+ "blockNumber": "0x17e3e99",
+ "gasUsed": "0x6f25b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924455,
+ "chain": 42220,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/DeployECDSA.s.sol/44787/run-1712924509.json b/broadcast/DeployECDSA.s.sol/44787/run-1712924509.json
new file mode 100644
index 00000000..32e7de2d
--- /dev/null
+++ b/broadcast/DeployECDSA.s.sol/44787/run-1712924509.json
@@ -0,0 +1,49 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680",
+ "transactionType": "CREATE2",
+ "contractName": "ECDSAValidator",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa28d7",
+ "value": "0x0",
+ "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56",
+ "nonce": "0xa",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x6f25b",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680",
+ "transactionIndex": "0x0",
+ "blockHash": "0x32f80ab5be794c44e610dce5ca1ddae5fac15c73033285a5cdf61e2859815dd1",
+ "blockNumber": "0x166aed1",
+ "gasUsed": "0x6f25b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924509,
+ "chain": 44787,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/DeployECDSA.s.sol/44787/run-latest.json b/broadcast/DeployECDSA.s.sol/44787/run-latest.json
new file mode 100644
index 00000000..32e7de2d
--- /dev/null
+++ b/broadcast/DeployECDSA.s.sol/44787/run-latest.json
@@ -0,0 +1,49 @@
+{
+ "transactions": [
+ {
+ "hash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680",
+ "transactionType": "CREATE2",
+ "contractName": "ECDSAValidator",
+ "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "gas": "0xa28d7",
+ "value": "0x0",
+ "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56",
+ "nonce": "0xa",
+ "chainId": "0xaef3",
+ "accessList": null,
+ "type": null
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "status": "0x1",
+ "cumulativeGasUsed": "0x6f25b",
+ "logs": [],
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x0",
+ "transactionHash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680",
+ "transactionIndex": "0x0",
+ "blockHash": "0x32f80ab5be794c44e610dce5ca1ddae5fac15c73033285a5cdf61e2859815dd1",
+ "blockNumber": "0x166aed1",
+ "gasUsed": "0x6f25b",
+ "effectiveGasPrice": "0x2540be400",
+ "from": "0x9775137314fe595c943712b0b336327dfa80ae8a",
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
+ "contractAddress": null
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1712924509,
+ "chain": 44787,
+ "commit": "74b863b"
+}
\ No newline at end of file
diff --git a/broadcast/DeployWeightedECDSA.s.sol/80001/run-1695305026.json b/broadcast/DeployWeightedECDSA.s.sol/80001/run-1695305026.json
deleted file mode 100644
index 11dfcc67..00000000
--- a/broadcast/DeployWeightedECDSA.s.sol/80001/run-1695305026.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "transactions": [
- {
- "hash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70",
- "transactionType": "CREATE2",
- "contractName": "WeightedECDSAValidator",
- "contractAddress": "0xa24C32F45092AfB64F79CF0D31361000D5b70BD5",
- "function": null,
- "arguments": null,
- "transaction": {
- "type": "0x00",
- "from": "0xa02cddfa44b8c01b4257f54ac1c43f75801e8175",
- "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
- "gas": "0x19954d",
- "value": "0x0",
- "data": "0x00000000000000000000000000000000000000000000000000000000000000006101203461011c57306080524660a0526040906001600160401b03908083018281118282101761010657835260168152602081017f5765696768746564454344534156616c696461746f72000000000000000000008152835190848201938285109085111761010657602060019260a09587528381520192603160f81b845251902091208160c0528060e0528351917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152838201524660608201523060808201522090610100918252516114e4918261012283396080518261110a015260a0518261112d015260c0518261119f015260e051826111c5015251816110e90152f35b634e487b7160e01b600052604160045260246000fd5b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80630c9595561461098b578063333daf921461094e5780633a871cdd1461090b5780634f1169a8146108b2578063666d05f4146108335780638025aa49146105c457806384b0196e146104ed5780638fc925aa146104175780639469d148146103945780639ea9bd5914610352578063b2e2c99b14610186578063e6f68b9f146101265763fb6f93f9146100b057600080fd5b34610122576020366003190112610122578235825260026020528082203383526020528120805460ff81168481101561010f57906100fa8260029315908115610104575b50610f87565b60ff191617905580f35b6001915014866100f4565b634e487b7160e01b845260218552602484fd5b5080fd5b50346101225760203660031901126101225760809181906001600160a01b0361014d610e21565b16815280602052205481519162ffffff80831684528260181c16602084015265ffffffffffff8260301c169083015260601c6060820152f35b5082903461034e578060031936011261034e578135906101a4610e37565b338552600160209081528286206001600160a01b039092168087529181528286205462ffffff939190841615610315578487526002815281872083885281528187209460ff86541687811015610302576101fe9015610f87565b8752600381528187203388528152818720838852815281872080549660ff88169060028210156102ef57509061023689939215610fca565b600160ff1980991617905533825260018152828220848352815261028661026886858520541687895460381c16610f70565b875462ffffff60381b191660389190911b62ffffff60381b16178755565b85549382525285209180835460181c16908260381c1610156102a6578480f35b6102e793600191161782556102c865ffffffffffff80925460301c1642611006565b825466ffffffffffff001916911660081b66ffffffffffff0016179055565b818080808480f35b634e487b7160e01b8a5260219052602489fd5b634e487b7160e01b895260218852602489fd5b8590606492519162461bcd60e51b8352820152601460248201527311dd585c991a585b881b9bdd08195b98589b195960621b6044820152fd5b8280fd5b503461012257806003193601126101225761036b610e21565b506024356001600160401b03811161034e5760209361038c91369101610def565b505051908152f35b50346101225780600319360112610122576103ad610e37565b83358352600260209081528284206001600160a01b039092168452528082205481519260ff82169085821015610404576060858562ffffff8686845265ffffffffffff8160081c16602085015260381c1690820152f35b634e487b7160e01b815260218652602490fd5b506020928360031936011261034e5780356001600160401b0381116104e9576104439036908301610def565b505033835282845262ffffff8284205416156104ba57503382528183528082205460601c5b6001600160a01b03908116903382146104ab5781845260019081865283852033865286528385205460181c16918452845281832033845284528282812055610468565b50508180933382525281205580f35b83606492519162461bcd60e51b8352820152600b60248201526a139bdd08195b98589b195960aa1b6044820152fd5b8380fd5b5090346105c157806003193601126105c1579080519061050c82610ebe565b60168252602092752bb2b4b3b43a32b222a1a229a0ab30b634b230ba37b960511b8484015261057982519261054084610ebe565b600193848152603160f81b8782015261056c825196600f60f81b885260e08989015260e0880190610e4d565b9186830390870152610e4d565b4660608501523060808501528160a085015283810360c0850152846060519182815201946080925b8281106105ae5785870386f35b83518752958101959281019284016105a1565b80fd5b5034610122576060366003190112610122576105de610e37565b906044356001600160401b0381116104e9576105fd9036908601610def565b939085358083526002906020918083528585209360018060a01b038098169485875284528686209760ff91828a54168c8110156108205761063e9015610f87565b875b6041808d048210156107cc576106918b8051898b8201927f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd84528201528d815261068981610e8d565b5190206110e7565b818302918383048114841517156107b8576001928385018086116107a25782810292818404149015171561078d578f6106e093926106da926106d39289611013565b369161102b565b90611071565b878b5260038952848c8c20911690818c5289528b8b208a8c5289528b8b2080548781168981101561077757938093929161071e610772979615610fca565b60ff19161790558b5288528a8a20898b52885261076d61074f8d8d8d62ffffff918291205416915460381c16610f70565b8d5462ffffff60381b191660389190911b62ffffff60381b16178d55565b610f21565b610640565b50508f8c6021602492634e487b7160e01b835252fd5b508f8c6011602492634e487b7160e01b835252fd5b50508f8c6011602492634e487b7160e01b835252fd5b8f8c6011602492634e487b7160e01b835252fd5b89898d8d838c835494825252832062ffffff80825460181c16908460381c1610156107f5578380f35b60016108199360ff19161782556102c865ffffffffffff80925460301c1642611006565b8180808380f35b634e487b7160e01b895260218d52602489fd5b50346101225760603660031901126101225761084d610e37565b6044356001600160a01b0381811692918390036108ae578535855260036020528385209116845260205281832090835260205260ff8183205416905191600282101561089b57602083838152f35b634e487b7160e01b815260218452602490fd5b8480fd5b5090346105c157816003193601126105c157816108cd610e21565b916108d6610e37565b60018060a01b0380941682526001602052838383209116825260205220549082519162ffffff8116835260181c166020820152f35b5082600319926060843601126105c1578135936001600160401b038511610122576101609085360301126105c15750602092610947910161122d565b9051908152f35b5090346105c157816003193601126105c157602435906001600160401b0382116105c1575060209261098291369101610def565b50505160018152f35b5090602080600319360112610122576001600160401b039284358481116104e9576109b99036908701610def565b8194910160808582031261012257843586811161034e5785019481601f8701121561034e578535956109ea87610efa565b966109f786519889610ed9565b808852868089019160051b83010191848311610dc8578701905b828210610dcc57505050848101358781116104e95781019180601f840112156104e9578235610a3f81610efa565b93610a4c87519586610ed9565b818552878086019260051b820101928311610dc85787809101915b838310610db05750505050610a7d848201610f11565b956060809201359765ffffffffffff891689036108ae578151845103610d7b5733855284875262ffffff97888787205416610d4657338652858852610ade33888820906bffffffffffffffffffffffff82549181199060601b169116179055565b855b8351811015610d04576001600160a01b0380610afc8387610f46565b511615610cca578a610b0e8389610f46565b511615610c925780610b208387610f46565b511688526001808b52898920338a528b528b8a8a205416610c4f578b610b46848a610f46565b511690338a52898c528a8a2054881c908b51928c840184811089821117610c39578f908f8f8f929589610b908f9c610c349d819d9b99610bfe9d9b87528b52868b01998a52610f46565b511684528252822033909252528d8d209251835492516001600160b81b031990931691161760189190911b6301000000600160b81b0316179055610bd48388610f46565b5116338a52898c528a8a20906bffffffffffffffffffffffff82549181199060601b169116179055565b8a610c098289610f46565b5116338952888b52898920908c610c24835492828416610f70565b169062ffffff1916179055610f21565b610ae0565b50508f8b6041602492634e487b7160e01b835252fd5b895162461bcd60e51b8152808f018c9052601860248201527f477561726469616e20616c726561647920656e61626c656400000000000000006044820152606490fd5b885162461bcd60e51b8152808e018b9052601260248201527105765696768742063616e6e6f7420626520360741b6044820152606490fd5b885162461bcd60e51b8152808e018b905260146024820152730477561726469616e2063616e6e6f7420626520360641b6044820152606490fd5b33875286895287872080546bffffffffffffffffff000000191660308d901b6bffffffffffff0000000000001617601884901b65ffffff000000161790558680f35b865162461bcd60e51b8152808c01899052600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606490fd5b855162461bcd60e51b8152808b01889052600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606490fd5b8190610dbb84610f11565b8152019101908790610a67565b8580fd5b81356001600160a01b0381168103610deb578152908701908701610a11565b8680fd5b9181601f84011215610e1c578235916001600160401b038311610e1c5760208381860195010111610e1c57565b600080fd5b600435906001600160a01b0382168203610e1c57565b602435906001600160a01b0382168203610e1c57565b919082519283825260005b848110610e79575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610e58565b606081019081106001600160401b03821117610ea857604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117610ea857604052565b90601f801991011681019081106001600160401b03821117610ea857604052565b6001600160401b038111610ea85760051b60200190565b359062ffffff82168203610e1c57565b6000198114610f305760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610f5a5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b91909162ffffff80809416911601918211610f3057565b15610f8e57565b60405162461bcd60e51b815260206004820152601460248201527350726f706f73616c206e6f74206f6e676f696e6760601b6044820152606490fd5b15610fd157565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b91908201809211610f3057565b90939293848311610e1c578411610e1c578101920390565b9291926001600160401b038211610ea85760405191611054601f8201601f191660200184610ed9565b829481845281830111610e1c578281602093846000960137010152565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d156110da57606052604052565b638baa579f90526004601cfd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611174575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611155565b903590601e1981360301821215610e1c57018035906001600160401b038211610e1c57602001918136038313610e1c57565b9061123b60608301836111fb565b611282608060405183819460208301966040885281606085015284840137600083828401015260208801356040830152601f80199101168101036060810184520182610ed9565b519020908160005260029081602052604060002033600052602052604060002092600060205260406000209380549560ff871696600497888110156114cf578061149957505065ffffffffffff865460301c1661148d57806101406112e89201906111fb565b919062ffffff825460381c16946000955b604180860488101561145a5761134660405160208101907f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd82528960408201526040815261068981610e8d565b9088818102048114891517156114455760018901808a11611430578082810204821481151715611430576106d38261138894936106da9302908c028a89611013565b86600052600360205260406000209060018060a01b031690816000526020526040600020336000526020526040600020805460ff81168b81101561141b5761140e5791611408939160016114029460ff1916179055600052600160205260406000203360005260205262ffffff6040600020541690611006565b96610f21565b956112f9565b5050509561140890610f21565b60218e634e487b7160e01b6000525260246000fd5b60118d634e487b7160e01b6000525260246000fd5b60118c634e487b7160e01b6000525260246000fd5b5097955097505091505062ffffff9250600360ff198254161790555460181c16111560001461148857600090565b600190565b50505092505050600190565b935096505092506001919350146000146114c857600365ffffffffffff60d01b8460c81b169360ff1916179055565b5060019150565b602189634e487b7160e01b6000525260246000fd",
- "nonce": "0x190"
- },
- "additionalContracts": [],
- "isFixedGasLimit": false
- }
- ],
- "receipts": [
- {
- "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70",
- "transactionIndex": "0x7",
- "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16",
- "blockNumber": "0x267c47a",
- "from": "0xA02CDdFa44B8C01b4257F54ac1c43F75801E8175",
- "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
- "cumulativeGasUsed": "0x1a845e",
- "gasUsed": "0x128594",
- "contractAddress": null,
- "logs": [
- {
- "address": "0x0000000000000000000000000000000000001010",
- "topics": [
- "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
- "0x0000000000000000000000000000000000000000000000000000000000001010",
- "0x000000000000000000000000a02cddfa44b8c01b4257f54ac1c43f75801e8175",
- "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99"
- ],
- "data": "0x000000000000000000000000000000000000000000000000000677fa1ea62c00000000000000000000000000000000000000000000000000011633372b336590000000000000000000000000000000000000000000001154a17fc27e1daf1e6b000000000000000000000000000000000000000000000000010fbb3d0c8d3990000000000000000000000000000000000000000000001154a1863a783c554a6b",
- "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16",
- "blockNumber": "0x267c47a",
- "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70",
- "transactionIndex": "0x7",
- "logIndex": "0x10",
- "removed": false
- }
- ],
- "status": "0x1",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000020000000080000040000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000008000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000",
- "type": "0x0",
- "effectiveGasPrice": "0x59682f10"
- }
- ],
- "libraries": [],
- "pending": [],
- "returns": {},
- "timestamp": 1695305026,
- "chain": 80001,
- "multi": false,
- "commit": "a6ecd6a"
-}
\ No newline at end of file
diff --git a/broadcast/DeployWeightedECDSA.s.sol/80001/run-latest.json b/broadcast/DeployWeightedECDSA.s.sol/80001/run-latest.json
deleted file mode 100644
index 11dfcc67..00000000
--- a/broadcast/DeployWeightedECDSA.s.sol/80001/run-latest.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "transactions": [
- {
- "hash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70",
- "transactionType": "CREATE2",
- "contractName": "WeightedECDSAValidator",
- "contractAddress": "0xa24C32F45092AfB64F79CF0D31361000D5b70BD5",
- "function": null,
- "arguments": null,
- "transaction": {
- "type": "0x00",
- "from": "0xa02cddfa44b8c01b4257f54ac1c43f75801e8175",
- "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
- "gas": "0x19954d",
- "value": "0x0",
- "data": "0x00000000000000000000000000000000000000000000000000000000000000006101203461011c57306080524660a0526040906001600160401b03908083018281118282101761010657835260168152602081017f5765696768746564454344534156616c696461746f72000000000000000000008152835190848201938285109085111761010657602060019260a09587528381520192603160f81b845251902091208160c0528060e0528351917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152838201524660608201523060808201522090610100918252516114e4918261012283396080518261110a015260a0518261112d015260c0518261119f015260e051826111c5015251816110e90152f35b634e487b7160e01b600052604160045260246000fd5b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80630c9595561461098b578063333daf921461094e5780633a871cdd1461090b5780634f1169a8146108b2578063666d05f4146108335780638025aa49146105c457806384b0196e146104ed5780638fc925aa146104175780639469d148146103945780639ea9bd5914610352578063b2e2c99b14610186578063e6f68b9f146101265763fb6f93f9146100b057600080fd5b34610122576020366003190112610122578235825260026020528082203383526020528120805460ff81168481101561010f57906100fa8260029315908115610104575b50610f87565b60ff191617905580f35b6001915014866100f4565b634e487b7160e01b845260218552602484fd5b5080fd5b50346101225760203660031901126101225760809181906001600160a01b0361014d610e21565b16815280602052205481519162ffffff80831684528260181c16602084015265ffffffffffff8260301c169083015260601c6060820152f35b5082903461034e578060031936011261034e578135906101a4610e37565b338552600160209081528286206001600160a01b039092168087529181528286205462ffffff939190841615610315578487526002815281872083885281528187209460ff86541687811015610302576101fe9015610f87565b8752600381528187203388528152818720838852815281872080549660ff88169060028210156102ef57509061023689939215610fca565b600160ff1980991617905533825260018152828220848352815261028661026886858520541687895460381c16610f70565b875462ffffff60381b191660389190911b62ffffff60381b16178755565b85549382525285209180835460181c16908260381c1610156102a6578480f35b6102e793600191161782556102c865ffffffffffff80925460301c1642611006565b825466ffffffffffff001916911660081b66ffffffffffff0016179055565b818080808480f35b634e487b7160e01b8a5260219052602489fd5b634e487b7160e01b895260218852602489fd5b8590606492519162461bcd60e51b8352820152601460248201527311dd585c991a585b881b9bdd08195b98589b195960621b6044820152fd5b8280fd5b503461012257806003193601126101225761036b610e21565b506024356001600160401b03811161034e5760209361038c91369101610def565b505051908152f35b50346101225780600319360112610122576103ad610e37565b83358352600260209081528284206001600160a01b039092168452528082205481519260ff82169085821015610404576060858562ffffff8686845265ffffffffffff8160081c16602085015260381c1690820152f35b634e487b7160e01b815260218652602490fd5b506020928360031936011261034e5780356001600160401b0381116104e9576104439036908301610def565b505033835282845262ffffff8284205416156104ba57503382528183528082205460601c5b6001600160a01b03908116903382146104ab5781845260019081865283852033865286528385205460181c16918452845281832033845284528282812055610468565b50508180933382525281205580f35b83606492519162461bcd60e51b8352820152600b60248201526a139bdd08195b98589b195960aa1b6044820152fd5b8380fd5b5090346105c157806003193601126105c1579080519061050c82610ebe565b60168252602092752bb2b4b3b43a32b222a1a229a0ab30b634b230ba37b960511b8484015261057982519261054084610ebe565b600193848152603160f81b8782015261056c825196600f60f81b885260e08989015260e0880190610e4d565b9186830390870152610e4d565b4660608501523060808501528160a085015283810360c0850152846060519182815201946080925b8281106105ae5785870386f35b83518752958101959281019284016105a1565b80fd5b5034610122576060366003190112610122576105de610e37565b906044356001600160401b0381116104e9576105fd9036908601610def565b939085358083526002906020918083528585209360018060a01b038098169485875284528686209760ff91828a54168c8110156108205761063e9015610f87565b875b6041808d048210156107cc576106918b8051898b8201927f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd84528201528d815261068981610e8d565b5190206110e7565b818302918383048114841517156107b8576001928385018086116107a25782810292818404149015171561078d578f6106e093926106da926106d39289611013565b369161102b565b90611071565b878b5260038952848c8c20911690818c5289528b8b208a8c5289528b8b2080548781168981101561077757938093929161071e610772979615610fca565b60ff19161790558b5288528a8a20898b52885261076d61074f8d8d8d62ffffff918291205416915460381c16610f70565b8d5462ffffff60381b191660389190911b62ffffff60381b16178d55565b610f21565b610640565b50508f8c6021602492634e487b7160e01b835252fd5b508f8c6011602492634e487b7160e01b835252fd5b50508f8c6011602492634e487b7160e01b835252fd5b8f8c6011602492634e487b7160e01b835252fd5b89898d8d838c835494825252832062ffffff80825460181c16908460381c1610156107f5578380f35b60016108199360ff19161782556102c865ffffffffffff80925460301c1642611006565b8180808380f35b634e487b7160e01b895260218d52602489fd5b50346101225760603660031901126101225761084d610e37565b6044356001600160a01b0381811692918390036108ae578535855260036020528385209116845260205281832090835260205260ff8183205416905191600282101561089b57602083838152f35b634e487b7160e01b815260218452602490fd5b8480fd5b5090346105c157816003193601126105c157816108cd610e21565b916108d6610e37565b60018060a01b0380941682526001602052838383209116825260205220549082519162ffffff8116835260181c166020820152f35b5082600319926060843601126105c1578135936001600160401b038511610122576101609085360301126105c15750602092610947910161122d565b9051908152f35b5090346105c157816003193601126105c157602435906001600160401b0382116105c1575060209261098291369101610def565b50505160018152f35b5090602080600319360112610122576001600160401b039284358481116104e9576109b99036908701610def565b8194910160808582031261012257843586811161034e5785019481601f8701121561034e578535956109ea87610efa565b966109f786519889610ed9565b808852868089019160051b83010191848311610dc8578701905b828210610dcc57505050848101358781116104e95781019180601f840112156104e9578235610a3f81610efa565b93610a4c87519586610ed9565b818552878086019260051b820101928311610dc85787809101915b838310610db05750505050610a7d848201610f11565b956060809201359765ffffffffffff891689036108ae578151845103610d7b5733855284875262ffffff97888787205416610d4657338652858852610ade33888820906bffffffffffffffffffffffff82549181199060601b169116179055565b855b8351811015610d04576001600160a01b0380610afc8387610f46565b511615610cca578a610b0e8389610f46565b511615610c925780610b208387610f46565b511688526001808b52898920338a528b528b8a8a205416610c4f578b610b46848a610f46565b511690338a52898c528a8a2054881c908b51928c840184811089821117610c39578f908f8f8f929589610b908f9c610c349d819d9b99610bfe9d9b87528b52868b01998a52610f46565b511684528252822033909252528d8d209251835492516001600160b81b031990931691161760189190911b6301000000600160b81b0316179055610bd48388610f46565b5116338a52898c528a8a20906bffffffffffffffffffffffff82549181199060601b169116179055565b8a610c098289610f46565b5116338952888b52898920908c610c24835492828416610f70565b169062ffffff1916179055610f21565b610ae0565b50508f8b6041602492634e487b7160e01b835252fd5b895162461bcd60e51b8152808f018c9052601860248201527f477561726469616e20616c726561647920656e61626c656400000000000000006044820152606490fd5b885162461bcd60e51b8152808e018b9052601260248201527105765696768742063616e6e6f7420626520360741b6044820152606490fd5b885162461bcd60e51b8152808e018b905260146024820152730477561726469616e2063616e6e6f7420626520360641b6044820152606490fd5b33875286895287872080546bffffffffffffffffff000000191660308d901b6bffffffffffff0000000000001617601884901b65ffffff000000161790558680f35b865162461bcd60e51b8152808c01899052600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606490fd5b855162461bcd60e51b8152808b01889052600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606490fd5b8190610dbb84610f11565b8152019101908790610a67565b8580fd5b81356001600160a01b0381168103610deb578152908701908701610a11565b8680fd5b9181601f84011215610e1c578235916001600160401b038311610e1c5760208381860195010111610e1c57565b600080fd5b600435906001600160a01b0382168203610e1c57565b602435906001600160a01b0382168203610e1c57565b919082519283825260005b848110610e79575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610e58565b606081019081106001600160401b03821117610ea857604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117610ea857604052565b90601f801991011681019081106001600160401b03821117610ea857604052565b6001600160401b038111610ea85760051b60200190565b359062ffffff82168203610e1c57565b6000198114610f305760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610f5a5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b91909162ffffff80809416911601918211610f3057565b15610f8e57565b60405162461bcd60e51b815260206004820152601460248201527350726f706f73616c206e6f74206f6e676f696e6760601b6044820152606490fd5b15610fd157565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b91908201809211610f3057565b90939293848311610e1c578411610e1c578101920390565b9291926001600160401b038211610ea85760405191611054601f8201601f191660200184610ed9565b829481845281830111610e1c578281602093846000960137010152565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d156110da57606052604052565b638baa579f90526004601cfd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611174575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611155565b903590601e1981360301821215610e1c57018035906001600160401b038211610e1c57602001918136038313610e1c57565b9061123b60608301836111fb565b611282608060405183819460208301966040885281606085015284840137600083828401015260208801356040830152601f80199101168101036060810184520182610ed9565b519020908160005260029081602052604060002033600052602052604060002092600060205260406000209380549560ff871696600497888110156114cf578061149957505065ffffffffffff865460301c1661148d57806101406112e89201906111fb565b919062ffffff825460381c16946000955b604180860488101561145a5761134660405160208101907f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd82528960408201526040815261068981610e8d565b9088818102048114891517156114455760018901808a11611430578082810204821481151715611430576106d38261138894936106da9302908c028a89611013565b86600052600360205260406000209060018060a01b031690816000526020526040600020336000526020526040600020805460ff81168b81101561141b5761140e5791611408939160016114029460ff1916179055600052600160205260406000203360005260205262ffffff6040600020541690611006565b96610f21565b956112f9565b5050509561140890610f21565b60218e634e487b7160e01b6000525260246000fd5b60118d634e487b7160e01b6000525260246000fd5b60118c634e487b7160e01b6000525260246000fd5b5097955097505091505062ffffff9250600360ff198254161790555460181c16111560001461148857600090565b600190565b50505092505050600190565b935096505092506001919350146000146114c857600365ffffffffffff60d01b8460c81b169360ff1916179055565b5060019150565b602189634e487b7160e01b6000525260246000fd",
- "nonce": "0x190"
- },
- "additionalContracts": [],
- "isFixedGasLimit": false
- }
- ],
- "receipts": [
- {
- "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70",
- "transactionIndex": "0x7",
- "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16",
- "blockNumber": "0x267c47a",
- "from": "0xA02CDdFa44B8C01b4257F54ac1c43F75801E8175",
- "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
- "cumulativeGasUsed": "0x1a845e",
- "gasUsed": "0x128594",
- "contractAddress": null,
- "logs": [
- {
- "address": "0x0000000000000000000000000000000000001010",
- "topics": [
- "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63",
- "0x0000000000000000000000000000000000000000000000000000000000001010",
- "0x000000000000000000000000a02cddfa44b8c01b4257f54ac1c43f75801e8175",
- "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99"
- ],
- "data": "0x000000000000000000000000000000000000000000000000000677fa1ea62c00000000000000000000000000000000000000000000000000011633372b336590000000000000000000000000000000000000000000001154a17fc27e1daf1e6b000000000000000000000000000000000000000000000000010fbb3d0c8d3990000000000000000000000000000000000000000000001154a1863a783c554a6b",
- "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16",
- "blockNumber": "0x267c47a",
- "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70",
- "transactionIndex": "0x7",
- "logIndex": "0x10",
- "removed": false
- }
- ],
- "status": "0x1",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000020000000080000040000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000008000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000",
- "type": "0x0",
- "effectiveGasPrice": "0x59682f10"
- }
- ],
- "libraries": [],
- "pending": [],
- "returns": {},
- "timestamp": 1695305026,
- "chain": 80001,
- "multi": false,
- "commit": "a6ecd6a"
-}
\ No newline at end of file
diff --git a/foundry.toml b/foundry.toml
index 1ea2a0fe..b054a2fa 100644
--- a/foundry.toml
+++ b/foundry.toml
@@ -1,17 +1,16 @@
[profile.default]
-src = 'src'
-out = 'out'
-libs = ['lib']
-solc_version = '0.8.21'
-evm_version = 'paris'
+src = "src"
+out = "out"
+libs = ["lib"]
bytecode_hash = "none"
cbor_metadata = false
optimize = true
-via-ir = false
-runs = 1000000
+via-ir = true
+runs = 1000
-[profile.optimized]
+[profile.deploy]
via-ir = true
+# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
[fuzz]
-runs = 1024
+runs = 256
diff --git a/gas/ecdsa/report-lite.txt b/gas/ecdsa/report-lite.txt
deleted file mode 100644
index 47456d26..00000000
--- a/gas/ecdsa/report-lite.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-No files changed, compilation skipped
-
-Running 8 tests for test/foundry/KernelLiteECDSA.t.sol:KernelECDSATest
-[32m[PASS][0m test_disable_mode() (gas: 171411)
-[32m[PASS][0m test_external_call_default() (gas: 23005)
-[32m[PASS][0m test_external_call_execution() (gas: 434541)
-[32m[PASS][0m test_initialize_twice() (gas: 18288)
-[32m[PASS][0m test_set_default_validator() (gas: 369796)
-[32m[PASS][0m test_set_execution() (gas: 395426)
-[32m[PASS][0m test_should_return_address_if_deployed() (gas: 21360)
-[32m[PASS][0m test_validate_signature() (gas: 22840)
-Test result: [32mok[0m. 8 passed; 0 failed; 0 skipped; finished in 2.62ms
-| lib/account-abstraction/contracts/core/EntryPoint.sol:EntryPoint contract | | | | | |
-|---------------------------------------------------------------------------|-----------------|--------|--------|--------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 3665417 | 18206 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| getNonce | 2729 | 2729 | 2729 | 2729 | 4 |
-| getUserOpHash | 2253 | 2273 | 2275 | 2289 | 4 |
-| handleOps | 143067 | 157598 | 158576 | 170176 | 4 |
-| innerHandleOp | 49569 | 64070 | 65053 | 76605 | 4 |
-| receive | 22193 | 22193 | 22193 | 22193 | 4 |
-
-
-| src/factory/KernelFactory.sol:KernelFactory contract | | | | | |
-|------------------------------------------------------|-----------------|-------|--------|--------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 577582 | 2925 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| createAccount | 5962 | 97252 | 108664 | 108664 | 9 |
-| setImplementation | 22862 | 22862 | 22862 | 22862 | 16 |
-
-
-| src/lite/KernelLiteECDSA.sol:KernelLiteECDSA contract | | | | | |
-|-------------------------------------------------------|-----------------|-------|--------|-------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 1586991 | 8335 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| disableMode | 22865 | 22865 | 22865 | 22865 | 1 |
-| getDefaultValidator | 341 | 341 | 341 | 341 | 1 |
-| getDisabledMode | 577 | 577 | 577 | 577 | 1 |
-| getExecution | 1249 | 1249 | 1249 | 1249 | 2 |
-| initialize | 3117 | 20852 | 23069 | 23069 | 9 |
-| isValidSignature | 6582 | 6582 | 6582 | 6582 | 1 |
-| setDefaultValidator | 26810 | 26810 | 26810 | 26810 | 1 |
-| setExecution | 49865 | 49865 | 49865 | 49865 | 2 |
-| validateUserOp | 35978 | 35978 | 35978 | 35978 | 4 |
-
-
-| src/test/TestValidator.sol:TestValidator contract | | | | | |
-|---------------------------------------------------|-----------------|-------|--------|-------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 163214 | 843 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| enable | 1721 | 1721 | 1721 | 1721 | 3 |
-| sudoSetCaller | 22559 | 22559 | 22559 | 22559 | 1 |
-| validCaller | 748 | 748 | 748 | 748 | 2 |
-
-
-
-Ran 1 test suites: 8 tests passed, 0 failed, 0 skipped (8 total tests)
diff --git a/gas/ecdsa/report.txt b/gas/ecdsa/report.txt
deleted file mode 100644
index 0fa738cd..00000000
--- a/gas/ecdsa/report.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-No files changed, compilation skipped
-
-Running 8 tests for test/foundry/KernelECDSA.t.sol:KernelECDSATest
-[32m[PASS][0m test_disable_mode() (gas: 162628)
-[32m[PASS][0m test_external_call_default() (gas: 28886)
-[32m[PASS][0m test_external_call_execution() (gas: 447890)
-[32m[PASS][0m test_initialize_twice() (gas: 18173)
-[32m[PASS][0m test_set_default_validator() (gas: 361110)
-[32m[PASS][0m test_set_execution() (gas: 406029)
-[32m[PASS][0m test_should_return_address_if_deployed() (gas: 21363)
-[32m[PASS][0m test_validate_signature() (gas: 32132)
-Test result: [32mok[0m. 8 passed; 0 failed; 0 skipped; finished in 2.49ms
-| lib/account-abstraction/contracts/core/EntryPoint.sol:EntryPoint contract | | | | | |
-|---------------------------------------------------------------------------|-----------------|--------|--------|--------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 3665417 | 18206 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| getNonce | 2729 | 2729 | 2729 | 2729 | 4 |
-| getUserOpHash | 2253 | 2273 | 2275 | 2289 | 4 |
-| handleOps | 134347 | 158576 | 159572 | 180815 | 4 |
-| innerHandleOp | 30469 | 54560 | 55583 | 76605 | 4 |
-| receive | 22193 | 22193 | 22193 | 22193 | 4 |
-
-
-| src/Kernel.sol:Kernel contract | | | | | |
-|--------------------------------|-----------------|-------|--------|-------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 1545342 | 8127 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| disableMode | 3765 | 3765 | 3765 | 3765 | 1 |
-| getDefaultValidator | 341 | 341 | 341 | 341 | 1 |
-| getDisabledMode | 577 | 577 | 577 | 577 | 1 |
-| getExecution | 1249 | 1249 | 1249 | 1249 | 2 |
-| initialize | 3046 | 43230 | 48253 | 48253 | 9 |
-| isValidSignature | 15897 | 15897 | 15897 | 15897 | 1 |
-| setDefaultValidator | 7870 | 7870 | 7870 | 7870 | 1 |
-| setExecution | 49865 | 49865 | 49865 | 49865 | 2 |
-| validateUserOp | 45773 | 45967 | 45989 | 46119 | 4 |
-
-
-| src/factory/KernelFactory.sol:KernelFactory contract | | | | | |
-|------------------------------------------------------|-----------------|--------|--------|--------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 577582 | 2925 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| createAccount | 5962 | 119638 | 133848 | 133848 | 9 |
-| setImplementation | 22862 | 22862 | 22862 | 22862 | 8 |
-
-
-| src/test/TestValidator.sol:TestValidator contract | | | | | |
-|---------------------------------------------------|-----------------|-------|--------|-------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 163214 | 843 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| enable | 1721 | 1721 | 1721 | 1721 | 3 |
-| sudoSetCaller | 22559 | 22559 | 22559 | 22559 | 1 |
-| validCaller | 748 | 748 | 748 | 748 | 2 |
-
-
-| src/validator/ECDSAValidator.sol:ECDSAValidator contract | | | | | |
-|----------------------------------------------------------|-----------------|-------|--------|-------|---------|
-| Deployment Cost | Deployment Size | | | | |
-| 252700 | 1290 | | | | |
-| Function Name | min | avg | median | max | # calls |
-| enable | 24426 | 24426 | 24426 | 24426 | 8 |
-| validCaller | 723 | 1389 | 723 | 2723 | 3 |
-| validateSignature | 9858 | 9858 | 9858 | 9858 | 1 |
-| validateUserOp | 6391 | 6391 | 6391 | 6391 | 4 |
-
-
-
-Ran 1 test suites: 8 tests passed, 0 failed, 0 skipped (8 total tests)
diff --git a/hardhat.config.ts b/hardhat.config.ts
index 5e4a964e..2be8cf10 100644
--- a/hardhat.config.ts
+++ b/hardhat.config.ts
@@ -1,91 +1,28 @@
-import * as dotenv from 'dotenv'
-import { HardhatUserConfig } from "hardhat/config";
+import "@nomicfoundation/hardhat-toolbox";
import "@nomicfoundation/hardhat-foundry";
-import "@nomiclabs/hardhat-ethers";
-import "hardhat-deploy";
-import '@typechain/hardhat'
-import "./tasks/test_userOp"
-dotenv.config()
-
-
-function getAccounts(): string[] | { mnemonic: string } {
- const accs = []
- if (process.env.DEPLOYER_PRIVATE_KEY !== undefined) {
- accs.push(process.env.DEPLOYER_PRIVATE_KEY)
- }
- if (process.env.PAYMASTER_OWNER_PRIVATE_KEY !== undefined) {
- accs.push(process.env.PAYMASTER_OWNER_PRIVATE_KEY)
- }
- return accs
-}
-
+import { HardhatUserConfig } from "hardhat/config";
+import "hardhat-spdx-license-identifier";
+import "hardhat-contract-sizer";
const config: HardhatUserConfig = {
solidity: {
- version: "0.8.18",
+ version: "0.8.25",
settings: {
+ viaIR: true,
optimizer: {
enabled: true,
- runs: 1000000
- },
- metadata: {
- bytecodeHash: "none"
+ runs: 1000,
},
- viaIR: true
- }
- },
- networks: {
- mumbai: {
- url: `https://polygon-mumbai.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- polygon: {
- url: `https://polygon-mainnet.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- goerli: {
- url: `https://goerli.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- ethereum: {
- url: `https://mainnet.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- avalanche: {
- url: `https://avalanche-mainnet.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- fuji: {
- url: `https://avalanche-fuji.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- arbitrum: {
- url: `https://arbitrum-mainnet.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- arbitrumGoerli: {
- url: `https://arbitrum-goerli.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- optimism: {
- url: `https://optimism-mainnet.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- optimismGoerli: {
- url: `https://optimism-goerli.infura.io/v3/${process.env.INFURA_ID}`,
- accounts: getAccounts(),
- },
- bscTestnet: {
- url: `https://sly-indulgent-paper.bsc-testnet.discover.quiknode.pro/ab7e00c229f5967334160958e40fd6a4d893fb93`,
- accounts: getAccounts(),
- },
- bsc: {
- url: `https://wandering-quaint-reel.bsc.quiknode.pro/508c3d245c14adb8689ed4073d29aa5795dfa24e`,
- accounts: getAccounts(),
- },
- baseGoerli: {
- url: `https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596`,
- accounts: getAccounts(),
},
+ },
+ spdxLicenseIdentifier: {
+ overwrite: false,
+ runOnCompile: true
+ },
+ contractSizer: {
+ alphaSort: true,
+ disambiguatePaths: false,
+ runOnCompile: true,
+ strict: true,
}
};
diff --git a/lib/ExcessivelySafeCall b/lib/ExcessivelySafeCall
new file mode 160000
index 00000000..81cd99ce
--- /dev/null
+++ b/lib/ExcessivelySafeCall
@@ -0,0 +1 @@
+Subproject commit 81cd99ce3e69117d665d7601c330ea03b97acce0
diff --git a/lib/I4337 b/lib/I4337
deleted file mode 160000
index dc64859d..00000000
--- a/lib/I4337
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit dc64859d34249e5d26abf7e9c0bc090c720f1914
diff --git a/lib/solady b/lib/solady
index a6a95729..9deb9ed3 160000
--- a/lib/solady
+++ b/lib/solady
@@ -1 +1 @@
-Subproject commit a6a95729f947bb2a24e05e862ba9522c10453a70
+Subproject commit 9deb9ed36a27261a8745db5b7cd7f4cdc3b1cd4e
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index dc25237e..00000000
--- a/package-lock.json
+++ /dev/null
@@ -1,15093 +0,0 @@
-{
- "name": "@zerodevapp/contracts",
- "version": "4.0.0-beta.8",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "@zerodevapp/contracts",
- "version": "4.0.0-beta.8",
- "dependencies": {
- "@account-abstraction/contracts": "^0.6.0",
- "dotenv": "^16.0.3"
- },
- "devDependencies": {
- "@nomicfoundation/hardhat-foundry": "^1.0.0",
- "@nomiclabs/hardhat-ethers": "^2.2.3",
- "@typechain/ethers-v5": "^10.2.0",
- "@typechain/hardhat": "^6.1.5",
- "@types/chai": "^4.3.4",
- "@types/mocha": "^10.0.1",
- "@types/node": "^18.15.11",
- "chai": "^4.3.7",
- "ethereum-waffle": "^4.0.10",
- "hardhat": "^2.13.0",
- "hardhat-deploy": "^0.11.26",
- "keccak256": "^1.0.6",
- "merkletreejs": "^0.3.9",
- "ts-node": "^10.9.1",
- "typechain": "^8.1.1"
- }
- },
- "node_modules/@account-abstraction/contracts": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.6.0.tgz",
- "integrity": "sha512-8ooRJuR7XzohMDM4MV34I12Ci2bmxfE9+cixakRL7lA4BAwJKQ3ahvd8FbJa9kiwkUPCUNtj+/zxDQWYYalLMQ=="
- },
- "node_modules/@cspotcode/source-map-support": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "0.3.9"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@ensdomains/ens": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz",
- "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==",
- "deprecated": "Please use @ensdomains/ens-contracts",
- "dev": true,
- "peer": true,
- "dependencies": {
- "bluebird": "^3.5.2",
- "eth-ens-namehash": "^2.0.8",
- "solc": "^0.4.20",
- "testrpc": "0.0.1",
- "web3-utils": "^1.0.0-beta.31"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true,
- "peer": true
- },
- "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
- "dev": true,
- "peer": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/require-from-string": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/solc": {
- "version": "0.4.26",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz",
- "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "fs-extra": "^0.30.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^1.1.0",
- "semver": "^5.3.0",
- "yargs": "^4.7.1"
- },
- "bin": {
- "solcjs": "solcjs"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/@ensdomains/ens/node_modules/yargs": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
- "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "lodash.assign": "^4.0.3",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.1",
- "which-module": "^1.0.0",
- "window-size": "^0.2.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^2.4.1"
- }
- },
- "node_modules/@ensdomains/ens/node_modules/yargs-parser": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
- "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "camelcase": "^3.0.0",
- "lodash.assign": "^4.0.6"
- }
- },
- "node_modules/@ensdomains/resolver": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz",
- "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==",
- "deprecated": "Please use @ensdomains/ens-contracts",
- "dev": true,
- "peer": true
- },
- "node_modules/@ethereum-waffle/chai": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz",
- "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==",
- "dev": true,
- "dependencies": {
- "@ethereum-waffle/provider": "4.0.5",
- "debug": "^4.3.4",
- "json-bigint": "^1.0.0"
- },
- "engines": {
- "node": ">=10.0"
- },
- "peerDependencies": {
- "ethers": "*"
- }
- },
- "node_modules/@ethereum-waffle/compiler": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz",
- "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==",
- "dev": true,
- "dependencies": {
- "@resolver-engine/imports": "^0.3.3",
- "@resolver-engine/imports-fs": "^0.3.3",
- "@typechain/ethers-v5": "^10.0.0",
- "@types/mkdirp": "^0.5.2",
- "@types/node-fetch": "^2.6.1",
- "mkdirp": "^0.5.1",
- "node-fetch": "^2.6.7"
- },
- "engines": {
- "node": ">=10.0"
- },
- "peerDependencies": {
- "ethers": "*",
- "solc": "*",
- "typechain": "^8.0.0"
- }
- },
- "node_modules/@ethereum-waffle/compiler/node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/@ethereum-waffle/ens": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz",
- "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==",
- "dev": true,
- "engines": {
- "node": ">=10.0"
- },
- "peerDependencies": {
- "@ensdomains/ens": "^0.4.4",
- "@ensdomains/resolver": "^0.2.4",
- "ethers": "*"
- }
- },
- "node_modules/@ethereum-waffle/mock-contract": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz",
- "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==",
- "dev": true,
- "engines": {
- "node": ">=10.0"
- },
- "peerDependencies": {
- "ethers": "*"
- }
- },
- "node_modules/@ethereum-waffle/provider": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz",
- "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==",
- "dev": true,
- "dependencies": {
- "@ethereum-waffle/ens": "4.0.3",
- "@ganache/ethereum-options": "0.1.4",
- "debug": "^4.3.4",
- "ganache": "7.4.3"
- },
- "engines": {
- "node": ">=10.0"
- },
- "peerDependencies": {
- "ethers": "*"
- }
- },
- "node_modules/@ethereumjs/block": {
- "version": "3.6.3",
- "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz",
- "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/common": "^2.6.5",
- "@ethereumjs/tx": "^3.5.2",
- "ethereumjs-util": "^7.1.5",
- "merkle-patricia-tree": "^4.2.4"
- }
- },
- "node_modules/@ethereumjs/block/node_modules/@ethereumjs/common": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz",
- "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==",
- "dev": true,
- "dependencies": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.1.5"
- }
- },
- "node_modules/@ethereumjs/block/node_modules/@ethereumjs/tx": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz",
- "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/common": "^2.6.4",
- "ethereumjs-util": "^7.1.5"
- }
- },
- "node_modules/@ethereumjs/block/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ethereumjs/block/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ethereumjs/blockchain": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz",
- "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/block": "^3.6.2",
- "@ethereumjs/common": "^2.6.4",
- "@ethereumjs/ethash": "^1.1.0",
- "debug": "^4.3.3",
- "ethereumjs-util": "^7.1.5",
- "level-mem": "^5.0.1",
- "lru-cache": "^5.1.1",
- "semaphore-async-await": "^1.5.1"
- }
- },
- "node_modules/@ethereumjs/blockchain/node_modules/@ethereumjs/common": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz",
- "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==",
- "dev": true,
- "dependencies": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.1.5"
- }
- },
- "node_modules/@ethereumjs/blockchain/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ethereumjs/blockchain/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ethereumjs/common": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz",
- "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==",
- "dev": true,
- "dependencies": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.1.3"
- }
- },
- "node_modules/@ethereumjs/common/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ethereumjs/ethash": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz",
- "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/block": "^3.5.0",
- "@types/levelup": "^4.3.0",
- "buffer-xor": "^2.0.1",
- "ethereumjs-util": "^7.1.1",
- "miller-rabin": "^4.0.0"
- }
- },
- "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz",
- "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/@ethereumjs/ethash/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ethereumjs/ethash/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ethereumjs/tx": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz",
- "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/common": "^2.6.0",
- "ethereumjs-util": "^7.1.3"
- }
- },
- "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ethereumjs/vm": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz",
- "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/block": "^3.6.0",
- "@ethereumjs/blockchain": "^5.5.0",
- "@ethereumjs/common": "^2.6.0",
- "@ethereumjs/tx": "^3.4.0",
- "async-eventemitter": "^0.2.4",
- "core-js-pure": "^3.0.1",
- "debug": "^2.2.0",
- "ethereumjs-util": "^7.1.3",
- "functional-red-black-tree": "^1.0.1",
- "mcl-wasm": "^0.7.1",
- "merkle-patricia-tree": "^4.2.2",
- "rustbn.js": "~0.2.0"
- }
- },
- "node_modules/@ethereumjs/vm/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@ethereumjs/vm/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ethereumjs/vm/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ethereumjs/vm/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/@ethersproject/abi": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz",
- "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/abstract-provider": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
- "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/networks": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/web": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/abstract-signer": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz",
- "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/address": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz",
- "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/rlp": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/base64": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz",
- "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/basex": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz",
- "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/properties": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/bignumber": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
- "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "bn.js": "^5.2.1"
- }
- },
- "node_modules/@ethersproject/bytes": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz",
- "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/constants": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz",
- "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bignumber": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/contracts": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz",
- "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abi": "^5.7.0",
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/hash": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
- "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/base64": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/hdnode": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz",
- "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/basex": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/pbkdf2": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0",
- "@ethersproject/signing-key": "^5.7.0",
- "@ethersproject/strings": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/wordlists": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/json-wallets": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz",
- "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/hdnode": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/pbkdf2": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/random": "^5.7.0",
- "@ethersproject/strings": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "aes-js": "3.0.0",
- "scrypt-js": "3.0.1"
- }
- },
- "node_modules/@ethersproject/keccak256": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
- "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "js-sha3": "0.8.0"
- }
- },
- "node_modules/@ethersproject/logger": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz",
- "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ]
- },
- "node_modules/@ethersproject/networks": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz",
- "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/pbkdf2": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz",
- "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/properties": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
- "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/providers": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz",
- "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/base64": "^5.7.0",
- "@ethersproject/basex": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/networks": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/random": "^5.7.0",
- "@ethersproject/rlp": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0",
- "@ethersproject/strings": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/web": "^5.7.0",
- "bech32": "1.1.4",
- "ws": "7.4.6"
- }
- },
- "node_modules/@ethersproject/providers/node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/@ethersproject/random": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz",
- "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/rlp": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
- "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/sha2": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz",
- "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "hash.js": "1.1.7"
- }
- },
- "node_modules/@ethersproject/signing-key": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
- "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "bn.js": "^5.2.1",
- "elliptic": "6.5.4",
- "hash.js": "1.1.7"
- }
- },
- "node_modules/@ethersproject/solidity": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz",
- "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/strings": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
- "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/transactions": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz",
- "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/rlp": "^5.7.0",
- "@ethersproject/signing-key": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/units": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz",
- "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/wallet": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz",
- "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/hdnode": "^5.7.0",
- "@ethersproject/json-wallets": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/random": "^5.7.0",
- "@ethersproject/signing-key": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/wordlists": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/web": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
- "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/base64": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "node_modules/@ethersproject/wordlists": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz",
- "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "node_modules/@ganache/ethereum-address": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz",
- "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==",
- "dev": true,
- "dependencies": {
- "@ganache/utils": "0.1.4"
- }
- },
- "node_modules/@ganache/ethereum-options": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz",
- "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==",
- "dev": true,
- "dependencies": {
- "@ganache/ethereum-address": "0.1.4",
- "@ganache/ethereum-utils": "0.1.4",
- "@ganache/options": "0.1.4",
- "@ganache/utils": "0.1.4",
- "bip39": "3.0.4",
- "seedrandom": "3.0.5"
- }
- },
- "node_modules/@ganache/ethereum-utils": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz",
- "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==",
- "dev": true,
- "dependencies": {
- "@ethereumjs/common": "2.6.0",
- "@ethereumjs/tx": "3.4.0",
- "@ethereumjs/vm": "5.6.0",
- "@ganache/ethereum-address": "0.1.4",
- "@ganache/rlp": "0.1.4",
- "@ganache/utils": "0.1.4",
- "emittery": "0.10.0",
- "ethereumjs-abi": "0.6.8",
- "ethereumjs-util": "7.1.3"
- }
- },
- "node_modules/@ganache/ethereum-utils/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@ganache/ethereum-utils/node_modules/ethereumjs-util": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz",
- "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@ganache/options": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz",
- "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==",
- "dev": true,
- "dependencies": {
- "@ganache/utils": "0.1.4",
- "bip39": "3.0.4",
- "seedrandom": "3.0.5"
- }
- },
- "node_modules/@ganache/rlp": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz",
- "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==",
- "dev": true,
- "dependencies": {
- "@ganache/utils": "0.1.4",
- "rlp": "2.2.6"
- }
- },
- "node_modules/@ganache/rlp/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/@ganache/rlp/node_modules/rlp": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
- "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.1"
- },
- "bin": {
- "rlp": "bin/rlp"
- }
- },
- "node_modules/@ganache/utils": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz",
- "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==",
- "dev": true,
- "dependencies": {
- "emittery": "0.10.0",
- "keccak": "3.0.1",
- "seedrandom": "3.0.5"
- },
- "optionalDependencies": {
- "@trufflesuite/bigint-buffer": "1.1.9"
- }
- },
- "node_modules/@ganache/utils/node_modules/keccak": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
- "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "node_modules/@metamask/eth-sig-util": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz",
- "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==",
- "dev": true,
- "dependencies": {
- "ethereumjs-abi": "^0.6.8",
- "ethereumjs-util": "^6.2.1",
- "ethjs-util": "^0.1.6",
- "tweetnacl": "^1.0.3",
- "tweetnacl-util": "^0.15.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@morgan-stanley/ts-mocking-bird": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz",
- "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.16",
- "uuid": "^7.0.3"
- },
- "peerDependencies": {
- "jasmine": "2.x || 3.x || 4.x",
- "jest": "26.x || 27.x || 28.x",
- "typescript": ">=4.2"
- },
- "peerDependenciesMeta": {
- "jasmine": {
- "optional": true
- },
- "jest": {
- "optional": true
- }
- }
- },
- "node_modules/@morgan-stanley/ts-mocking-bird/node_modules/uuid": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz",
- "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ]
- },
- "node_modules/@noble/secp256k1": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
- "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ]
- },
- "node_modules/@nomicfoundation/ethereumjs-block": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.2.2.tgz",
- "integrity": "sha512-atjpt4gc6ZGZUPHBAQaUJsm1l/VCo7FmyQ780tMGO8QStjLdhz09dXynmhwVTy5YbRr0FOh/uX3QaEM0yIB2Zg==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-tx": "4.1.2",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "ethereum-cryptography": "0.1.3"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-blockchain": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.2.2.tgz",
- "integrity": "sha512-6AIB2MoTEPZJLl6IRKcbd8mUmaBAQ/NMe3O7OsAOIiDjMNPPH5KaUQiLfbVlegT4wKIg/GOsFH7XlH2KDVoJNg==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-block": "4.2.2",
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-ethash": "2.0.5",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "abstract-level": "^1.0.3",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "level": "^8.0.0",
- "lru-cache": "^5.1.1",
- "memory-level": "^1.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-common": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.1.2.tgz",
- "integrity": "sha512-JAEBpIua62dyObHM9KI2b4wHZcRQYYge9gxiygTWa3lNCr2zo+K0TbypDpgiNij5MCGNWP1eboNfNfx1a3vkvA==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "crc-32": "^1.2.0"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-ethash": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.5.tgz",
- "integrity": "sha512-xlLdcICGgAYyYmnI3r1t0R5fKGBJNDQSOQxXNjVO99JmxJIdXR5MgPo5CSJO1RpyzKOgzi3uIFn8agv564dZEQ==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-block": "4.2.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "abstract-level": "^1.0.3",
- "bigint-crypto-utils": "^3.0.23",
- "ethereum-cryptography": "0.1.3"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-evm": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.3.2.tgz",
- "integrity": "sha512-I00d4MwXuobyoqdPe/12dxUQxTYzX8OckSaWsMcWAfQhgVDvBx6ffPyP/w1aL0NW7MjyerySPcSVfDJAMHjilw==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "@types/async-eventemitter": "^0.2.1",
- "async-eventemitter": "^0.2.4",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "mcl-wasm": "^0.7.1",
- "rustbn.js": "~0.2.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-rlp": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.3.tgz",
- "integrity": "sha512-DZMzB/lqPK78T6MluyXqtlRmOMcsZbTTbbEyAjo0ncaff2mqu/k8a79PBcyvpgAhWD/R59Fjq/x3ro5Lof0AtA==",
- "dev": true,
- "bin": {
- "rlp": "bin/rlp"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-statemanager": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.5.tgz",
- "integrity": "sha512-CAhzpzTR5toh/qOJIZUUOnWekUXuRqkkzaGAQrVcF457VhtCmr+ddZjjK50KNZ524c1XP8cISguEVNqJ6ij1sA==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "functional-red-black-tree": "^1.0.1"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-trie": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.5.tgz",
- "integrity": "sha512-+8sNZrXkzvA1NH5F4kz5RSYl1I6iaRz7mAZRsyxOm0IVY4UaP43Ofvfp/TwOalFunurQrYB5pRO40+8FBcxFMA==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "ethereum-cryptography": "0.1.3",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-tx": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.1.2.tgz",
- "integrity": "sha512-emJBJZpmTdUa09cqxQqHaysbBI9Od353ZazeH7WgPb35miMgNY6mb7/3vBA98N5lUW/rgkiItjX0KZfIzihSoQ==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "ethereum-cryptography": "0.1.3"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-util": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.6.tgz",
- "integrity": "sha512-jOQfF44laa7xRfbfLXojdlcpkvxeHrE2Xu7tSeITsWFgoII163MzjOwFEzSNozHYieFysyoEMhCdP+NY5ikstw==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "ethereum-cryptography": "0.1.3"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-vm": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.4.2.tgz",
- "integrity": "sha512-PRTyxZMP6kx+OdAzBhuH1LD2Yw+hrSpaytftvaK//thDy2OI07S0nrTdbrdk7b8ZVPAc9H9oTwFBl3/wJ3w15g==",
- "dev": true,
- "dependencies": {
- "@nomicfoundation/ethereumjs-block": "4.2.2",
- "@nomicfoundation/ethereumjs-blockchain": "6.2.2",
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-evm": "1.3.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-statemanager": "1.0.5",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-tx": "4.1.2",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "@types/async-eventemitter": "^0.2.1",
- "async-eventemitter": "^0.2.4",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "functional-red-black-tree": "^1.0.1",
- "mcl-wasm": "^0.7.1",
- "rustbn.js": "~0.2.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/@nomicfoundation/hardhat-foundry": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.0.0.tgz",
- "integrity": "sha512-/2cmtIZPnsQj/SRIu9idbBan5j19RD35MECAGmZCcuXX4AO6Wn0nOnpUwpcvGomKW403h4+rXh8AHMWC4Vvw0Q==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2"
- },
- "peerDependencies": {
- "hardhat": "^2.12.6"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz",
- "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==",
- "dev": true,
- "engines": {
- "node": ">= 12"
- },
- "optionalDependencies": {
- "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1",
- "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1",
- "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1",
- "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1",
- "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1",
- "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz",
- "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz",
- "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz",
- "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz",
- "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz",
- "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz",
- "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz",
- "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz",
- "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz",
- "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz",
- "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nomiclabs/hardhat-ethers": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz",
- "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==",
- "dev": true,
- "peerDependencies": {
- "ethers": "^5.0.0",
- "hardhat": "^2.0.0"
- }
- },
- "node_modules/@resolver-engine/core": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz",
- "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==",
- "dev": true,
- "dependencies": {
- "debug": "^3.1.0",
- "is-url": "^1.2.4",
- "request": "^2.85.0"
- }
- },
- "node_modules/@resolver-engine/core/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/@resolver-engine/fs": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz",
- "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==",
- "dev": true,
- "dependencies": {
- "@resolver-engine/core": "^0.3.3",
- "debug": "^3.1.0"
- }
- },
- "node_modules/@resolver-engine/fs/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/@resolver-engine/imports": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz",
- "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==",
- "dev": true,
- "dependencies": {
- "@resolver-engine/core": "^0.3.3",
- "debug": "^3.1.0",
- "hosted-git-info": "^2.6.0",
- "path-browserify": "^1.0.0",
- "url": "^0.11.0"
- }
- },
- "node_modules/@resolver-engine/imports-fs": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz",
- "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==",
- "dev": true,
- "dependencies": {
- "@resolver-engine/fs": "^0.3.3",
- "@resolver-engine/imports": "^0.3.3",
- "debug": "^3.1.0"
- }
- },
- "node_modules/@resolver-engine/imports-fs/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/@resolver-engine/imports/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/@scure/base": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
- "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ]
- },
- "node_modules/@scure/bip32": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz",
- "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "@noble/hashes": "~1.2.0",
- "@noble/secp256k1": "~1.7.0",
- "@scure/base": "~1.1.0"
- }
- },
- "node_modules/@scure/bip39": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz",
- "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "@noble/hashes": "~1.2.0",
- "@scure/base": "~1.1.0"
- }
- },
- "node_modules/@sentry/core": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
- "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
- "dev": true,
- "dependencies": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/hub": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
- "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
- "dev": true,
- "dependencies": {
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/minimal": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
- "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
- "dev": true,
- "dependencies": {
- "@sentry/hub": "5.30.0",
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/node": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
- "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
- "dev": true,
- "dependencies": {
- "@sentry/core": "5.30.0",
- "@sentry/hub": "5.30.0",
- "@sentry/tracing": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "cookie": "^0.4.1",
- "https-proxy-agent": "^5.0.0",
- "lru_map": "^0.3.3",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/tracing": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
- "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
- "dev": true,
- "dependencies": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/types": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
- "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/utils": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
- "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
- "dev": true,
- "dependencies": {
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@trufflesuite/bigint-buffer": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz",
- "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "node-gyp-build": "4.3.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
- "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
- "dev": true,
- "optional": true,
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/@tsconfig/node10": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
- "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
- "dev": true
- },
- "node_modules/@tsconfig/node12": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
- "dev": true
- },
- "node_modules/@tsconfig/node14": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
- "dev": true
- },
- "node_modules/@tsconfig/node16": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
- "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
- "dev": true
- },
- "node_modules/@typechain/ethers-v5": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz",
- "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.15",
- "ts-essentials": "^7.0.1"
- },
- "peerDependencies": {
- "@ethersproject/abi": "^5.0.0",
- "@ethersproject/bytes": "^5.0.0",
- "@ethersproject/providers": "^5.0.0",
- "ethers": "^5.1.3",
- "typechain": "^8.1.1",
- "typescript": ">=4.3.0"
- }
- },
- "node_modules/@typechain/hardhat": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz",
- "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==",
- "dev": true,
- "dependencies": {
- "fs-extra": "^9.1.0"
- },
- "peerDependencies": {
- "@ethersproject/abi": "^5.4.7",
- "@ethersproject/providers": "^5.4.7",
- "@typechain/ethers-v5": "^10.2.0",
- "ethers": "^5.4.7",
- "hardhat": "^2.9.9",
- "typechain": "^8.1.1"
- }
- },
- "node_modules/@typechain/hardhat/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typechain/hardhat/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@typechain/hardhat/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@types/abstract-leveldown": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz",
- "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==",
- "dev": true
- },
- "node_modules/@types/async-eventemitter": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz",
- "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==",
- "dev": true
- },
- "node_modules/@types/bn.js": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz",
- "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==",
- "dev": true
- },
- "node_modules/@types/level-errors": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz",
- "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==",
- "dev": true
- },
- "node_modules/@types/levelup": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz",
- "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==",
- "dev": true,
- "dependencies": {
- "@types/abstract-leveldown": "*",
- "@types/level-errors": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==",
- "dev": true
- },
- "node_modules/@types/mkdirp": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz",
- "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/mocha": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz",
- "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "18.15.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
- "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
- "dev": true
- },
- "node_modules/@types/node-fetch": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz",
- "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- }
- },
- "node_modules/@types/pbkdf2": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
- "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
- "node_modules/@types/qs": {
- "version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
- "dev": true
- },
- "node_modules/@types/secp256k1": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz",
- "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/abstract-level": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
- "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==",
- "dev": true,
- "dependencies": {
- "buffer": "^6.0.3",
- "catering": "^2.1.0",
- "is-buffer": "^2.0.5",
- "level-supports": "^4.0.0",
- "level-transcoder": "^1.0.1",
- "module-error": "^1.0.1",
- "queue-microtask": "^1.2.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/abstract-leveldown": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz",
- "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/abstract-leveldown/node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/abstract-leveldown/node_modules/level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "dependencies": {
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
- "dev": true,
- "engines": {
- "node": ">=0.3.0"
- }
- },
- "node_modules/aes-js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==",
- "dev": true
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/array-back": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
- "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
- "node_modules/async-eventemitter": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
- "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
- "dev": true,
- "dependencies": {
- "async": "^2.4.0"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
- "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
- "dev": true
- },
- "node_modules/axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
- "dev": true,
- "dependencies": {
- "follow-redirects": "^1.14.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/base-x": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
- "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dev": true,
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true
- },
- "node_modules/bech32": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
- "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
- "dev": true
- },
- "node_modules/bigint-crypto-utils": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz",
- "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==",
- "dev": true,
- "dependencies": {
- "bigint-mod-arith": "^3.1.0"
- },
- "engines": {
- "node": ">=10.4.0"
- }
- },
- "node_modules/bigint-mod-arith": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz",
- "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==",
- "dev": true,
- "engines": {
- "node": ">=10.4.0"
- }
- },
- "node_modules/bignumber.js": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz",
- "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bip39": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz",
- "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==",
- "dev": true,
- "dependencies": {
- "@types/node": "11.11.6",
- "create-hash": "^1.1.0",
- "pbkdf2": "^3.0.9",
- "randombytes": "^2.0.1"
- }
- },
- "node_modules/bip39/node_modules/@types/node": {
- "version": "11.11.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz",
- "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==",
- "dev": true
- },
- "node_modules/blakejs": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
- "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==",
- "dev": true
- },
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true,
- "peer": true
- },
- "node_modules/bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
- "dev": true
- },
- "node_modules/browser-level": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz",
- "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==",
- "dev": true,
- "dependencies": {
- "abstract-level": "^1.0.2",
- "catering": "^2.1.1",
- "module-error": "^1.0.2",
- "run-parallel-limit": "^1.1.0"
- }
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "dependencies": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/bs58": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
- "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
- "dev": true,
- "dependencies": {
- "base-x": "^3.0.2"
- }
- },
- "node_modules/bs58check": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
- "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
- "dev": true,
- "dependencies": {
- "bs58": "^4.0.0",
- "create-hash": "^1.1.0",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/buffer-reverse": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz",
- "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==",
- "dev": true
- },
- "node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
- "dev": true
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dev": true,
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
- "dev": true
- },
- "node_modules/catering": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
- "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/chai": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
- "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
- "dev": true,
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^4.1.2",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "node_modules/cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/classic-level": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz",
- "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "abstract-level": "^1.0.2",
- "catering": "^2.1.0",
- "module-error": "^1.0.1",
- "napi-macros": "~2.0.0",
- "node-gyp-build": "^4.3.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/command-exists": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
- "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
- "dev": true
- },
- "node_modules/command-line-args": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
- "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
- "dev": true,
- "dependencies": {
- "array-back": "^3.1.0",
- "find-replace": "^3.0.0",
- "lodash.camelcase": "^4.3.0",
- "typical": "^4.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/command-line-usage": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz",
- "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==",
- "dev": true,
- "dependencies": {
- "array-back": "^4.0.2",
- "chalk": "^2.4.2",
- "table-layout": "^1.0.2",
- "typical": "^5.2.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/command-line-usage/node_modules/array-back": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
- "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/command-line-usage/node_modules/typical": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
- "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/commander": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
- "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/core-js-pure": {
- "version": "3.29.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.1.tgz",
- "integrity": "sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==",
- "dev": true,
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
- "dev": true
- },
- "node_modules/crc-32": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
- "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
- "dev": true,
- "bin": {
- "crc32": "bin/crc32.njs"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "node_modules/create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "node_modules/create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
- },
- "node_modules/crypto-js": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
- "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==",
- "dev": true
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-eql": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
- "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true,
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deferred-leveldown": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
- "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
- "dev": true,
- "dependencies": {
- "abstract-leveldown": "~6.2.1",
- "inherits": "^2.0.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/deferred-leveldown/node_modules/abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/deferred-leveldown/node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/deferred-leveldown/node_modules/level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "dependencies": {
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dotenv": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
- "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dev": true,
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/emittery": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz",
- "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/encode-utf8": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
- "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
- "dev": true
- },
- "node_modules/encoding-down": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
- "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
- "dev": true,
- "dependencies": {
- "abstract-leveldown": "^6.2.1",
- "inherits": "^2.0.3",
- "level-codec": "^9.0.0",
- "level-errors": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dev": true,
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eth-ens-namehash": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz",
- "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "idna-uts46-hx": "^2.3.1",
- "js-sha3": "^0.5.7"
- }
- },
- "node_modules/eth-ens-namehash/node_modules/js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==",
- "dev": true,
- "peer": true
- },
- "node_modules/ethereum-bloom-filters": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz",
- "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==",
- "dev": true,
- "dependencies": {
- "js-sha3": "^0.8.0"
- }
- },
- "node_modules/ethereum-cryptography": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz",
- "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==",
- "dev": true,
- "dependencies": {
- "@noble/hashes": "1.2.0",
- "@noble/secp256k1": "1.7.1",
- "@scure/bip32": "1.1.5",
- "@scure/bip39": "1.1.1"
- }
- },
- "node_modules/ethereum-waffle": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz",
- "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==",
- "dev": true,
- "dependencies": {
- "@ethereum-waffle/chai": "4.0.10",
- "@ethereum-waffle/compiler": "4.0.3",
- "@ethereum-waffle/mock-contract": "4.0.4",
- "@ethereum-waffle/provider": "4.0.5",
- "solc": "0.8.15",
- "typechain": "^8.0.0"
- },
- "bin": {
- "waffle": "bin/waffle"
- },
- "engines": {
- "node": ">=10.0"
- },
- "peerDependencies": {
- "ethers": "*"
- }
- },
- "node_modules/ethereum-waffle/node_modules/commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
- "dev": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/ethereum-waffle/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/ethereum-waffle/node_modules/solc": {
- "version": "0.8.15",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz",
- "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==",
- "dev": true,
- "dependencies": {
- "command-exists": "^1.2.8",
- "commander": "^8.1.0",
- "follow-redirects": "^1.12.1",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "bin": {
- "solcjs": "solc.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/ethereumjs-abi": {
- "version": "0.6.8",
- "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
- "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.8",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "node_modules/ethereumjs-abi/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/ethereumjs-util": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
- "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- },
- "node_modules/ethereumjs-util/node_modules/@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/ethereumjs-util/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/ethers": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz",
- "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@ethersproject/abi": "5.7.0",
- "@ethersproject/abstract-provider": "5.7.0",
- "@ethersproject/abstract-signer": "5.7.0",
- "@ethersproject/address": "5.7.0",
- "@ethersproject/base64": "5.7.0",
- "@ethersproject/basex": "5.7.0",
- "@ethersproject/bignumber": "5.7.0",
- "@ethersproject/bytes": "5.7.0",
- "@ethersproject/constants": "5.7.0",
- "@ethersproject/contracts": "5.7.0",
- "@ethersproject/hash": "5.7.0",
- "@ethersproject/hdnode": "5.7.0",
- "@ethersproject/json-wallets": "5.7.0",
- "@ethersproject/keccak256": "5.7.0",
- "@ethersproject/logger": "5.7.0",
- "@ethersproject/networks": "5.7.1",
- "@ethersproject/pbkdf2": "5.7.0",
- "@ethersproject/properties": "5.7.0",
- "@ethersproject/providers": "5.7.2",
- "@ethersproject/random": "5.7.0",
- "@ethersproject/rlp": "5.7.0",
- "@ethersproject/sha2": "5.7.0",
- "@ethersproject/signing-key": "5.7.0",
- "@ethersproject/solidity": "5.7.0",
- "@ethersproject/strings": "5.7.0",
- "@ethersproject/transactions": "5.7.0",
- "@ethersproject/units": "5.7.0",
- "@ethersproject/wallet": "5.7.0",
- "@ethersproject/web": "5.7.1",
- "@ethersproject/wordlists": "5.7.0"
- }
- },
- "node_modules/ethjs-unit": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
- "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==",
- "dev": true,
- "dependencies": {
- "bn.js": "4.11.6",
- "number-to-bn": "1.7.0"
- },
- "engines": {
- "node": ">=6.5.0",
- "npm": ">=3"
- }
- },
- "node_modules/ethjs-unit/node_modules/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
- "dev": true
- },
- "node_modules/ethjs-util": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
- "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
- "dev": true,
- "dependencies": {
- "is-hex-prefixed": "1.0.0",
- "strip-hex-prefix": "1.0.0"
- },
- "engines": {
- "node": ">=6.5.0",
- "npm": ">=3"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "dependencies": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ]
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-replace": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
- "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
- "dev": true,
- "dependencies": {
- "array-back": "^3.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/fmix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz",
- "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==",
- "dev": true,
- "dependencies": {
- "imul": "^1.0.0"
- }
- },
- "node_modules/follow-redirects": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fp-ts": {
- "version": "1.19.3",
- "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
- "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==",
- "dev": true
- },
- "node_modules/fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
- "node_modules/ganache": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz",
- "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==",
- "bundleDependencies": [
- "@trufflesuite/bigint-buffer",
- "emittery",
- "keccak",
- "leveldown",
- "secp256k1",
- "@types/bn.js",
- "@types/lru-cache",
- "@types/seedrandom"
- ],
- "dev": true,
- "hasShrinkwrap": true,
- "dependencies": {
- "@trufflesuite/bigint-buffer": "1.1.10",
- "@types/bn.js": "^5.1.0",
- "@types/lru-cache": "5.1.1",
- "@types/seedrandom": "3.0.1",
- "emittery": "0.10.0",
- "keccak": "3.0.2",
- "leveldown": "6.1.0",
- "secp256k1": "4.0.3"
- },
- "bin": {
- "ganache": "dist/node/cli.js",
- "ganache-cli": "dist/node/cli.js"
- },
- "optionalDependencies": {
- "bufferutil": "4.0.5",
- "utf-8-validate": "5.0.7"
- }
- },
- "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz",
- "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==",
- "dev": true,
- "hasInstallScript": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "node-gyp-build": "4.4.0"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz",
- "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/ganache/node_modules/@types/bn.js": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz",
- "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/ganache/node_modules/@types/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/@types/node": {
- "version": "17.0.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz",
- "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/@types/seedrandom": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz",
- "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/ganache/node_modules/bufferutil": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz",
- "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "node-gyp-build": "^4.3.0"
- }
- },
- "node_modules/ganache/node_modules/catering": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz",
- "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "queue-tick": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ganache/node_modules/elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/ganache/node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/emittery": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz",
- "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
- "node_modules/ganache/node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/ganache/node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/ganache/node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/ganache/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/ganache/node_modules/is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ganache/node_modules/keccak": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz",
- "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==",
- "dev": true,
- "hasInstallScript": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/ganache/node_modules/leveldown": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz",
- "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==",
- "dev": true,
- "hasInstallScript": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "abstract-leveldown": "^7.2.0",
- "napi-macros": "~2.0.0",
- "node-gyp-build": "^4.3.0"
- },
- "engines": {
- "node": ">=10.12.0"
- }
- },
- "node_modules/ganache/node_modules/leveldown/node_modules/abstract-leveldown": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz",
- "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "buffer": "^6.0.3",
- "catering": "^2.0.0",
- "is-buffer": "^2.0.5",
- "level-concat-iterator": "^3.0.0",
- "level-supports": "^2.0.1",
- "queue-microtask": "^1.2.3"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ganache/node_modules/leveldown/node_modules/level-concat-iterator": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz",
- "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "catering": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ganache/node_modules/leveldown/node_modules/level-supports": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz",
- "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ganache/node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true,
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/ganache/node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/napi-macros": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
- "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/node-gyp-build": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
- "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/ganache/node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/queue-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz",
- "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/ganache/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/ganache/node_modules/secp256k1": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
- "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
- "dev": true,
- "hasInstallScript": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "elliptic": "^6.5.4",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/ganache/node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/ganache/node_modules/utf-8-validate": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz",
- "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "node-gyp-build": "^4.3.0"
- }
- },
- "node_modules/ganache/node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
- "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/hardhat": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz",
- "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==",
- "dev": true,
- "dependencies": {
- "@ethersproject/abi": "^5.1.2",
- "@metamask/eth-sig-util": "^4.0.0",
- "@nomicfoundation/ethereumjs-block": "^4.0.0",
- "@nomicfoundation/ethereumjs-blockchain": "^6.0.0",
- "@nomicfoundation/ethereumjs-common": "^3.0.0",
- "@nomicfoundation/ethereumjs-evm": "^1.0.0",
- "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
- "@nomicfoundation/ethereumjs-statemanager": "^1.0.0",
- "@nomicfoundation/ethereumjs-trie": "^5.0.0",
- "@nomicfoundation/ethereumjs-tx": "^4.0.0",
- "@nomicfoundation/ethereumjs-util": "^8.0.0",
- "@nomicfoundation/ethereumjs-vm": "^6.0.0",
- "@nomicfoundation/solidity-analyzer": "^0.1.0",
- "@sentry/node": "^5.18.1",
- "@types/bn.js": "^5.1.0",
- "@types/lru-cache": "^5.1.0",
- "abort-controller": "^3.0.0",
- "adm-zip": "^0.4.16",
- "aggregate-error": "^3.0.0",
- "ansi-escapes": "^4.3.0",
- "chalk": "^2.4.2",
- "chokidar": "^3.4.0",
- "ci-info": "^2.0.0",
- "debug": "^4.1.1",
- "enquirer": "^2.3.0",
- "env-paths": "^2.2.0",
- "ethereum-cryptography": "^1.0.3",
- "ethereumjs-abi": "^0.6.8",
- "find-up": "^2.1.0",
- "fp-ts": "1.19.3",
- "fs-extra": "^7.0.1",
- "glob": "7.2.0",
- "immutable": "^4.0.0-rc.12",
- "io-ts": "1.10.4",
- "keccak": "^3.0.2",
- "lodash": "^4.17.11",
- "mnemonist": "^0.38.0",
- "mocha": "^10.0.0",
- "p-map": "^4.0.0",
- "qs": "^6.7.0",
- "raw-body": "^2.4.1",
- "resolve": "1.17.0",
- "semver": "^6.3.0",
- "solc": "0.7.3",
- "source-map-support": "^0.5.13",
- "stacktrace-parser": "^0.1.10",
- "tsort": "0.0.1",
- "undici": "^5.14.0",
- "uuid": "^8.3.2",
- "ws": "^7.4.6"
- },
- "bin": {
- "hardhat": "internal/cli/bootstrap.js"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "ts-node": "*",
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "ts-node": {
- "optional": true
- },
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/hardhat-deploy": {
- "version": "0.11.26",
- "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.26.tgz",
- "integrity": "sha512-GvnkD8v6q0coCQbwZNeUcO3ab1zz36FKsqzNdm6EcnVoAfXVkFpdA0pgJ7/Rk3+Lv5709xOtbneFOyoukUOhWQ==",
- "dev": true,
- "dependencies": {
- "@ethersproject/abi": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/contracts": "^5.7.0",
- "@ethersproject/providers": "^5.7.2",
- "@ethersproject/solidity": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/wallet": "^5.7.0",
- "@types/qs": "^6.9.7",
- "axios": "^0.21.1",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.2",
- "debug": "^4.3.2",
- "enquirer": "^2.3.6",
- "ethers": "^5.5.3",
- "form-data": "^4.0.0",
- "fs-extra": "^10.0.0",
- "match-all": "^1.2.6",
- "murmur-128": "^0.2.1",
- "qs": "^6.9.4",
- "zksync-web3": "^0.14.3"
- }
- },
- "node_modules/hardhat-deploy/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/hardhat-deploy/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/hardhat-deploy/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/hardhat-deploy/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/hardhat-deploy/node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/hardhat-deploy/node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/hardhat-deploy/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/hardhat-deploy/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/hardhat-deploy/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/hardhat-deploy/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
- "dev": true,
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/idna-uts46-hx": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz",
- "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "punycode": "2.1.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/immediate": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
- "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==",
- "dev": true
- },
- "node_modules/immutable": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
- "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
- "dev": true
- },
- "node_modules/imul": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz",
- "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/io-ts": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
- "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
- "dev": true,
- "dependencies": {
- "fp-ts": "^1.0.0"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "peer": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-hex-prefixed": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==",
- "dev": true,
- "engines": {
- "node": ">=6.5.0",
- "npm": ">=3"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
- "dev": true
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
- "dev": true
- },
- "node_modules/is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true,
- "peer": true
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
- "dev": true
- },
- "node_modules/js-sha3": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
- "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
- "dev": true
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
- "dev": true
- },
- "node_modules/json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "dev": true,
- "dependencies": {
- "bignumber.js": "^9.0.0"
- }
- },
- "node_modules/json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
- "dev": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
- "dev": true
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "dev": true,
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/keccak": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz",
- "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/keccak256": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/keccak256/-/keccak256-1.0.6.tgz",
- "integrity": "sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.2.0",
- "buffer": "^6.0.3",
- "keccak": "^3.0.2"
- }
- },
- "node_modules/klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.9"
- }
- },
- "node_modules/lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "invert-kv": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/level": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
- "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
- "dev": true,
- "dependencies": {
- "browser-level": "^1.0.1",
- "classic-level": "^1.2.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/level"
- }
- },
- "node_modules/level-codec": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
- "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-codec/node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/level-concat-iterator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
- "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
- "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
- "dev": true,
- "dependencies": {
- "errno": "~0.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-iterator-stream": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
- "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0",
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-mem": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz",
- "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==",
- "dev": true,
- "dependencies": {
- "level-packager": "^5.0.3",
- "memdown": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-packager": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
- "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
- "dev": true,
- "dependencies": {
- "encoding-down": "^6.3.0",
- "levelup": "^4.3.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-supports": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
- "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/level-transcoder": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
- "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
- "dev": true,
- "dependencies": {
- "buffer": "^6.0.3",
- "module-error": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/level-ws": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz",
- "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.0",
- "xtend": "^4.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levelup": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
- "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
- "dev": true,
- "dependencies": {
- "deferred-leveldown": "~5.3.0",
- "level-errors": "~2.0.0",
- "level-iterator-stream": "~4.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levelup/node_modules/level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "dependencies": {
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==",
- "dev": true,
- "peer": true
- },
- "node_modules/lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/loupe": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
- "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.0"
- }
- },
- "node_modules/lru_map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
- "dev": true
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==",
- "dev": true
- },
- "node_modules/make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "node_modules/match-all": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz",
- "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==",
- "dev": true
- },
- "node_modules/mcl-wasm": {
- "version": "0.7.9",
- "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz",
- "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==",
- "dev": true,
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/memdown": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz",
- "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==",
- "dev": true,
- "dependencies": {
- "abstract-leveldown": "~6.2.1",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/memdown/node_modules/abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/memdown/node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/memdown/node_modules/immediate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==",
- "dev": true
- },
- "node_modules/memdown/node_modules/level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "dependencies": {
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/memory-level": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz",
- "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==",
- "dev": true,
- "dependencies": {
- "abstract-level": "^1.0.0",
- "functional-red-black-tree": "^1.0.1",
- "module-error": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
- "dev": true,
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/merkle-patricia-tree": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz",
- "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==",
- "dev": true,
- "dependencies": {
- "@types/levelup": "^4.3.0",
- "ethereumjs-util": "^7.1.4",
- "level-mem": "^5.0.1",
- "level-ws": "^2.0.0",
- "readable-stream": "^3.6.0",
- "semaphore-async-await": "^1.5.1"
- }
- },
- "node_modules/merkle-patricia-tree/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/merkletreejs": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.9.tgz",
- "integrity": "sha512-NjlATjJr4NEn9s8v/VEHhgwRWaE1eA/Une07d9SEqKzULJi1Wsh0Y3svwJdP2bYLMmgSBHzOrNydMWM1NN9VeQ==",
- "dev": true,
- "dependencies": {
- "bignumber.js": "^9.0.1",
- "buffer-reverse": "^1.0.1",
- "crypto-js": "^3.1.9-1",
- "treeify": "^1.1.0",
- "web3-utils": "^1.3.4"
- },
- "engines": {
- "node": ">= 7.6.0"
- }
- },
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "bin": {
- "miller-rabin": "bin/miller-rabin"
- }
- },
- "node_modules/miller-rabin/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
- "dev": true
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mnemonist": {
- "version": "0.38.5",
- "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
- "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
- "dev": true,
- "dependencies": {
- "obliterator": "^2.0.0"
- }
- },
- "node_modules/mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.4",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "5.0.1",
- "ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "workerpool": "6.2.1",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
- }
- },
- "node_modules/mocha/node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mocha/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/mocha/node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/mocha/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mocha/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mocha/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/module-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz",
- "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/murmur-128": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz",
- "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==",
- "dev": true,
- "dependencies": {
- "encode-utf8": "^1.0.2",
- "fmix": "^0.1.0",
- "imul": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
- "dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-macros": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
- "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
- "dev": true
- },
- "node_modules/node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
- "dev": true
- },
- "node_modules/node-fetch": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
- "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
- "dev": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-gyp-build": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
- "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
- "dev": true,
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/normalize-package-data/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/number-to-bn": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
- "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==",
- "dev": true,
- "dependencies": {
- "bn.js": "4.11.6",
- "strip-hex-prefix": "1.0.0"
- },
- "engines": {
- "node": ">=6.5.0",
- "npm": ">=3"
- }
- },
- "node_modules/number-to-bn/node_modules/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
- "dev": true
- },
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.12.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/obliterator": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
- "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==",
- "dev": true
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "lcid": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "error-ex": "^1.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "dev": true
- },
- "node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dev": true,
- "dependencies": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "pinkie": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/prettier": {
- "version": "2.8.7",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
- "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
- "dev": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
- "dev": true
- },
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "dev": true
- },
- "node_modules/punycode": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
- "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.11.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz",
- "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==",
- "dev": true,
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
- "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/read-pkg-up/node_modules/find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/read-pkg-up/node_modules/path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/reduce-flatten": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
- "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dev": true,
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request/node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/request/node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "dev": true,
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
- "dev": true,
- "peer": true
- },
- "node_modules/resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dev": true,
- "dependencies": {
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "node_modules/rlp": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz",
- "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.2.0"
- },
- "bin": {
- "rlp": "bin/rlp"
- }
- },
- "node_modules/run-parallel-limit": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz",
- "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rustbn.js": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz",
- "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==",
- "dev": true
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/scrypt-js": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
- "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
- "dev": true
- },
- "node_modules/secp256k1": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
- "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "elliptic": "^6.5.4",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/seedrandom": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
- "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
- "dev": true
- },
- "node_modules/semaphore-async-await": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz",
- "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==",
- "dev": true,
- "engines": {
- "node": ">=4.1"
- }
- },
- "node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true,
- "peer": true
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
- "dev": true
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "node_modules/sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- },
- "bin": {
- "sha.js": "bin.js"
- }
- },
- "node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/solc": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
- "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
- "dev": true,
- "dependencies": {
- "command-exists": "^1.2.8",
- "commander": "3.0.2",
- "follow-redirects": "^1.12.1",
- "fs-extra": "^0.30.0",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^2.0.0",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "bin": {
- "solcjs": "solcjs"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/solc/node_modules/fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "node_modules/solc/node_modules/jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/solc/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/spdx-correct": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
- "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true,
- "peer": true
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
- "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
- "dev": true,
- "peer": true
- },
- "node_modules/sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "dev": true,
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sshpk/node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true
- },
- "node_modules/stacktrace-parser": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
- "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.7.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/stacktrace-parser/node_modules/type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-format": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz",
- "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==",
- "dev": true
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-utf8": "^0.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-hex-prefix": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
- "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==",
- "dev": true,
- "dependencies": {
- "is-hex-prefixed": "1.0.0"
- },
- "engines": {
- "node": ">=6.5.0",
- "npm": ">=3"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/table-layout": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz",
- "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==",
- "dev": true,
- "dependencies": {
- "array-back": "^4.0.1",
- "deep-extend": "~0.6.0",
- "typical": "^5.2.0",
- "wordwrapjs": "^4.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/table-layout/node_modules/array-back": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
- "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/table-layout/node_modules/typical": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
- "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/testrpc": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz",
- "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==",
- "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.",
- "dev": true,
- "peer": true
- },
- "node_modules/tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tough-cookie/node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "dev": true
- },
- "node_modules/treeify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz",
- "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/ts-command-line-args": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz",
- "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==",
- "dev": true,
- "dependencies": {
- "@morgan-stanley/ts-mocking-bird": "^0.6.2",
- "chalk": "^4.1.0",
- "command-line-args": "^5.1.1",
- "command-line-usage": "^6.1.0",
- "string-format": "^2.0.0"
- },
- "bin": {
- "write-markdown": "dist/write-markdown.js"
- }
- },
- "node_modules/ts-command-line-args/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/ts-command-line-args/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/ts-command-line-args/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/ts-command-line-args/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/ts-command-line-args/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ts-command-line-args/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ts-essentials": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz",
- "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==",
- "dev": true,
- "peerDependencies": {
- "typescript": ">=3.7.0"
- }
- },
- "node_modules/ts-node": {
- "version": "10.9.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
- "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
- "dev": true,
- "dependencies": {
- "@cspotcode/source-map-support": "^0.8.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.1",
- "yn": "3.1.1"
- },
- "bin": {
- "ts-node": "dist/bin.js",
- "ts-node-cwd": "dist/bin-cwd.js",
- "ts-node-esm": "dist/bin-esm.js",
- "ts-node-script": "dist/bin-script.js",
- "ts-node-transpile-only": "dist/bin-transpile.js",
- "ts-script": "dist/bin-script-deprecated.js"
- },
- "peerDependencies": {
- "@swc/core": ">=1.2.50",
- "@swc/wasm": ">=1.2.50",
- "@types/node": "*",
- "typescript": ">=2.7"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "@swc/wasm": {
- "optional": true
- }
- }
- },
- "node_modules/ts-node/node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "node_modules/tsort": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
- "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==",
- "dev": true
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
- "dev": true
- },
- "node_modules/tweetnacl-util": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz",
- "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==",
- "dev": true
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typechain": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz",
- "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==",
- "dev": true,
- "dependencies": {
- "@types/prettier": "^2.1.1",
- "debug": "^4.3.1",
- "fs-extra": "^7.0.0",
- "glob": "7.1.7",
- "js-sha3": "^0.8.0",
- "lodash": "^4.17.15",
- "mkdirp": "^1.0.4",
- "prettier": "^2.3.1",
- "ts-command-line-args": "^2.2.0",
- "ts-essentials": "^7.0.1"
- },
- "bin": {
- "typechain": "dist/cli/cli.js"
- },
- "peerDependencies": {
- "typescript": ">=4.3.0"
- }
- },
- "node_modules/typechain/node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/typescript": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz",
- "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==",
- "dev": true,
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/typical": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
- "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/undici": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz",
- "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==",
- "dev": true,
- "dependencies": {
- "busboy": "^1.6.0"
- },
- "engines": {
- "node": ">=12.18"
- }
- },
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
- "dev": true,
- "dependencies": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- },
- "node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
- "dev": true
- },
- "node_modules/utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
- "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
- "dev": true
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/v8-compile-cache-lib": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
- },
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/web3-utils": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz",
- "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.2.1",
- "ethereum-bloom-filters": "^1.0.6",
- "ethereumjs-util": "^7.1.0",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "utf8": "3.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/web3-utils/node_modules/ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "dependencies": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/web3-utils/node_modules/ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dev": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/window-size": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
- "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==",
- "dev": true,
- "peer": true,
- "bin": {
- "window-size": "cli.js"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/wordwrapjs": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
- "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==",
- "dev": true,
- "dependencies": {
- "reduce-flatten": "^2.0.0",
- "typical": "^5.2.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/wordwrapjs/node_modules/typical": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
- "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/workerpool": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
- "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zksync-web3": {
- "version": "0.14.3",
- "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz",
- "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==",
- "dev": true,
- "peerDependencies": {
- "ethers": "^5.7.0"
- }
- }
- },
- "dependencies": {
- "@account-abstraction/contracts": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.6.0.tgz",
- "integrity": "sha512-8ooRJuR7XzohMDM4MV34I12Ci2bmxfE9+cixakRL7lA4BAwJKQ3ahvd8FbJa9kiwkUPCUNtj+/zxDQWYYalLMQ=="
- },
- "@cspotcode/source-map-support": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "0.3.9"
- }
- },
- "@ensdomains/ens": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz",
- "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==",
- "dev": true,
- "peer": true,
- "requires": {
- "bluebird": "^3.5.2",
- "eth-ens-namehash": "^2.0.8",
- "solc": "^0.4.20",
- "testrpc": "0.0.1",
- "web3-utils": "^1.0.0-beta.31"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "peer": true
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
- "dev": true,
- "peer": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
- "dev": true,
- "peer": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "dev": true,
- "peer": true
- },
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
- "dev": true,
- "peer": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true,
- "peer": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
- "dev": true,
- "peer": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
- "dev": true,
- "peer": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "require-from-string": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==",
- "dev": true,
- "peer": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true
- },
- "solc": {
- "version": "0.4.26",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz",
- "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==",
- "dev": true,
- "peer": true,
- "requires": {
- "fs-extra": "^0.30.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^1.1.0",
- "semver": "^5.3.0",
- "yargs": "^4.7.1"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
- "dev": true,
- "peer": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "peer": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
- "dev": true,
- "peer": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- }
- },
- "y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true,
- "peer": true
- },
- "yargs": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
- "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==",
- "dev": true,
- "peer": true,
- "requires": {
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "lodash.assign": "^4.0.3",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.1",
- "which-module": "^1.0.0",
- "window-size": "^0.2.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^2.4.1"
- }
- },
- "yargs-parser": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
- "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==",
- "dev": true,
- "peer": true,
- "requires": {
- "camelcase": "^3.0.0",
- "lodash.assign": "^4.0.6"
- }
- }
- }
- },
- "@ensdomains/resolver": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz",
- "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==",
- "dev": true,
- "peer": true
- },
- "@ethereum-waffle/chai": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz",
- "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==",
- "dev": true,
- "requires": {
- "@ethereum-waffle/provider": "4.0.5",
- "debug": "^4.3.4",
- "json-bigint": "^1.0.0"
- }
- },
- "@ethereum-waffle/compiler": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz",
- "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==",
- "dev": true,
- "requires": {
- "@resolver-engine/imports": "^0.3.3",
- "@resolver-engine/imports-fs": "^0.3.3",
- "@typechain/ethers-v5": "^10.0.0",
- "@types/mkdirp": "^0.5.2",
- "@types/node-fetch": "^2.6.1",
- "mkdirp": "^0.5.1",
- "node-fetch": "^2.6.7"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.6"
- }
- }
- }
- },
- "@ethereum-waffle/ens": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz",
- "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==",
- "dev": true,
- "requires": {}
- },
- "@ethereum-waffle/mock-contract": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz",
- "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==",
- "dev": true,
- "requires": {}
- },
- "@ethereum-waffle/provider": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz",
- "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==",
- "dev": true,
- "requires": {
- "@ethereum-waffle/ens": "4.0.3",
- "@ganache/ethereum-options": "0.1.4",
- "debug": "^4.3.4",
- "ganache": "7.4.3"
- }
- },
- "@ethereumjs/block": {
- "version": "3.6.3",
- "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz",
- "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==",
- "dev": true,
- "requires": {
- "@ethereumjs/common": "^2.6.5",
- "@ethereumjs/tx": "^3.5.2",
- "ethereumjs-util": "^7.1.5",
- "merkle-patricia-tree": "^4.2.4"
- },
- "dependencies": {
- "@ethereumjs/common": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz",
- "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==",
- "dev": true,
- "requires": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.1.5"
- }
- },
- "@ethereumjs/tx": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz",
- "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==",
- "dev": true,
- "requires": {
- "@ethereumjs/common": "^2.6.4",
- "ethereumjs-util": "^7.1.5"
- }
- },
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "@ethereumjs/blockchain": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz",
- "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==",
- "dev": true,
- "requires": {
- "@ethereumjs/block": "^3.6.2",
- "@ethereumjs/common": "^2.6.4",
- "@ethereumjs/ethash": "^1.1.0",
- "debug": "^4.3.3",
- "ethereumjs-util": "^7.1.5",
- "level-mem": "^5.0.1",
- "lru-cache": "^5.1.1",
- "semaphore-async-await": "^1.5.1"
- },
- "dependencies": {
- "@ethereumjs/common": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz",
- "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==",
- "dev": true,
- "requires": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.1.5"
- }
- },
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "@ethereumjs/common": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz",
- "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==",
- "dev": true,
- "requires": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "@ethereumjs/ethash": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz",
- "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==",
- "dev": true,
- "requires": {
- "@ethereumjs/block": "^3.5.0",
- "@types/levelup": "^4.3.0",
- "buffer-xor": "^2.0.1",
- "ethereumjs-util": "^7.1.1",
- "miller-rabin": "^4.0.0"
- },
- "dependencies": {
- "buffer-xor": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz",
- "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "@ethereumjs/tx": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz",
- "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==",
- "dev": true,
- "requires": {
- "@ethereumjs/common": "^2.6.0",
- "ethereumjs-util": "^7.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "@ethereumjs/vm": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz",
- "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==",
- "dev": true,
- "requires": {
- "@ethereumjs/block": "^3.6.0",
- "@ethereumjs/blockchain": "^5.5.0",
- "@ethereumjs/common": "^2.6.0",
- "@ethereumjs/tx": "^3.4.0",
- "async-eventemitter": "^0.2.4",
- "core-js-pure": "^3.0.1",
- "debug": "^2.2.0",
- "ethereumjs-util": "^7.1.3",
- "functional-red-black-tree": "^1.0.1",
- "mcl-wasm": "^0.7.1",
- "merkle-patricia-tree": "^4.2.2",
- "rustbn.js": "~0.2.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- }
- }
- },
- "@ethersproject/abi": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz",
- "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==",
- "dev": true,
- "requires": {
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "@ethersproject/abstract-provider": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
- "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==",
- "dev": true,
- "requires": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/networks": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/web": "^5.7.0"
- }
- },
- "@ethersproject/abstract-signer": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz",
- "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==",
- "dev": true,
- "requires": {
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0"
- }
- },
- "@ethersproject/address": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz",
- "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==",
- "dev": true,
- "requires": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/rlp": "^5.7.0"
- }
- },
- "@ethersproject/base64": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz",
- "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0"
- }
- },
- "@ethersproject/basex": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz",
- "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/properties": "^5.7.0"
- }
- },
- "@ethersproject/bignumber": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
- "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "bn.js": "^5.2.1"
- }
- },
- "@ethersproject/bytes": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz",
- "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==",
- "dev": true,
- "requires": {
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/constants": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz",
- "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==",
- "dev": true,
- "requires": {
- "@ethersproject/bignumber": "^5.7.0"
- }
- },
- "@ethersproject/contracts": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz",
- "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==",
- "dev": true,
- "requires": {
- "@ethersproject/abi": "^5.7.0",
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0"
- }
- },
- "@ethersproject/hash": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
- "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==",
- "dev": true,
- "requires": {
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/base64": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "@ethersproject/hdnode": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz",
- "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==",
- "dev": true,
- "requires": {
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/basex": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/pbkdf2": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0",
- "@ethersproject/signing-key": "^5.7.0",
- "@ethersproject/strings": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/wordlists": "^5.7.0"
- }
- },
- "@ethersproject/json-wallets": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz",
- "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==",
- "dev": true,
- "requires": {
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/hdnode": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/pbkdf2": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/random": "^5.7.0",
- "@ethersproject/strings": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "aes-js": "3.0.0",
- "scrypt-js": "3.0.1"
- }
- },
- "@ethersproject/keccak256": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
- "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "js-sha3": "0.8.0"
- }
- },
- "@ethersproject/logger": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz",
- "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==",
- "dev": true
- },
- "@ethersproject/networks": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz",
- "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==",
- "dev": true,
- "requires": {
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/pbkdf2": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz",
- "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0"
- }
- },
- "@ethersproject/properties": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
- "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==",
- "dev": true,
- "requires": {
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/providers": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz",
- "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==",
- "dev": true,
- "requires": {
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/base64": "^5.7.0",
- "@ethersproject/basex": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/networks": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/random": "^5.7.0",
- "@ethersproject/rlp": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0",
- "@ethersproject/strings": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/web": "^5.7.0",
- "bech32": "1.1.4",
- "ws": "7.4.6"
- },
- "dependencies": {
- "ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "dev": true,
- "requires": {}
- }
- }
- },
- "@ethersproject/random": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz",
- "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/rlp": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
- "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/sha2": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz",
- "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "hash.js": "1.1.7"
- }
- },
- "@ethersproject/signing-key": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
- "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "bn.js": "^5.2.1",
- "elliptic": "6.5.4",
- "hash.js": "1.1.7"
- }
- },
- "@ethersproject/solidity": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz",
- "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==",
- "dev": true,
- "requires": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/sha2": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "@ethersproject/strings": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
- "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/transactions": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz",
- "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==",
- "dev": true,
- "requires": {
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/rlp": "^5.7.0",
- "@ethersproject/signing-key": "^5.7.0"
- }
- },
- "@ethersproject/units": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz",
- "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==",
- "dev": true,
- "requires": {
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/logger": "^5.7.0"
- }
- },
- "@ethersproject/wallet": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz",
- "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==",
- "dev": true,
- "requires": {
- "@ethersproject/abstract-provider": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/hdnode": "^5.7.0",
- "@ethersproject/json-wallets": "^5.7.0",
- "@ethersproject/keccak256": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/random": "^5.7.0",
- "@ethersproject/signing-key": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/wordlists": "^5.7.0"
- }
- },
- "@ethersproject/web": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
- "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==",
- "dev": true,
- "requires": {
- "@ethersproject/base64": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "@ethersproject/wordlists": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz",
- "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==",
- "dev": true,
- "requires": {
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/hash": "^5.7.0",
- "@ethersproject/logger": "^5.7.0",
- "@ethersproject/properties": "^5.7.0",
- "@ethersproject/strings": "^5.7.0"
- }
- },
- "@ganache/ethereum-address": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz",
- "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==",
- "dev": true,
- "requires": {
- "@ganache/utils": "0.1.4"
- }
- },
- "@ganache/ethereum-options": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz",
- "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==",
- "dev": true,
- "requires": {
- "@ganache/ethereum-address": "0.1.4",
- "@ganache/ethereum-utils": "0.1.4",
- "@ganache/options": "0.1.4",
- "@ganache/utils": "0.1.4",
- "bip39": "3.0.4",
- "seedrandom": "3.0.5"
- }
- },
- "@ganache/ethereum-utils": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz",
- "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==",
- "dev": true,
- "requires": {
- "@ethereumjs/common": "2.6.0",
- "@ethereumjs/tx": "3.4.0",
- "@ethereumjs/vm": "5.6.0",
- "@ganache/ethereum-address": "0.1.4",
- "@ganache/rlp": "0.1.4",
- "@ganache/utils": "0.1.4",
- "emittery": "0.10.0",
- "ethereumjs-abi": "0.6.8",
- "ethereumjs-util": "7.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz",
- "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "@ganache/options": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz",
- "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==",
- "dev": true,
- "requires": {
- "@ganache/utils": "0.1.4",
- "bip39": "3.0.4",
- "seedrandom": "3.0.5"
- }
- },
- "@ganache/rlp": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz",
- "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==",
- "dev": true,
- "requires": {
- "@ganache/utils": "0.1.4",
- "rlp": "2.2.6"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "rlp": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
- "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.1"
- }
- }
- }
- },
- "@ganache/utils": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz",
- "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==",
- "dev": true,
- "requires": {
- "@trufflesuite/bigint-buffer": "1.1.9",
- "emittery": "0.10.0",
- "keccak": "3.0.1",
- "seedrandom": "3.0.5"
- },
- "dependencies": {
- "keccak": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
- "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==",
- "dev": true,
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- }
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@metamask/eth-sig-util": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz",
- "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==",
- "dev": true,
- "requires": {
- "ethereumjs-abi": "^0.6.8",
- "ethereumjs-util": "^6.2.1",
- "ethjs-util": "^0.1.6",
- "tweetnacl": "^1.0.3",
- "tweetnacl-util": "^0.15.1"
- }
- },
- "@morgan-stanley/ts-mocking-bird": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz",
- "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.16",
- "uuid": "^7.0.3"
- },
- "dependencies": {
- "uuid": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
- "dev": true
- }
- }
- },
- "@noble/hashes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz",
- "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==",
- "dev": true
- },
- "@noble/secp256k1": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
- "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
- "dev": true
- },
- "@nomicfoundation/ethereumjs-block": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.2.2.tgz",
- "integrity": "sha512-atjpt4gc6ZGZUPHBAQaUJsm1l/VCo7FmyQ780tMGO8QStjLdhz09dXynmhwVTy5YbRr0FOh/uX3QaEM0yIB2Zg==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-tx": "4.1.2",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "ethereum-cryptography": "0.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-blockchain": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.2.2.tgz",
- "integrity": "sha512-6AIB2MoTEPZJLl6IRKcbd8mUmaBAQ/NMe3O7OsAOIiDjMNPPH5KaUQiLfbVlegT4wKIg/GOsFH7XlH2KDVoJNg==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-block": "4.2.2",
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-ethash": "2.0.5",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "abstract-level": "^1.0.3",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "level": "^8.0.0",
- "lru-cache": "^5.1.1",
- "memory-level": "^1.0.0"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-common": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.1.2.tgz",
- "integrity": "sha512-JAEBpIua62dyObHM9KI2b4wHZcRQYYge9gxiygTWa3lNCr2zo+K0TbypDpgiNij5MCGNWP1eboNfNfx1a3vkvA==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "crc-32": "^1.2.0"
- }
- },
- "@nomicfoundation/ethereumjs-ethash": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.5.tgz",
- "integrity": "sha512-xlLdcICGgAYyYmnI3r1t0R5fKGBJNDQSOQxXNjVO99JmxJIdXR5MgPo5CSJO1RpyzKOgzi3uIFn8agv564dZEQ==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-block": "4.2.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "abstract-level": "^1.0.3",
- "bigint-crypto-utils": "^3.0.23",
- "ethereum-cryptography": "0.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-evm": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.3.2.tgz",
- "integrity": "sha512-I00d4MwXuobyoqdPe/12dxUQxTYzX8OckSaWsMcWAfQhgVDvBx6ffPyP/w1aL0NW7MjyerySPcSVfDJAMHjilw==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "@types/async-eventemitter": "^0.2.1",
- "async-eventemitter": "^0.2.4",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "mcl-wasm": "^0.7.1",
- "rustbn.js": "~0.2.0"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-rlp": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.3.tgz",
- "integrity": "sha512-DZMzB/lqPK78T6MluyXqtlRmOMcsZbTTbbEyAjo0ncaff2mqu/k8a79PBcyvpgAhWD/R59Fjq/x3ro5Lof0AtA==",
- "dev": true
- },
- "@nomicfoundation/ethereumjs-statemanager": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.5.tgz",
- "integrity": "sha512-CAhzpzTR5toh/qOJIZUUOnWekUXuRqkkzaGAQrVcF457VhtCmr+ddZjjK50KNZ524c1XP8cISguEVNqJ6ij1sA==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "functional-red-black-tree": "^1.0.1"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-trie": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.5.tgz",
- "integrity": "sha512-+8sNZrXkzvA1NH5F4kz5RSYl1I6iaRz7mAZRsyxOm0IVY4UaP43Ofvfp/TwOalFunurQrYB5pRO40+8FBcxFMA==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "ethereum-cryptography": "0.1.3",
- "readable-stream": "^3.6.0"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-tx": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.1.2.tgz",
- "integrity": "sha512-emJBJZpmTdUa09cqxQqHaysbBI9Od353ZazeH7WgPb35miMgNY6mb7/3vBA98N5lUW/rgkiItjX0KZfIzihSoQ==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "ethereum-cryptography": "0.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-util": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.6.tgz",
- "integrity": "sha512-jOQfF44laa7xRfbfLXojdlcpkvxeHrE2Xu7tSeITsWFgoII163MzjOwFEzSNozHYieFysyoEMhCdP+NY5ikstw==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "ethereum-cryptography": "0.1.3"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/ethereumjs-vm": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.4.2.tgz",
- "integrity": "sha512-PRTyxZMP6kx+OdAzBhuH1LD2Yw+hrSpaytftvaK//thDy2OI07S0nrTdbrdk7b8ZVPAc9H9oTwFBl3/wJ3w15g==",
- "dev": true,
- "requires": {
- "@nomicfoundation/ethereumjs-block": "4.2.2",
- "@nomicfoundation/ethereumjs-blockchain": "6.2.2",
- "@nomicfoundation/ethereumjs-common": "3.1.2",
- "@nomicfoundation/ethereumjs-evm": "1.3.2",
- "@nomicfoundation/ethereumjs-rlp": "4.0.3",
- "@nomicfoundation/ethereumjs-statemanager": "1.0.5",
- "@nomicfoundation/ethereumjs-trie": "5.0.5",
- "@nomicfoundation/ethereumjs-tx": "4.1.2",
- "@nomicfoundation/ethereumjs-util": "8.0.6",
- "@types/async-eventemitter": "^0.2.1",
- "async-eventemitter": "^0.2.4",
- "debug": "^4.3.3",
- "ethereum-cryptography": "0.1.3",
- "functional-red-black-tree": "^1.0.1",
- "mcl-wasm": "^0.7.1",
- "rustbn.js": "~0.2.0"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "@nomicfoundation/hardhat-foundry": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.0.0.tgz",
- "integrity": "sha512-/2cmtIZPnsQj/SRIu9idbBan5j19RD35MECAGmZCcuXX4AO6Wn0nOnpUwpcvGomKW403h4+rXh8AHMWC4Vvw0Q==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2"
- }
- },
- "@nomicfoundation/solidity-analyzer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz",
- "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==",
- "dev": true,
- "requires": {
- "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1",
- "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1",
- "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1",
- "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1",
- "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1",
- "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1",
- "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1"
- }
- },
- "@nomicfoundation/solidity-analyzer-darwin-arm64": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz",
- "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-darwin-x64": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz",
- "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-freebsd-x64": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz",
- "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz",
- "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz",
- "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz",
- "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-linux-x64-musl": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz",
- "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz",
- "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz",
- "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==",
- "dev": true,
- "optional": true
- },
- "@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz",
- "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==",
- "dev": true,
- "optional": true
- },
- "@nomiclabs/hardhat-ethers": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz",
- "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==",
- "dev": true,
- "requires": {}
- },
- "@resolver-engine/core": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz",
- "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==",
- "dev": true,
- "requires": {
- "debug": "^3.1.0",
- "is-url": "^1.2.4",
- "request": "^2.85.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@resolver-engine/fs": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz",
- "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==",
- "dev": true,
- "requires": {
- "@resolver-engine/core": "^0.3.3",
- "debug": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@resolver-engine/imports": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz",
- "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==",
- "dev": true,
- "requires": {
- "@resolver-engine/core": "^0.3.3",
- "debug": "^3.1.0",
- "hosted-git-info": "^2.6.0",
- "path-browserify": "^1.0.0",
- "url": "^0.11.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@resolver-engine/imports-fs": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz",
- "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==",
- "dev": true,
- "requires": {
- "@resolver-engine/fs": "^0.3.3",
- "@resolver-engine/imports": "^0.3.3",
- "debug": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@scure/base": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
- "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==",
- "dev": true
- },
- "@scure/bip32": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz",
- "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==",
- "dev": true,
- "requires": {
- "@noble/hashes": "~1.2.0",
- "@noble/secp256k1": "~1.7.0",
- "@scure/base": "~1.1.0"
- }
- },
- "@scure/bip39": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz",
- "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==",
- "dev": true,
- "requires": {
- "@noble/hashes": "~1.2.0",
- "@scure/base": "~1.1.0"
- }
- },
- "@sentry/core": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
- "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
- "dev": true,
- "requires": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/hub": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
- "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
- "dev": true,
- "requires": {
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/minimal": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
- "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
- "dev": true,
- "requires": {
- "@sentry/hub": "5.30.0",
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/node": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
- "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
- "dev": true,
- "requires": {
- "@sentry/core": "5.30.0",
- "@sentry/hub": "5.30.0",
- "@sentry/tracing": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "cookie": "^0.4.1",
- "https-proxy-agent": "^5.0.0",
- "lru_map": "^0.3.3",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/tracing": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
- "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
- "dev": true,
- "requires": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/types": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
- "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==",
- "dev": true
- },
- "@sentry/utils": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
- "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
- "dev": true,
- "requires": {
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@trufflesuite/bigint-buffer": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz",
- "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==",
- "dev": true,
- "optional": true,
- "requires": {
- "node-gyp-build": "4.3.0"
- },
- "dependencies": {
- "node-gyp-build": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
- "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
- "dev": true,
- "optional": true
- }
- }
- },
- "@tsconfig/node10": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
- "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
- "dev": true
- },
- "@tsconfig/node12": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
- "dev": true
- },
- "@tsconfig/node14": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
- "dev": true
- },
- "@tsconfig/node16": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
- "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
- "dev": true
- },
- "@typechain/ethers-v5": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz",
- "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15",
- "ts-essentials": "^7.0.1"
- }
- },
- "@typechain/hardhat": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz",
- "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==",
- "dev": true,
- "requires": {
- "fs-extra": "^9.1.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- }
- }
- },
- "@types/abstract-leveldown": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz",
- "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==",
- "dev": true
- },
- "@types/async-eventemitter": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz",
- "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==",
- "dev": true
- },
- "@types/bn.js": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz",
- "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==",
- "dev": true
- },
- "@types/level-errors": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz",
- "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==",
- "dev": true
- },
- "@types/levelup": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz",
- "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==",
- "dev": true,
- "requires": {
- "@types/abstract-leveldown": "*",
- "@types/level-errors": "*",
- "@types/node": "*"
- }
- },
- "@types/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==",
- "dev": true
- },
- "@types/mkdirp": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz",
- "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/mocha": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz",
- "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==",
- "dev": true
- },
- "@types/node": {
- "version": "18.15.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
- "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
- "dev": true
- },
- "@types/node-fetch": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz",
- "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- }
- },
- "@types/pbkdf2": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
- "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
- "@types/qs": {
- "version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
- "dev": true
- },
- "@types/secp256k1": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz",
- "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "abstract-level": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
- "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==",
- "dev": true,
- "requires": {
- "buffer": "^6.0.3",
- "catering": "^2.1.0",
- "is-buffer": "^2.0.5",
- "level-supports": "^4.0.0",
- "level-transcoder": "^1.0.1",
- "module-error": "^1.0.1",
- "queue-microtask": "^1.2.3"
- }
- },
- "abstract-leveldown": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz",
- "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==",
- "dev": true,
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "dependencies": {
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "requires": {
- "xtend": "^4.0.2"
- }
- }
- }
- },
- "acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true
- },
- "acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true
- },
- "adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
- "dev": true
- },
- "aes-js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
- },
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "array-back": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
- "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
- "dev": true
- },
- "asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "dev": true
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.14"
- }
- },
- "async-eventemitter": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
- "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
- "dev": true,
- "requires": {
- "async": "^2.4.0"
- }
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
- "dev": true
- },
- "aws4": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
- "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
- "dev": true
- },
- "axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
- "dev": true,
- "requires": {
- "follow-redirects": "^1.14.0"
- }
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base-x": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
- "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true
- }
- }
- },
- "bech32": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
- "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
- "dev": true
- },
- "bigint-crypto-utils": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz",
- "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==",
- "dev": true,
- "requires": {
- "bigint-mod-arith": "^3.1.0"
- }
- },
- "bigint-mod-arith": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz",
- "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==",
- "dev": true
- },
- "bignumber.js": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz",
- "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "bip39": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz",
- "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==",
- "dev": true,
- "requires": {
- "@types/node": "11.11.6",
- "create-hash": "^1.1.0",
- "pbkdf2": "^3.0.9",
- "randombytes": "^2.0.1"
- },
- "dependencies": {
- "@types/node": {
- "version": "11.11.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz",
- "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==",
- "dev": true
- }
- }
- },
- "blakejs": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
- "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true,
- "peer": true
- },
- "bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
- "dev": true
- },
- "browser-level": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz",
- "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==",
- "dev": true,
- "requires": {
- "abstract-level": "^1.0.2",
- "catering": "^2.1.1",
- "module-error": "^1.0.2",
- "run-parallel-limit": "^1.1.0"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "bs58": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
- "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
- "dev": true,
- "requires": {
- "base-x": "^3.0.2"
- }
- },
- "bs58check": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
- "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.0",
- "create-hash": "^1.1.0",
- "safe-buffer": "^5.1.2"
- }
- },
- "buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "buffer-reverse": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz",
- "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==",
- "dev": true
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
- "dev": true
- },
- "busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dev": true,
- "requires": {
- "streamsearch": "^1.1.0"
- }
- },
- "bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
- "dev": true
- },
- "catering": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
- "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
- "dev": true
- },
- "chai": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
- "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^4.1.2",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "classic-level": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz",
- "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==",
- "dev": true,
- "requires": {
- "abstract-level": "^1.0.2",
- "catering": "^2.1.0",
- "module-error": "^1.0.1",
- "napi-macros": "~2.0.0",
- "node-gyp-build": "^4.3.0"
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
- "dev": true,
- "peer": true
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "command-exists": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
- "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
- "dev": true
- },
- "command-line-args": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
- "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
- "dev": true,
- "requires": {
- "array-back": "^3.1.0",
- "find-replace": "^3.0.0",
- "lodash.camelcase": "^4.3.0",
- "typical": "^4.0.0"
- }
- },
- "command-line-usage": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz",
- "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==",
- "dev": true,
- "requires": {
- "array-back": "^4.0.2",
- "chalk": "^2.4.2",
- "table-layout": "^1.0.2",
- "typical": "^5.2.0"
- },
- "dependencies": {
- "array-back": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
- "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
- "dev": true
- },
- "typical": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
- "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
- "dev": true
- }
- }
- },
- "commander": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
- "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
- "dev": true
- },
- "core-js-pure": {
- "version": "3.29.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.1.tgz",
- "integrity": "sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
- "dev": true
- },
- "crc-32": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
- "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
- "dev": true
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
- },
- "crypto-js": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
- "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==",
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "deep-eql": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
- "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "deferred-leveldown": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
- "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~6.2.1",
- "inherits": "^2.0.3"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "dev": true,
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "requires": {
- "xtend": "^4.0.2"
- }
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true
- },
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true
- },
- "diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true
- },
- "dotenv": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
- "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "emittery": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz",
- "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "encode-utf8": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
- "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
- "dev": true
- },
- "encoding-down": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
- "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "^6.2.1",
- "inherits": "^2.0.3",
- "level-codec": "^9.0.0",
- "level-errors": "^2.0.0"
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true
- },
- "errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "peer": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "eth-ens-namehash": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz",
- "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==",
- "dev": true,
- "peer": true,
- "requires": {
- "idna-uts46-hx": "^2.3.1",
- "js-sha3": "^0.5.7"
- },
- "dependencies": {
- "js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==",
- "dev": true,
- "peer": true
- }
- }
- },
- "ethereum-bloom-filters": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz",
- "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==",
- "dev": true,
- "requires": {
- "js-sha3": "^0.8.0"
- }
- },
- "ethereum-cryptography": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz",
- "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==",
- "dev": true,
- "requires": {
- "@noble/hashes": "1.2.0",
- "@noble/secp256k1": "1.7.1",
- "@scure/bip32": "1.1.5",
- "@scure/bip39": "1.1.1"
- }
- },
- "ethereum-waffle": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz",
- "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==",
- "dev": true,
- "requires": {
- "@ethereum-waffle/chai": "4.0.10",
- "@ethereum-waffle/compiler": "4.0.3",
- "@ethereum-waffle/mock-contract": "4.0.4",
- "@ethereum-waffle/provider": "4.0.5",
- "solc": "0.8.15",
- "typechain": "^8.0.0"
- },
- "dependencies": {
- "commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "solc": {
- "version": "0.8.15",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz",
- "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==",
- "dev": true,
- "requires": {
- "command-exists": "^1.2.8",
- "commander": "^8.1.0",
- "follow-redirects": "^1.12.1",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- }
- }
- }
- },
- "ethereumjs-abi": {
- "version": "0.6.8",
- "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
- "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.8",
- "ethereumjs-util": "^6.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
- "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- },
- "dependencies": {
- "@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- }
- }
- },
- "ethers": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz",
- "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==",
- "dev": true,
- "requires": {
- "@ethersproject/abi": "5.7.0",
- "@ethersproject/abstract-provider": "5.7.0",
- "@ethersproject/abstract-signer": "5.7.0",
- "@ethersproject/address": "5.7.0",
- "@ethersproject/base64": "5.7.0",
- "@ethersproject/basex": "5.7.0",
- "@ethersproject/bignumber": "5.7.0",
- "@ethersproject/bytes": "5.7.0",
- "@ethersproject/constants": "5.7.0",
- "@ethersproject/contracts": "5.7.0",
- "@ethersproject/hash": "5.7.0",
- "@ethersproject/hdnode": "5.7.0",
- "@ethersproject/json-wallets": "5.7.0",
- "@ethersproject/keccak256": "5.7.0",
- "@ethersproject/logger": "5.7.0",
- "@ethersproject/networks": "5.7.1",
- "@ethersproject/pbkdf2": "5.7.0",
- "@ethersproject/properties": "5.7.0",
- "@ethersproject/providers": "5.7.2",
- "@ethersproject/random": "5.7.0",
- "@ethersproject/rlp": "5.7.0",
- "@ethersproject/sha2": "5.7.0",
- "@ethersproject/signing-key": "5.7.0",
- "@ethersproject/solidity": "5.7.0",
- "@ethersproject/strings": "5.7.0",
- "@ethersproject/transactions": "5.7.0",
- "@ethersproject/units": "5.7.0",
- "@ethersproject/wallet": "5.7.0",
- "@ethersproject/web": "5.7.1",
- "@ethersproject/wordlists": "5.7.0"
- }
- },
- "ethjs-unit": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
- "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==",
- "dev": true,
- "requires": {
- "bn.js": "4.11.6",
- "number-to-bn": "1.7.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
- "dev": true
- }
- }
- },
- "ethjs-util": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
- "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
- "dev": true,
- "requires": {
- "is-hex-prefixed": "1.0.0",
- "strip-hex-prefix": "1.0.0"
- }
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-replace": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
- "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
- "dev": true,
- "requires": {
- "array-back": "^3.0.1"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "fmix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz",
- "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==",
- "dev": true,
- "requires": {
- "imul": "^1.0.0"
- }
- },
- "follow-redirects": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
- "dev": true
- },
- "form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fp-ts": {
- "version": "1.19.3",
- "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
- "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==",
- "dev": true
- },
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
- "ganache": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz",
- "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==",
- "dev": true,
- "requires": {
- "@trufflesuite/bigint-buffer": "1.1.10",
- "@types/bn.js": "^5.1.0",
- "@types/lru-cache": "5.1.1",
- "@types/seedrandom": "3.0.1",
- "bufferutil": "4.0.5",
- "emittery": "0.10.0",
- "keccak": "3.0.2",
- "leveldown": "6.1.0",
- "secp256k1": "4.0.3",
- "utf-8-validate": "5.0.7"
- },
- "dependencies": {
- "@trufflesuite/bigint-buffer": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz",
- "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==",
- "bundled": true,
- "dev": true,
- "requires": {
- "node-gyp-build": "4.4.0"
- },
- "dependencies": {
- "node-gyp-build": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz",
- "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==",
- "bundled": true,
- "dev": true
- }
- }
- },
- "@types/bn.js": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz",
- "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==",
- "bundled": true,
- "dev": true
- },
- "@types/node": {
- "version": "17.0.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz",
- "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==",
- "bundled": true,
- "dev": true
- },
- "@types/seedrandom": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz",
- "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==",
- "bundled": true,
- "dev": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "bundled": true,
- "dev": true
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "bundled": true,
- "dev": true
- },
- "buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "bundled": true,
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "bufferutil": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz",
- "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==",
- "dev": true,
- "optional": true,
- "requires": {
- "node-gyp-build": "^4.3.0"
- }
- },
- "catering": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz",
- "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==",
- "bundled": true,
- "dev": true,
- "requires": {
- "queue-tick": "^1.0.0"
- }
- },
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "bundled": true,
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "bundled": true,
- "dev": true
- }
- }
- },
- "emittery": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz",
- "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==",
- "bundled": true,
- "dev": true
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "bundled": true,
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "bundled": true,
- "dev": true
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "bundled": true,
- "dev": true
- },
- "is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "bundled": true,
- "dev": true
- },
- "keccak": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz",
- "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==",
- "bundled": true,
- "dev": true,
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0",
- "readable-stream": "^3.6.0"
- }
- },
- "leveldown": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz",
- "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==",
- "bundled": true,
- "dev": true,
- "requires": {
- "abstract-leveldown": "^7.2.0",
- "napi-macros": "~2.0.0",
- "node-gyp-build": "^4.3.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz",
- "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==",
- "bundled": true,
- "dev": true,
- "requires": {
- "buffer": "^6.0.3",
- "catering": "^2.0.0",
- "is-buffer": "^2.0.5",
- "level-concat-iterator": "^3.0.0",
- "level-supports": "^2.0.1",
- "queue-microtask": "^1.2.3"
- }
- },
- "level-concat-iterator": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz",
- "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==",
- "bundled": true,
- "dev": true,
- "requires": {
- "catering": "^2.1.0"
- }
- },
- "level-supports": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz",
- "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==",
- "bundled": true,
- "dev": true
- }
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "bundled": true,
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "bundled": true,
- "dev": true
- },
- "napi-macros": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
- "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
- "bundled": true,
- "dev": true
- },
- "node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
- "bundled": true,
- "dev": true
- },
- "node-gyp-build": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
- "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
- "bundled": true,
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "bundled": true,
- "dev": true
- },
- "queue-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz",
- "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==",
- "bundled": true,
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "bundled": true,
- "dev": true
- },
- "secp256k1": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
- "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
- "bundled": true,
- "dev": true,
- "requires": {
- "elliptic": "^6.5.4",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "utf-8-validate": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz",
- "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "node-gyp-build": "^4.3.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "bundled": true,
- "dev": true
- }
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
- "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "hardhat": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz",
- "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==",
- "dev": true,
- "requires": {
- "@ethersproject/abi": "^5.1.2",
- "@metamask/eth-sig-util": "^4.0.0",
- "@nomicfoundation/ethereumjs-block": "^4.0.0",
- "@nomicfoundation/ethereumjs-blockchain": "^6.0.0",
- "@nomicfoundation/ethereumjs-common": "^3.0.0",
- "@nomicfoundation/ethereumjs-evm": "^1.0.0",
- "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
- "@nomicfoundation/ethereumjs-statemanager": "^1.0.0",
- "@nomicfoundation/ethereumjs-trie": "^5.0.0",
- "@nomicfoundation/ethereumjs-tx": "^4.0.0",
- "@nomicfoundation/ethereumjs-util": "^8.0.0",
- "@nomicfoundation/ethereumjs-vm": "^6.0.0",
- "@nomicfoundation/solidity-analyzer": "^0.1.0",
- "@sentry/node": "^5.18.1",
- "@types/bn.js": "^5.1.0",
- "@types/lru-cache": "^5.1.0",
- "abort-controller": "^3.0.0",
- "adm-zip": "^0.4.16",
- "aggregate-error": "^3.0.0",
- "ansi-escapes": "^4.3.0",
- "chalk": "^2.4.2",
- "chokidar": "^3.4.0",
- "ci-info": "^2.0.0",
- "debug": "^4.1.1",
- "enquirer": "^2.3.0",
- "env-paths": "^2.2.0",
- "ethereum-cryptography": "^1.0.3",
- "ethereumjs-abi": "^0.6.8",
- "find-up": "^2.1.0",
- "fp-ts": "1.19.3",
- "fs-extra": "^7.0.1",
- "glob": "7.2.0",
- "immutable": "^4.0.0-rc.12",
- "io-ts": "1.10.4",
- "keccak": "^3.0.2",
- "lodash": "^4.17.11",
- "mnemonist": "^0.38.0",
- "mocha": "^10.0.0",
- "p-map": "^4.0.0",
- "qs": "^6.7.0",
- "raw-body": "^2.4.1",
- "resolve": "1.17.0",
- "semver": "^6.3.0",
- "solc": "0.7.3",
- "source-map-support": "^0.5.13",
- "stacktrace-parser": "^0.1.10",
- "tsort": "0.0.1",
- "undici": "^5.14.0",
- "uuid": "^8.3.2",
- "ws": "^7.4.6"
- }
- },
- "hardhat-deploy": {
- "version": "0.11.26",
- "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.26.tgz",
- "integrity": "sha512-GvnkD8v6q0coCQbwZNeUcO3ab1zz36FKsqzNdm6EcnVoAfXVkFpdA0pgJ7/Rk3+Lv5709xOtbneFOyoukUOhWQ==",
- "dev": true,
- "requires": {
- "@ethersproject/abi": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
- "@ethersproject/address": "^5.7.0",
- "@ethersproject/bignumber": "^5.7.0",
- "@ethersproject/bytes": "^5.7.0",
- "@ethersproject/constants": "^5.7.0",
- "@ethersproject/contracts": "^5.7.0",
- "@ethersproject/providers": "^5.7.2",
- "@ethersproject/solidity": "^5.7.0",
- "@ethersproject/transactions": "^5.7.0",
- "@ethersproject/wallet": "^5.7.0",
- "@types/qs": "^6.9.7",
- "axios": "^0.21.1",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.2",
- "debug": "^4.3.2",
- "enquirer": "^2.3.6",
- "ethers": "^5.5.3",
- "form-data": "^4.0.0",
- "fs-extra": "^10.0.0",
- "match-all": "^1.2.6",
- "murmur-128": "^0.2.1",
- "qs": "^6.9.4",
- "zksync-web3": "^0.14.3"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- }
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "requires": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "idna-uts46-hx": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz",
- "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==",
- "dev": true,
- "peer": true,
- "requires": {
- "punycode": "2.1.0"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
- },
- "immediate": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
- "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==",
- "dev": true
- },
- "immutable": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
- "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
- "dev": true
- },
- "imul": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz",
- "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
- "dev": true,
- "peer": true
- },
- "io-ts": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
- "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
- "dev": true,
- "requires": {
- "fp-ts": "^1.0.0"
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "peer": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-hex-prefixed": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
- "dev": true
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true,
- "peer": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
- "dev": true
- },
- "js-sha3": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
- "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
- "dev": true
- },
- "json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "dev": true,
- "requires": {
- "bignumber.js": "^9.0.0"
- }
- },
- "json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
- "keccak": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz",
- "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==",
- "dev": true,
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0",
- "readable-stream": "^3.6.0"
- }
- },
- "keccak256": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/keccak256/-/keccak256-1.0.6.tgz",
- "integrity": "sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==",
- "dev": true,
- "requires": {
- "bn.js": "^5.2.0",
- "buffer": "^6.0.3",
- "keccak": "^3.0.2"
- }
- },
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
- "dev": true,
- "peer": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "level": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
- "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
- "dev": true,
- "requires": {
- "browser-level": "^1.0.1",
- "classic-level": "^1.2.0"
- }
- },
- "level-codec": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
- "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
- "dev": true,
- "requires": {
- "buffer": "^5.6.0"
- },
- "dependencies": {
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- }
- }
- },
- "level-concat-iterator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
- "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
- "dev": true
- },
- "level-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
- "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
- "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0",
- "xtend": "^4.0.2"
- }
- },
- "level-mem": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz",
- "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==",
- "dev": true,
- "requires": {
- "level-packager": "^5.0.3",
- "memdown": "^5.0.0"
- }
- },
- "level-packager": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
- "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
- "dev": true,
- "requires": {
- "encoding-down": "^6.3.0",
- "levelup": "^4.3.2"
- }
- },
- "level-supports": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
- "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
- "dev": true
- },
- "level-transcoder": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
- "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
- "dev": true,
- "requires": {
- "buffer": "^6.0.3",
- "module-error": "^1.0.1"
- }
- },
- "level-ws": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz",
- "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.0",
- "xtend": "^4.0.1"
- }
- },
- "levelup": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
- "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~5.3.0",
- "level-errors": "~2.0.0",
- "level-iterator-stream": "~4.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "dependencies": {
- "level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "requires": {
- "xtend": "^4.0.2"
- }
- }
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
- "dev": true,
- "peer": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==",
- "dev": true,
- "peer": true
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "loupe": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
- "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.0"
- }
- },
- "lru_map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
- "dev": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==",
- "dev": true
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "match-all": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz",
- "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==",
- "dev": true
- },
- "mcl-wasm": {
- "version": "0.7.9",
- "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz",
- "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==",
- "dev": true
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "memdown": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz",
- "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~6.2.1",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "dev": true,
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "immediate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==",
- "dev": true
- },
- "level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "dev": true,
- "requires": {
- "xtend": "^4.0.2"
- }
- }
- }
- },
- "memory-level": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz",
- "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==",
- "dev": true,
- "requires": {
- "abstract-level": "^1.0.0",
- "functional-red-black-tree": "^1.0.1",
- "module-error": "^1.0.1"
- }
- },
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
- "dev": true
- },
- "merkle-patricia-tree": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz",
- "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==",
- "dev": true,
- "requires": {
- "@types/levelup": "^4.3.0",
- "ethereumjs-util": "^7.1.4",
- "level-mem": "^5.0.1",
- "level-ws": "^2.0.0",
- "readable-stream": "^3.6.0",
- "semaphore-async-await": "^1.5.1"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "merkletreejs": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.9.tgz",
- "integrity": "sha512-NjlATjJr4NEn9s8v/VEHhgwRWaE1eA/Une07d9SEqKzULJi1Wsh0Y3svwJdP2bYLMmgSBHzOrNydMWM1NN9VeQ==",
- "dev": true,
- "requires": {
- "bignumber.js": "^9.0.1",
- "buffer-reverse": "^1.0.1",
- "crypto-js": "^3.1.9-1",
- "treeify": "^1.1.0",
- "web3-utils": "^1.3.4"
- }
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
- "dev": true
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- },
- "mnemonist": {
- "version": "0.38.5",
- "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
- "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
- "dev": true,
- "requires": {
- "obliterator": "^2.0.0"
- }
- },
- "mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
- "dev": true,
- "requires": {
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.4",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "5.0.1",
- "ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "workerpool": "6.2.1",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "minimatch": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "module-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz",
- "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "murmur-128": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz",
- "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==",
- "dev": true,
- "requires": {
- "encode-utf8": "^1.0.2",
- "fmix": "^0.1.0",
- "imul": "^1.0.0"
- }
- },
- "nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
- "dev": true
- },
- "napi-macros": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
- "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
- "dev": true
- },
- "node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
- "dev": true
- },
- "node-fetch": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
- "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
- "dev": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-gyp-build": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
- "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "peer": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "peer": true
- }
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
- "dev": true,
- "peer": true
- },
- "number-to-bn": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
- "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==",
- "dev": true,
- "requires": {
- "bn.js": "4.11.6",
- "strip-hex-prefix": "1.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
- "dev": true
- }
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "object-inspect": {
- "version": "1.12.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
- "dev": true
- },
- "obliterator": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
- "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
- "dev": true,
- "peer": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "dev": true
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
- "dev": true
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
- "dev": true,
- "peer": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dev": true,
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "peer": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
- "dev": true,
- "peer": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
- "dev": true,
- "peer": true,
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "prettier": {
- "version": "2.8.7",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
- "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
- "dev": true
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
- "dev": true
- },
- "psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "dev": true
- },
- "punycode": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
- "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==",
- "dev": true
- },
- "qs": {
- "version": "6.11.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz",
- "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==",
- "dev": true,
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
- "dev": true,
- "peer": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
- "dev": true,
- "peer": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
- }
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "reduce-flatten": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
- "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
- "dev": true
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
- "dev": true
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
- "dev": true,
- "peer": true
- },
- "resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "rlp": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz",
- "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==",
- "dev": true,
- "requires": {
- "bn.js": "^5.2.0"
- }
- },
- "run-parallel-limit": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz",
- "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "rustbn.js": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz",
- "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "scrypt-js": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
- "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
- "dev": true
- },
- "secp256k1": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
- "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
- "dev": true,
- "requires": {
- "elliptic": "^6.5.4",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "seedrandom": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
- "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
- "dev": true
- },
- "semaphore-async-await": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz",
- "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==",
- "dev": true
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true,
- "peer": true
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "solc": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
- "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
- "dev": true,
- "requires": {
- "command-exists": "^1.2.8",
- "commander": "3.0.2",
- "follow-redirects": "^1.12.1",
- "fs-extra": "^0.30.0",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^2.0.0",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "dependencies": {
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spdx-correct": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
- "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "dev": true,
- "peer": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true,
- "peer": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
- "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
- "dev": true,
- "peer": true
- },
- "sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true
- }
- }
- },
- "stacktrace-parser": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
- "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.7.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
- "dev": true
- }
- }
- },
- "statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true
- },
- "streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-format": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz",
- "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
- "dev": true,
- "peer": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "strip-hex-prefix": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
- "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==",
- "dev": true,
- "requires": {
- "is-hex-prefixed": "1.0.0"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "table-layout": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz",
- "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==",
- "dev": true,
- "requires": {
- "array-back": "^4.0.1",
- "deep-extend": "~0.6.0",
- "typical": "^5.2.0",
- "wordwrapjs": "^4.0.0"
- },
- "dependencies": {
- "array-back": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
- "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
- "dev": true
- },
- "typical": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
- "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
- "dev": true
- }
- }
- },
- "testrpc": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz",
- "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==",
- "dev": true,
- "peer": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "dependencies": {
- "punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true
- }
- }
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "dev": true
- },
- "treeify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz",
- "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==",
- "dev": true
- },
- "ts-command-line-args": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz",
- "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==",
- "dev": true,
- "requires": {
- "@morgan-stanley/ts-mocking-bird": "^0.6.2",
- "chalk": "^4.1.0",
- "command-line-args": "^5.1.1",
- "command-line-usage": "^6.1.0",
- "string-format": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "ts-essentials": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz",
- "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==",
- "dev": true,
- "requires": {}
- },
- "ts-node": {
- "version": "10.9.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
- "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
- "dev": true,
- "requires": {
- "@cspotcode/source-map-support": "^0.8.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.1",
- "yn": "3.1.1"
- },
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- }
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "tsort": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
- "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
- "dev": true
- },
- "tweetnacl-util": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz",
- "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==",
- "dev": true
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
- },
- "typechain": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz",
- "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==",
- "dev": true,
- "requires": {
- "@types/prettier": "^2.1.1",
- "debug": "^4.3.1",
- "fs-extra": "^7.0.0",
- "glob": "7.1.7",
- "js-sha3": "^0.8.0",
- "lodash": "^4.17.15",
- "mkdirp": "^1.0.4",
- "prettier": "^2.3.1",
- "ts-command-line-args": "^2.2.0",
- "ts-essentials": "^7.0.1"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
- "typescript": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz",
- "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==",
- "dev": true,
- "peer": true
- },
- "typical": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
- "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
- "dev": true
- },
- "undici": {
- "version": "5.21.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz",
- "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==",
- "dev": true,
- "requires": {
- "busboy": "^1.6.0"
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
- "dev": true
- }
- }
- },
- "utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
- "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true
- },
- "v8-compile-cache-lib": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "peer": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "web3-utils": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz",
- "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==",
- "dev": true,
- "requires": {
- "bn.js": "^5.2.1",
- "ethereum-bloom-filters": "^1.0.6",
- "ethereumjs-util": "^7.1.0",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "utf8": "3.0.0"
- },
- "dependencies": {
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-util": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
- "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
- "dev": true,
- "requires": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "dev": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dev": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
- "dev": true,
- "peer": true
- },
- "window-size": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
- "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==",
- "dev": true,
- "peer": true
- },
- "wordwrapjs": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
- "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==",
- "dev": true,
- "requires": {
- "reduce-flatten": "^2.0.0",
- "typical": "^5.2.0"
- },
- "dependencies": {
- "typical": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
- "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
- "dev": true
- }
- }
- },
- "workerpool": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
- "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
- "dev": true,
- "requires": {}
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- }
- },
- "yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- },
- "zksync-web3": {
- "version": "0.14.3",
- "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz",
- "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==",
- "dev": true,
- "requires": {}
- }
- }
-}
diff --git a/package.json b/package.json
index 9b046639..3ddadbe4 100644
--- a/package.json
+++ b/package.json
@@ -1,31 +1,32 @@
{
- "name": "@zerodevapp/contracts",
- "description": "ZeroDev Account Abstraction (EIP 4337) contracts",
- "main": "./dist/index.js",
- "version": "4.0.0-beta.10",
+ "license": "MIT",
"scripts": {
- "prepack": "./script/prepack-contracts-package.sh",
- "postpack": "./script/postpack-contracts-package.sh"
+ "compile": "hardhat compile"
},
"devDependencies": {
- "@nomicfoundation/hardhat-foundry": "^1.0.0",
- "@nomiclabs/hardhat-ethers": "^2.2.3",
- "@typechain/ethers-v5": "^10.2.0",
- "@typechain/hardhat": "^6.1.5",
- "@types/chai": "^4.3.4",
- "@types/mocha": "^10.0.1",
- "@types/node": "^18.15.11",
- "chai": "^4.3.7",
- "ethereum-waffle": "^4.0.10",
- "hardhat": "^2.13.0",
- "hardhat-deploy": "^0.11.26",
- "keccak256": "^1.0.6",
- "merkletreejs": "^0.3.9",
- "ts-node": "^10.9.1",
- "typechain": "^8.1.1"
- },
- "dependencies": {
- "@account-abstraction/contracts": "^0.6.0",
- "dotenv": "^16.0.3"
+ "@nomicfoundation/hardhat-chai-matchers": "^2.0.0",
+ "@nomicfoundation/hardhat-ethers": "^3.0.0",
+ "@nomicfoundation/hardhat-foundry": "^1.1.1",
+ "@nomicfoundation/hardhat-ignition": "^0.15.0",
+ "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0",
+ "@nomicfoundation/hardhat-network-helpers": "^1.0.0",
+ "@nomicfoundation/hardhat-toolbox": "^5.0.0",
+ "@nomicfoundation/hardhat-verify": "^2.0.0",
+ "@nomicfoundation/ignition-core": "^0.15.0",
+ "@typechain/ethers-v6": "^0.5.0",
+ "@typechain/hardhat": "^9.0.0",
+ "@types/chai": "4",
+ "@types/mocha": "^10.0.6",
+ "@types/node": "^20.12.5",
+ "chai": "4",
+ "ethers": "^6.4.0",
+ "hardhat": "^2.22.2",
+ "hardhat-contract-sizer": "^2.10.0",
+ "hardhat-gas-reporter": "^1.0.8",
+ "hardhat-spdx-license-identifier": "^2.2.0",
+ "solidity-coverage": "^0.8.1",
+ "ts-node": "^10.9.2",
+ "typechain": "^8.3.0",
+ "typescript": "^5.4.4"
}
}
diff --git a/remappings.txt b/remappings.txt
index 91f7eb8d..03e79deb 100644
--- a/remappings.txt
+++ b/remappings.txt
@@ -1,6 +1,3 @@
-ds-test/=lib/forge-std/lib/ds-test/src/
+ExcessivelySafeCall/=lib/ExcessivelySafeCall/src/
forge-std/=lib/forge-std/src/
solady/=lib/solady/src/
-I4337/=lib/I4337/src/
-FreshCryptoLib/=lib/FreshCryptoLib/solidity/src/
-p256-verifier/=lib/p256-verifier/src/
diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol
new file mode 100644
index 00000000..dacde9b9
--- /dev/null
+++ b/script/Deploy.s.sol
@@ -0,0 +1,65 @@
+pragma solidity ^0.8.0;
+
+import "forge-std/Script.sol";
+import "src/Kernel.sol";
+import "forge-std/console.sol";
+
+import "src/factory/FactoryStaker.sol";
+import "src/factory/KernelFactory.sol";
+
+bytes constant KERNEL_CODE =
+ hex"0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032";
+
+bytes constant STAKER_CODE =
+ hex"0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a";
+
+bytes constant KERNEL_FACTORY_CODE =
+ hex"000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27";
+
+contract Deploy is Script {
+ address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
+ address constant ENTRYPOINT_0_7_ADDR = 0x0000000071727De22E5E9d8BAf0edAc6f37da032;
+ address constant CREATE2_PROXY = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
+
+ address constant EXPECTED_STAKER = 0xd703aaE79538628d27099B8c4f621bE4CCd142d5;
+ address constant EXPECTED_KERNEL = 0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27;
+ address constant EXPECTED_FACTORY = 0x6723b44Abeec4E71eBE3232BD5B455805baDD22f;
+
+ function run() external {
+ vm.startBroadcast(DEPLOYER);
+ FactoryStaker staker = FactoryStaker(payable(EXPECTED_STAKER));
+ if (address(staker).code.length == 0) {
+ (bool success,) = CREATE2_PROXY.call(STAKER_CODE);
+ require(success);
+ console.log("Deployed staker");
+ }
+ console.log("Factory Staker :", address(staker));
+
+ Kernel kernel = Kernel(payable(EXPECTED_KERNEL));
+ if (EXPECTED_KERNEL.code.length == 0) {
+ (bool success,) = CREATE2_PROXY.call(KERNEL_CODE);
+ require(success);
+ console.log("Deployed kernel");
+ }
+ console.log("Kernel :", address(kernel));
+
+ KernelFactory factory = KernelFactory(EXPECTED_FACTORY);
+ if (EXPECTED_FACTORY.code.length == 0) {
+ (bool success,) = CREATE2_PROXY.call(KERNEL_FACTORY_CODE);
+ require(success);
+ console.log("Deployed factory");
+ }
+ console.log("Factory :", address(factory));
+
+ if (!staker.approved(factory)) {
+ staker.approveFactory(factory, true);
+ console.log("Approved");
+ }
+ IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_7_ADDR);
+ IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(staker));
+ if (info.stake < 1e17) {
+ staker.stake{value: 1e17 - info.stake}(IEntryPoint(ENTRYPOINT_0_7_ADDR), 86400);
+ }
+ vm.stopBroadcast();
+ }
+}
diff --git a/script/DeployDeterministic.s.sol b/script/DeployDeterministic.s.sol
deleted file mode 100644
index caae47ac..00000000
--- a/script/DeployDeterministic.s.sol
+++ /dev/null
@@ -1,40 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "forge-std/Script.sol";
-
-import "./deterministic/ECDSAValidator.s.sol";
-import "./deterministic/Factory.s.sol";
-import "./deterministic/SessionKey.s.sol";
-import "./deterministic/Kernel2_2.s.sol";
-import "./deterministic/Kernel2_3.s.sol";
-
-contract DeployDeterministic is Script {
- address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
-
- function run() external {
- vm.startBroadcast(DEPLOYER);
- KernelFactory factory = KernelFactory(payable(FactoryDeploy.deploy()));
-
- ECDSAValidatorDeploy.deploy();
- SessionKeyDeploy.deploy();
-
- //(address k22, address k22lite) = Kernel_2_2_Deploy.deploy();
-
- //if(!factory.isAllowedImplementation(k22)) {
- // factory.setImplementation(k22, true);
- //}
- //if(!factory.isAllowedImplementation(k22lite)) {
- // factory.setImplementation(k22lite, true);
- //}
-
- (address k23, address k23lite) = Kernel_2_3_Deploy.deploy();
- if (!factory.isAllowedImplementation(k23)) {
- factory.setImplementation(k23, true);
- }
- if (!factory.isAllowedImplementation(k23lite)) {
- factory.setImplementation(k23lite, true);
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployECDSA.s.sol b/script/DeployECDSA.s.sol
new file mode 100644
index 00000000..fc12961f
--- /dev/null
+++ b/script/DeployECDSA.s.sol
@@ -0,0 +1,17 @@
+pragma solidity ^0.8.0;
+
+import "forge-std/Script.sol";
+import "forge-std/console.sol";
+
+import "src/validator/ECDSAValidator.sol";
+
+contract DeployValidators is Script {
+ address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
+
+ function run() external {
+ vm.startBroadcast(DEPLOYER);
+ ECDSAValidator validator = new ECDSAValidator{salt: 0}();
+ console.log("ECDSA :", address(validator));
+ vm.stopBroadcast();
+ }
+}
diff --git a/script/DeployECDSAValidator.s.sol b/script/DeployECDSAValidator.s.sol
deleted file mode 100644
index ad57c0bf..00000000
--- a/script/DeployECDSAValidator.s.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "src/validator/ECDSAValidator.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeployKernel is Script {
- address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
- address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789;
- address constant EXPECTED_VALIDATOR_ADDRESS = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390;
-
- function run() public {
- uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
- if (EXPECTED_VALIDATOR_ADDRESS.code.length == 0) {
- ECDSAValidator validator = new ECDSAValidator{salt: 0}();
- console.log("validator address: %s", address(validator));
- } else {
- console.log("validator address: %s", EXPECTED_VALIDATOR_ADDRESS);
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployKernel.s.sol b/script/DeployKernel.s.sol
deleted file mode 100644
index d46570bf..00000000
--- a/script/DeployKernel.s.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "I4337/interfaces/IStakeManager.sol";
-import "src/Kernel.sol";
-import "src/lite/KernelLiteECDSA.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-import "src/validator/ECDSAValidator.sol";
-
-contract DeployKernel is Script {
- address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
- address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789;
- address constant ECDSAVALIDATOR = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390;
- address constant EXPECTED_KERNEL_ADDRESS = 0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5;
- address constant EXPECTED_KERNEL_LITE_ADDRESS = 0xbEdb61Be086F3f15eE911Cc9AB3EEa945DEbFa96;
- address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3);
-
- function run() public {
- uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
- KernelFactory factory;
- if (EXPECTED_KERNEL_FACTORY_ADDRESS.code.length == 0) {
- factory = new KernelFactory{salt: 0}(DEPLOYER, IEntryPoint(ENTRYPOINT_0_6));
- console.log("KernelFactory address: %s", address(factory));
- } else {
- factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS);
- }
- if (EXPECTED_KERNEL_LITE_ADDRESS.code.length == 0) {
- if (address(ECDSAVALIDATOR).code.length == 0) {
- console.log("ECDSAVALIDATOR NOT DEPLOYED");
- } else {
- KernelLiteECDSA kernellite;
- kernellite = new KernelLiteECDSA{salt: 0}(IEntryPoint(ENTRYPOINT_0_6), IKernelValidator(ECDSAVALIDATOR));
- console.log("Kernel Lite address: %s", address(kernellite));
- }
- }
- if (factory.isAllowedImplementation(EXPECTED_KERNEL_LITE_ADDRESS) == false) {
- console.log("Registering kernellite implementation");
- factory.setImplementation(EXPECTED_KERNEL_LITE_ADDRESS, true);
- }
- if (EXPECTED_KERNEL_ADDRESS.code.length == 0) {
- Kernel kernel;
- kernel = new Kernel{salt: 0}(IEntryPoint(ENTRYPOINT_0_6));
- console.log("Kernel address: %s", address(kernel));
- }
- if (factory.isAllowedImplementation(EXPECTED_KERNEL_ADDRESS) == false) {
- console.log("Registering kernel implementation");
- factory.setImplementation(EXPECTED_KERNEL_ADDRESS, true);
- }
- IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6);
- IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory));
- if (info.stake == 0) {
- console.log("Need to stake to factory");
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployKernelInitial.s.sol b/script/DeployKernelInitial.s.sol
deleted file mode 100644
index 45c1e4e3..00000000
--- a/script/DeployKernelInitial.s.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "I4337/interfaces/IStakeManager.sol";
-import "src/Kernel.sol";
-import "src/lite/KernelLiteECDSA.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-import "src/validator/ECDSAValidator.sol";
-
-contract DeployKernelInitial is Script {
- address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
- address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789;
- address constant ECDSAVALIDATOR = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390;
- address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3);
-
- function run() public {
- uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
- KernelFactory factory;
- if (EXPECTED_KERNEL_FACTORY_ADDRESS.code.length == 0) {
- factory = new KernelFactory{salt: 0}(DEPLOYER, IEntryPoint(ENTRYPOINT_0_6));
- console.log("KernelFactory address: %s", address(factory));
- } else {
- factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS);
- }
- Kernel kernel;
- kernel = new Kernel{salt: 0}(IEntryPoint(ENTRYPOINT_0_6));
- console.log("Kernel address: %s", address(kernel));
- if (factory.isAllowedImplementation(address(kernel)) == false) {
- console.log("Registering kernel implementation");
- factory.setImplementation(address(kernel), true);
- }
- IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6);
- IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory));
- if (info.stake == 0) {
- console.log("Need to stake to factory");
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployKillSwitch.s.sol b/script/DeployKillSwitch.s.sol
deleted file mode 100644
index 48aa6df9..00000000
--- a/script/DeployKillSwitch.s.sol
+++ /dev/null
@@ -1,33 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/validator/KillSwitchValidator.sol";
-import "src/executor/KillSwitchAction.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeployKillSwitch is Script {
- address constant EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR = 0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC;
- address constant EXPECTED_ADDRESS_KILL_SWITCH_ACTION = 0x3f38e479304c7F18F988269a1bDa7d646bd48243;
-
- function run() public {
- uint256 key = vm.envUint("TESTNET_DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
- KillSwitchValidator validator;
- if (EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR.code.length == 0) {
- console.log("deploying KillSwitchValidator");
- validator = new KillSwitchValidator{salt: 0}();
- console.log("validator address: %s", address(validator));
- } else {
- validator = KillSwitchValidator(EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR);
- console.log("validator address: %s", address(EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR));
- }
- if (EXPECTED_ADDRESS_KILL_SWITCH_ACTION.code.length == 0) {
- console.log("deploying KillSwitchAction");
- KillSwitchAction action = new KillSwitchAction{salt: 0}(validator);
- console.log("KillSwitchAction address: %s", address(action));
- } else {
- console.log("KillSwitchAction address: %s", address(EXPECTED_ADDRESS_KILL_SWITCH_ACTION));
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployModularPermission.s.sol b/script/DeployModularPermission.s.sol
deleted file mode 100644
index 839d909d..00000000
--- a/script/DeployModularPermission.s.sol
+++ /dev/null
@@ -1,74 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/validator/modularPermission/ModularPermissionValidator.sol";
-import "src/validator/modularPermission/signers/ECDSASigner.sol";
-import "src/validator/modularPermission/policies/GasPolicy.sol";
-import "src/validator/modularPermission/policies/SignaturePolicy.sol";
-import "src/validator/modularPermission/policies/SudoPolicy.sol";
-import {MerklePolicy} from "src/validator/modularPermission/policies/MerklePolicy.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeployModularPermission is Script {
- address constant EXPECTED_MODULAR_PERMISSION_ADDRESS = 0xfdDE9a26b6c3B7ca4b52C5f010d5B9Fb67e09E5A;
- address constant EXPECTED_ECDSA_SIGNER_ADDRESS = 0x5569b550050F6537D9ac3329001be7F4C6659Cb0;
- address constant EXPECTED_GAS_POLICY_ADDRESS = 0x62868E950Efbb336DCFf033598Ee5E602f0a93cD;
- address constant EXPECTED_MERKLE_POLICY_ADDRESS = 0xb808D75B5ACf6B5513eb816d3980C733ae6Be468;
- address constant EXPECTED_SIGNATURE_POLICY_ADDRESS = 0xdb5F74349Dd2FB2A09eEc2C6A39e77B68ca2852C;
- address constant EXPECTED_SUDO_POLICY_ADDRESS = 0x9262C3A894328f9036Aa7a3f0f2cE8CF684ad20f;
-
- function run() public {
- uint256 key = vm.envUint("TESTNET_DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
-
- if (EXPECTED_MODULAR_PERMISSION_ADDRESS.code.length == 0) {
- console.log("deploying ModularPermissionValidator");
- ModularPermissionValidator validator = new ModularPermissionValidator{salt: 0}();
- console.log("validator address: %s", address(validator));
- } else {
- console.log("validator address: %s", address(EXPECTED_MODULAR_PERMISSION_ADDRESS));
- }
-
- if (EXPECTED_ECDSA_SIGNER_ADDRESS.code.length == 0) {
- console.log("deploying ECDSASigner");
- ECDSASigner ecdsaSigner = new ECDSASigner{salt: 0}();
- console.log("ecdsaSigner address: %s", address(ecdsaSigner));
- } else {
- console.log("ecdsaSigner address: %s", address(EXPECTED_ECDSA_SIGNER_ADDRESS));
- }
-
- if (EXPECTED_GAS_POLICY_ADDRESS.code.length == 0) {
- console.log("deploying GasPolicy");
- GasPolicy gasPolicy = new GasPolicy{salt: 0}();
- console.log("gasPolicy address: %s", address(gasPolicy));
- } else {
- console.log("gasPolicy address: %s", address(EXPECTED_GAS_POLICY_ADDRESS));
- }
-
- if (EXPECTED_MERKLE_POLICY_ADDRESS.code.length == 0) {
- console.log("deploying MerklePolicy");
- MerklePolicy merklePolicy = new MerklePolicy{salt: 0}();
- console.log("merklePolicy address: %s", address(merklePolicy));
- } else {
- console.log("merklePolicy address: %s", address(EXPECTED_MERKLE_POLICY_ADDRESS));
- }
-
- if (EXPECTED_SIGNATURE_POLICY_ADDRESS.code.length == 0) {
- console.log("deploying SignaturePolicy");
- SignaturePolicy signturePolicy = new SignaturePolicy{salt: 0}();
- console.log("signturePolicy address: %s", address(signturePolicy));
- } else {
- console.log("signturePolicy address: %s", address(EXPECTED_SIGNATURE_POLICY_ADDRESS));
- }
-
- if (EXPECTED_SUDO_POLICY_ADDRESS.code.length == 0) {
- console.log("deploying SudoPolicy");
- SudoPolicy sudoPolicy = new SudoPolicy{salt: 0}();
- console.log("sudoPolicy address: %s", address(sudoPolicy));
- } else {
- console.log("sudoPolicy address: %s", address(EXPECTED_SUDO_POLICY_ADDRESS));
- }
-
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployMulticall.s.sol b/script/DeployMulticall.s.sol
deleted file mode 100644
index 6f94e870..00000000
--- a/script/DeployMulticall.s.sol
+++ /dev/null
@@ -1,22 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "forge-std/Script.sol";
-
-contract DeployMultiCall is Script {
- address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
- address constant EXPECTED_MULTICALL_ADDRESS = 0x8ae01fCF7c655655fF2c6Ef907b8B4718Ab4e17c;
- address constant DETERMINISTIC_DEPLOYER = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
-
- function run() public {
- uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
- if (EXPECTED_MULTICALL_ADDRESS.code.length == 0) {
- (bool success, bytes memory ret) = DETERMINISTIC_DEPLOYER.call(
- hex"000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b50306080526080516102bd61002f6000396000604f01526102bd6000f3fe60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100366100313660046101b8565b610038565b005b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642060448201527f7669612064656c656761746563616c6c00000000000000000000000000000000606482015260840160405180910390fd5b805160205b81811015610184578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461014b576001811461015b57610166565b6000808585888a5af19150610166565b6000808585895af491505b508061017157600080fd5b5050806055018501945050505050610106565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156101ca57600080fd5b813567ffffffffffffffff808211156101e257600080fd5b818401915084601f8301126101f657600080fd5b81358181111561020857610208610189565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561024e5761024e610189565b8160405282815287602084870101111561026757600080fd5b82602086016020830137600092810160200192909252509594505050505056fea2646970667358221220aee0f2dd047c52784b9c7806e4078197141e146ec66587d8610576db5f8ad20e64736f6c634300080f0033"
- );
- } else {
- console.log("validator address: %s", EXPECTED_MULTICALL_ADDRESS);
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployRecovery.s.sol b/script/DeployRecovery.s.sol
deleted file mode 100644
index dbf9683a..00000000
--- a/script/DeployRecovery.s.sol
+++ /dev/null
@@ -1,19 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/validator/WeightedECDSAValidator.sol";
-import "src/executor/RecoveryAction.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeployRecovery is Script {
- function run() public {
- address deployer = vm.envAddress("DEPLOYER");
- vm.startBroadcast(deployer);
- console.log("Deployer address: ", deployer);
- //RecoveryAction action = new RecoveryAction{salt:0}();
- //console.log("Deploying RecoveryAction at address: ", address(action));
- WeightedECDSAValidator validator = new WeightedECDSAValidator{salt: 0}();
- console.log("Deploying WeightedECDSAValidator at address: ", address(validator));
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeploySessionKey.s.sol b/script/DeploySessionKey.s.sol
deleted file mode 100644
index ae2f6129..00000000
--- a/script/DeploySessionKey.s.sol
+++ /dev/null
@@ -1,18 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/validator/SessionKeyValidator.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeploySessionKey is Script {
- address constant EXPECTED_ADDRESS = 0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5;
-
- function run() public {
- address deployer = vm.envAddress("DEPLOYER");
- vm.startBroadcast(deployer);
- console.log("deploying SessionKeyValidator");
- SessionKeyValidator validator = new SessionKeyValidator{salt: 0}();
- console.log("validator address: %s", address(validator));
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployWebAuthnFclValidator.sol b/script/DeployWebAuthnFclValidator.sol
deleted file mode 100644
index 94437add..00000000
--- a/script/DeployWebAuthnFclValidator.sol
+++ /dev/null
@@ -1,22 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "src/utils/P256VerifierWrapper.sol";
-import "src/validator/webauthn//WebAuthnFclValidator.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeployWebAuthnFclValidator is Script {
- function run() public {
- uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
-
- P256VerifierWrapper p256VerifierWrapper = new P256VerifierWrapper{salt: 0}();
- console.log("p256 wrapper address: %s", address(p256VerifierWrapper));
-
- WebAuthnFclValidator validator = new WebAuthnFclValidator{salt: 0}(address(p256VerifierWrapper));
- console.log("validator address: %s", address(validator));
-
- vm.stopBroadcast();
- }
-}
diff --git a/script/DeployWeightedECDSA.s.sol b/script/DeployWeightedECDSA.s.sol
deleted file mode 100644
index 1e7e6d13..00000000
--- a/script/DeployWeightedECDSA.s.sol
+++ /dev/null
@@ -1,31 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/validator/WeightedECDSAValidator.sol";
-import "src/executor/RecoveryAction.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract DeployWeightedECDSA is Script {
- address constant EXPECTED_ADDRESS_WEIGHTED_ECDSA_VALIDATOR = 0x4fd47D861c349bD49DC61341a922cb72F9dF7E8d;
- address constant EXPECTED_ADDRESS_RECOVERY_ACTION = 0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1;
-
- function run() public {
- uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY");
- vm.startBroadcast(key);
- if (EXPECTED_ADDRESS_WEIGHTED_ECDSA_VALIDATOR.code.length == 0) {
- console.log("deploying WeightedECDSAValidator");
- WeightedECDSAValidator validator = new WeightedECDSAValidator{salt: 0}();
- console.log("validator address: %s", address(validator));
- } else {
- console.log("validator address: %s", address(EXPECTED_ADDRESS_WEIGHTED_ECDSA_VALIDATOR));
- }
- if (EXPECTED_ADDRESS_RECOVERY_ACTION.code.length == 0) {
- console.log("deploying RecoveryAction");
- RecoveryAction action = new RecoveryAction{salt: 0}();
- console.log("RecoveryAction address: %s", address(action));
- } else {
- console.log("RecoveryAction address: %s", address(EXPECTED_ADDRESS_RECOVERY_ACTION));
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/StakeToFactory.s.sol b/script/StakeToFactory.s.sol
deleted file mode 100644
index 4a80a611..00000000
--- a/script/StakeToFactory.s.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "I4337/interfaces/IStakeManager.sol";
-import "forge-std/Script.sol";
-import "forge-std/console.sol";
-
-contract StakeToFactory is Script {
- address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A;
- address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789;
- address payable constant EXPECTED_KERNEL_ADDRESS = payable(0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb);
- address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3);
-
- function run() public {
- vm.startBroadcast(DEPLOYER);
- KernelFactory factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS);
- IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6);
- IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory));
- if (info.stake < 1e17) {
- factory.addStake{value: 1e17 - info.stake}(86400);
- }
- vm.stopBroadcast();
- }
-}
diff --git a/script/deterministic/DeterministicDeploy.s.sol b/script/deterministic/DeterministicDeploy.s.sol
deleted file mode 100644
index 53986845..00000000
--- a/script/deterministic/DeterministicDeploy.s.sol
+++ /dev/null
@@ -1,18 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "forge-std/console.sol";
-
-library DeterministicDeploy {
- address constant DETERMINISTIC_DEPLOYER = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
-
- function checkDeploy(string memory tag, address _expectedAddress, bytes memory _code) internal {
- if (_expectedAddress.code.length == 0) {
- (bool success, bytes memory addr) = DETERMINISTIC_DEPLOYER.call(_code);
- require(success, "DeterministicDeploy: failed to deploy");
- require(address(bytes20(addr)) == _expectedAddress, "DeterministicDeploy: address mismatch");
- console.log(string.concat(tag, ": deployed at %s"), _expectedAddress);
- } else {
- console.log(string.concat(tag, ": already deployed"));
- }
- }
-}
diff --git a/script/deterministic/ECDSAValidator.s.sol b/script/deterministic/ECDSAValidator.s.sol
deleted file mode 100644
index a70f4df7..00000000
--- a/script/deterministic/ECDSAValidator.s.sol
+++ /dev/null
@@ -1,14 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./DeterministicDeploy.s.sol";
-
-library ECDSAValidatorDeploy {
- address constant EXPECTED_ECDSA_VALIDATOR_ADDRESS = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390;
- bytes constant VALIDATOR_CODE =
- hex"000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056";
-
- function deploy() internal returns (address) {
- DeterministicDeploy.checkDeploy("ECDSAValidator", EXPECTED_ECDSA_VALIDATOR_ADDRESS, VALIDATOR_CODE);
- return EXPECTED_ECDSA_VALIDATOR_ADDRESS;
- }
-}
diff --git a/script/deterministic/Factory.s.sol b/script/deterministic/Factory.s.sol
deleted file mode 100644
index 471e2c1a..00000000
--- a/script/deterministic/Factory.s.sol
+++ /dev/null
@@ -1,14 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./DeterministicDeploy.s.sol";
-
-library FactoryDeploy {
- address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3);
- bytes constant KERNEL_FACTORY_CODE =
- hex"00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789";
-
- function deploy() internal returns (address) {
- DeterministicDeploy.checkDeploy("factory", EXPECTED_KERNEL_FACTORY_ADDRESS, KERNEL_FACTORY_CODE);
- return EXPECTED_KERNEL_FACTORY_ADDRESS;
- }
-}
diff --git a/script/deterministic/Factory_old.s.sol b/script/deterministic/Factory_old.s.sol
deleted file mode 100644
index 066e3004..00000000
--- a/script/deterministic/Factory_old.s.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./DeterministicDeploy.s.sol";
-import "forge-std/Script.sol";
-
-contract Factory_old is Script {
- address constant DEPLOYER = 0x7A0D94F55792C434d74a40883C6ed8545E406D12;
- address constant EXPECTED_FACTORY = 0x5D006d3880645ec6e254E18C1F879DAC9Dd71A39;
- address constant EXPECTED_ECDSA_FACTORY = 0xD49a72cb78C44c6bfbf0d471581B7635cF62E81e;
- bytes constant FACTORY_BYTECODE =
- hex"60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789";
- bytes constant ECDSA_FACTORY_BYTECODE =
- hex"60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789";
-
- function run() external {
- address caller = 0x9775137314fE595c943712B0b336327dfa80aE8A;
- vm.startBroadcast(caller);
- DEPLOYER.call(FACTORY_BYTECODE);
- require(EXPECTED_FACTORY.code.length != 0);
- DEPLOYER.call(ECDSA_FACTORY_BYTECODE);
- require(EXPECTED_ECDSA_FACTORY.code.length != 0);
- vm.stopBroadcast();
- }
-}
diff --git a/script/deterministic/Kernel2_2.s.sol b/script/deterministic/Kernel2_2.s.sol
deleted file mode 100644
index a2b41d29..00000000
--- a/script/deterministic/Kernel2_2.s.sol
+++ /dev/null
@@ -1,18 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./DeterministicDeploy.s.sol";
-
-library Kernel_2_2_Deploy {
- address constant EXPECTED_KERNEL_2_2_ADDRESS = 0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5;
- bytes constant KERNEL_2_2_CODE =
- hex"000000000000000000000000000000000000000000000000000000000000000061014034620001b757601f620021e238819003918201601f19168301916001600160401b03831184841017620001bc57808492602094604052833981010312620001b757516001600160a01b0381168103620001b757306080524660a05260a062000069620001d2565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d2565b838152019264181719171960d91b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611fef9283620001f3843960805183611a6a015260a05183611a8d015260c05183611aff015260e05183611b2501525182611a490152518181816104db0152818161079a015281816108a701528181610a3201528181610b5a01528181610d5401528181610e7501528181610f740152818161109e01528181611147015261148e0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001bc5760405256fe6080604052600436101561001d575b366110815761001b611ece565b005b60003560e01c806306fdde031461018d5780630b3dc35414610188578063150b7a02146101835780631626ba7e1461017e57806329f8b17414610179578063333daf921461017457806334fcd5be1461016f5780633659cfe61461016a5780633a871cdd146101655780633e1b08121461016057806351166ba01461015b578063519454471461015657806354fd4d501461015157806355b14f501461014c57806357b750471461014757806384b0196e1461014257806388e7fd061461013d578063b0d691fe14610138578063bc197c8114610133578063d087d2881461012e578063d1f5789414610129578063d5416221146101245763f23a6e610361000e57610fef565b610f5d565b610ec1565b610e42565b610db3565b610d3e565b610d09565b610c61565b610c2a565b610b44565b610af0565b6109eb565b610922565b61085e565b61081c565b610776565b610693565b61060e565b610466565b610413565b610386565b610307565b6102d3565b600091031261019d57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101cb57604052565b6101a2565b606081019081106001600160401b038211176101cb57604052565b608081019081106001600160401b038211176101cb57604052565b604081019081106001600160401b038211176101cb57604052565b90601f801991011681019081106001600160401b038211176101cb57604052565b6040519061024f826101eb565b565b6040519061016082018281106001600160401b038211176101cb57604052565b6040519061027e82610206565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102bf575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161029e565b3461019d57600036600319011261019d576103036102ef610271565b604051918291602083526020830190610293565b0390f35b3461019d57600036600319011261019d576020600080516020611fcf8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361019d57565b359061024f8261033d565b9181601f8401121561019d578235916001600160401b03831161019d576020838186019501011161019d57565b3461019d57608036600319011261019d576103a260043561033d565b6103ad60243561033d565b6064356001600160401b03811161019d576103cc903690600401610359565b5050604051630a85bd0160e11b8152602090f35b90604060031983011261019d5760043591602435906001600160401b03821161019d5761040f91600401610359565b9091565b3461019d57602061042c610426366103e0565b91611b5b565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361019d57565b65ffffffffffff81160361019d57565b60c036600319011261019d5761047a61043f565b602435906104878261033d565b604435906104948261033d565b6064356104a081610456565b608435936104ad85610456565b60a4356001600160401b03811161019d576104cc903690600401610359565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610604575b6105f25784926105396105659261052a61051c610242565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261056087611049565b61172b565b1693843b1561019d576040519063064acaab60e11b8252818061058f6000998a94600484016117de565b038183895af180156105ed576105d4575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b806105e16105e7926101b8565b80610192565b386105a0565b611475565b604051637046c88d60e01b8152600490fd5b5030331415610504565b3461019d576020610627610621366103e0565b91611e13565b604051908152f35b9291926001600160401b0382116101cb5760405191610658601f8201601f191660200184610221565b82948184528183011161019d578281602093846000960137010152565b9080601f8301121561019d578160206106909335910161062f565b90565b60208060031936011261019d576001600160401b0360043581811161019d573660238201121561019d578060040135918083116101cb578260051b906040908151946106e187850187610221565b855285850191602480948601019436861161019d57848101935b86851061070b5761001b88611144565b843584811161019d5782016060602319823603011261019d57835191610730836101d0565b8782013561073d8161033d565b835260448201358b84015260648201359286841161019d576107678c94938a869536920101610675565b868201528152019401936106fb565b602036600319011261019d5760043561078e8161033d565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610812575b6105f257807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107c3565b60031960603682011261019d57600435906001600160401b03821161019d5761016090823603011261019d576106276020916044359060243590600401611481565b3461019d57602036600319011261019d576004356001600160c01b0381169081900361019d57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156105ed57610303916000916108f4575b506040519081529081906020820190565b610915915060203d811161091b575b61090d8183610221565b810190611396565b386108e3565b503d610903565b3461019d57602036600319011261019d5761030361096761094161043f565b60006060604051610951816101eb565b8281528260208201528260408201520152611049565b60405190610974826101eb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261019d57600435610a038161033d565b6044356001600160401b03811161019d57610a22903690600401610675565b90606435600281101561019d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac5575b80610ab0575b6105f257610a75816110fa565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610ac0610abc611c13565b1590565b610a68565b5030331415610a62565b60405190610adc82610206565b6005825264181719171960d91b6020830152565b3461019d57600036600319011261019d576103036102ef610acf565b90604060031983011261019d57600435610b258161033d565b91602435906001600160401b03821161019d5761040f91600401610359565b610b4d36610b0c565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c20575b6105f25780600080516020611fcf8339815191525460501c1691610ba681611eff565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c1c578385610bfa819593829463064acaab60e11b8452600484016117de565b03925af180156105ed57610c0c575080f35b806105e1610c19926101b8565b80f35b8380fd5b5030331415610b83565b3461019d57600036600319011261019d576020600080516020611fcf8339815191525460e01b6040519063ffffffff60e01b168152f35b3461019d57600036600319011261019d57610cb7610c7d610271565b610c85610acf565b90604051928392600f60f81b8452610ca960209360e08587015260e0860190610293565b908482036040860152610293565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf257505050500390f35b835185528695509381019392810192600101610ce3565b3461019d57600036600319011261019d576020600080516020611fcf8339815191525465ffffffffffff60405191831c168152f35b3461019d57600036600319011261019d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f8401121561019d578235916001600160401b03831161019d576020808501948460051b01011161019d57565b3461019d5760a036600319011261019d57610dcf60043561033d565b610dda60243561033d565b6001600160401b0360443581811161019d57610dfa903690600401610d83565b505060643581811161019d57610e14903690600401610d83565b505060843590811161019d57610e2e903690600401610359565b505060405163bc197c8160e01b8152602090f35b3461019d57600036600319011261019d57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156105ed57610303916000916108f457506040519081529081906020820190565b610eca36610b0c565b600080516020611fcf83398151915254919290916001600160a01b03919060501c8216610f4c57610efa81611eff565b1691823b1561019d57610f2f926000928360405180968195829463064acaab60e11b84526020600485015260248401916117bd565b03925af180156105ed57610f3f57005b806105e161001b926101b8565b60405162dc149f60e41b8152600490fd5b602036600319011261019d57610f7161043f565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fe5575b6105f257600080516020611fcf83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fa4565b3461019d5760a036600319011261019d5761100b60043561033d565b61101660243561033d565b6084356001600160401b03811161019d57611035903690600401610359565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109781356001600160e01b031916611049565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110eb575b6105f257818091368280378136915af43d82803e15610a9a573d90f35b506110f4611c13565b156110ce565b6002111561110457565b634e487b7160e01b600052602160045260246000fd5b805182101561112e5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111d1575b6105f25780519060005b82811061118d57505050565b60008061119a838561111a565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156111cc57600101611181565b3d6000fd5b506111dd610abc611c13565b611177565b9060041161019d5790600490565b909291928360041161019d57831161019d57600401916003190190565b9060241161019d5760100190601490565b9060581161019d5760380190602090565b9060241161019d5760040190602090565b9060381161019d5760240190601490565b90600a1161019d5760040190600690565b9060101161019d57600a0190600690565b9093929384831161019d57841161019d578101920390565b6001600160e01b031990358181169392600481106112a857505050565b60040360031b82901b16169150565b91906101608382031261019d576112cc610251565b926112d68161034e565b8452602081013560208501526040810135916001600160401b039283811161019d5781611304918401610675565b6040860152606082013583811161019d5781611321918401610675565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e086015261010080830135908601526101208083013584811161019d5782611373918501610675565b90860152610140928383013590811161019d576113909201610675565b90830152565b9081602091031261019d575190565b606080825282516001600160a01b0316908201529193929160409161146b9060208101516080840152838101516113ea610160918260a08701526101c0860190610293565b9061145861140a606085015193605f1994858983030160c08a0152610293565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610293565b92015190848303016101a0850152610293565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f00000000000000000000000000000000000000000000000000000000000000008516330361169f576004948535928361014481013501918760248401930135946114e06114da87866111e2565b9061128b565b926001600160e01b031980851691821561167c576114ff9036906112b7565b94611519600080516020611fcf8339815191525460e01b90565b1616156115315760405163fc2f51c560e01b81528a90fd5b97989697600160e01b810361162b575090602095966115bb61158961157061156b6114da87606460009901350160248782013591016111e2565b611049565b6001810154909a9081906001600160a01b0316986111f0565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b61161d575b369161062f565b6101408501526115df604051998a9788968794633a871cdd60e01b865285016113a5565b0393165af19081156105ed57610690926000926115fd575b50611f4c565b61161691925060203d811161091b5761090d8183610221565b90386115f7565b348080808f335af1506115b4565b9095939190600160e11b0361166f576116656115bb946000936116606114da8a606460209c01350160248d82013591016111e2565b6117ef565b91999296916115ae565b5050505050505050600190565b9697505050505050506106909394508215611d47573434343486335af150611d47565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106116d357505050565b60140360031b82901b16169150565b3590602081106116f0575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061171c57505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106909381815201916117bd565b91906117fb828261120d565b611804916116b1565b60601c93611812838361121e565b61181b916116e2565b605883016078820194858360580190611835918388611273565b61183e916116e2565b611848828761122f565b611851916116e2565b61185b8388611240565b611864916116b1565b60601c61187236878761062f565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906118e860c082610221565b5190206118f490611a47565b9084019660788801611907918489611273565b9061191192611e13565b61191b828761122f565b6001600160a01b03199161192f91906116e2565b1661193991611f4c565b9660788688010196820360771901956119528382611251565b61195b916116ff565b60d01c926119698183611262565b611972916116ff565b60d01c916119808282611240565b611989916116b1565b60601c916119969161120d565b61199f916116b1565b60601c916119ab610242565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b031660608301526119e990611049565b906119f39161172b565b6001600160a01b03871691823b1561019d57611a29926000928360405180968195829463064acaab60e11b8452600484016117de565b03925af180156105ed57611a3a5750565b806105e161024f926101b8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611ad4575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611ab5565b90611b669291611e13565b65ffffffffffff808260a01c16908115600114611bd1575b428360d01c11611bc15742911610611bb4576001600160a01b0316611ba857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b905080611b7e565b9081602091031261019d5751801515810361019d5790565b6001600160a01b0390911681526040602082018190526106909291019061179b565b611c1d3633611e7b565b611d4257611c366000356001600160e01b031916611049565b6001810154611c55906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611d06575b8115611cdb575b5015611c7c5750600090565b60206040518092639ea9bd5960e01b82528180611c9d363360048401611bf1565b03915afa9081156105ed57600091611cb3575090565b610690915060203d8111611cd4575b611ccc8183610221565b810190611bd9565b503d611cc2565b54611cf5915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611c70565b905065ffffffffffff611d26611cea835465ffffffffffff9060301c1690565b168015159081611d38575b5090611c69565b9050421138611d31565b600190565b9091611d5336836112b7565b610140928381013590601e198136030182121561019d5701938435946001600160401b03861161019d5760200193853603851361019d57611d9d6115b487611de5986020986111f0565b908301526000611dc7611c49600080516020611fcf8339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b8552600485016113a5565b03925af19081156105ed57600091611dfb575090565b610690915060203d811161091b5761090d8183610221565b600080516020611fcf833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611e65916044840191906117bd565b03915afa9081156105ed57600091611dfb575090565b600080516020611fcf8339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611c9d90604483019061179b565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b600080516020611fcf83398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611f67575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415611fc5575b81168015611fbe575b848110908518028085189414611fb6575b5081811190821802181790565b925038611fa9565b5080611f98565b93508093611f8f56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789";
- address constant EXPECTED_KERNEL_LITE_2_2_ADDRESS = 0xbEdb61Be086F3f15eE911Cc9AB3EEa945DEbFa96;
- bytes constant KERNEL_LITE_2_2_CODE =
- hex"0000000000000000000000000000000000000000000000000000000000000000610160346200021357601f6200230b38819003918201601f19168301916001600160401b0383118484101762000218578084926040948552833981010312620002135780516001600160a01b039182821682036200021357602001519182168092036200021357306080524660a05260a06200007a6200022e565b600681526005602082016512d95c9b995b60d21b815260206200009c6200022e565b838152019264181719171960d91b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220916101009283526101209182527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b03198254161790556101409081527fdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e976001808060a01b0319825416179055604051916120bc93846200024f853960805184611b7c015260a05184611b9f015260c05184611c11015260e05184611c3701525183611b5b0152518281816104fb015281816107ba015281816108c701528181610a5201528181610b7301528181610d1201528181610e780152818161101c01528181611114015281816111c40152818161126d01526115c2015251818181610e160152610ed90152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620002185760405256fe6080604052600436101561001d575b366111a75761001b611e6b565b005b60003560e01c806306fdde03146101ad5780630b3dc354146101a8578063150b7a02146101a35780631626ba7e1461019e57806329f8b17414610199578063333daf921461019457806334fcd5be1461018f5780633659cfe61461018a5780633a871cdd146101855780633e1b08121461018057806351166ba01461017b578063519454471461017657806354fd4d501461017157806355b14f501461016c57806357b750471461016757806384b0196e1461016257806388e7fd061461015d578063b0d691fe14610158578063bc197c8114610153578063cdaea3ed1461014e578063d087d28814610149578063d1f5789414610144578063d54162211461013f578063f23a6e611461013a5763f2fde38b0361000e576110f1565b611097565b611005565b610ec4565b610e45565b610e00565b610d71565b610cfc565b610cc7565b610c1f565b610be8565b610b64565b610b10565b610a0b565b610942565b61087e565b61083c565b610796565b6106b3565b61062e565b610486565b610433565b6103a6565b610327565b6102f3565b60009103126101bd57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101eb57604052565b6101c2565b606081019081106001600160401b038211176101eb57604052565b608081019081106001600160401b038211176101eb57604052565b604081019081106001600160401b038211176101eb57604052565b90601f801991011681019081106001600160401b038211176101eb57604052565b6040519061026f8261020b565b565b6040519061016082018281106001600160401b038211176101eb57604052565b6040519061029e82610226565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102df575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102be565b346101bd5760003660031901126101bd5761032361030f610291565b6040519182916020835260208301906102b3565b0390f35b346101bd5760003660031901126101bd57602060008051602061207c8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101bd57565b359061026f8261035d565b9181601f840112156101bd578235916001600160401b0383116101bd57602083818601950101116101bd57565b346101bd5760803660031901126101bd576103c260043561035d565b6103cd60243561035d565b6064356001600160401b0381116101bd576103ec903690600401610379565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101bd5760043591602435906001600160401b0382116101bd5761042f91600401610379565b9091565b346101bd57602061044c61044636610400565b91611c6d565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101bd57565b65ffffffffffff8116036101bd57565b60c03660031901126101bd5761049a61045f565b602435906104a78261035d565b604435906104b48261035d565b6064356104c081610476565b608435936104cd85610476565b60a4356001600160401b0381116101bd576104ec903690600401610379565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610624575b6106125784926105596105859261054a61053c610262565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105808761116f565b611869565b1693843b156101bd576040519063064acaab60e11b825281806105af6000998a94600484016118d9565b038183895af1801561060d576105f4575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610601610607926101d8565b806101b2565b386105c0565b6115a9565b604051637046c88d60e01b8152600490fd5b5030331415610524565b346101bd57602061064761064136610400565b91611f94565b604051908152f35b9291926001600160401b0382116101eb5760405191610678601f8201601f191660200184610241565b8294818452818301116101bd578281602093846000960137010152565b9080601f830112156101bd578160206106b09335910161064f565b90565b6020806003193601126101bd576001600160401b036004358181116101bd57366023820112156101bd578060040135918083116101eb578260051b9060409081519461070187850187610241565b85528585019160248094860101943686116101bd57848101935b86851061072b5761001b8861126a565b84358481116101bd578201606060231982360301126101bd57835191610750836101f0565b8782013561075d8161035d565b835260448201358b8401526064820135928684116101bd576107878c94938a869536920101610695565b8682015281520194019361071b565b60203660031901126101bd576004356107ae8161035d565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610832575b61061257807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107e3565b6003196060368201126101bd57600435906001600160401b0382116101bd576101609082360301126101bd5761064760209160443590602435906004016115b5565b346101bd5760203660031901126101bd576004356001600160c01b038116908190036101bd57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060d5761032391600091610914575b506040519081529081906020820190565b610935915060203d811161093b575b61092d8183610241565b8101906114ca565b38610903565b503d610923565b346101bd5760203660031901126101bd5761032361098761096161045f565b600060606040516109718161020b565b828152826020820152826040820152015261116f565b604051906109948261020b565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101bd57600435610a238161035d565b6044356001600160401b0381116101bd57610a42903690600401610695565b9060643560028110156101bd57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ae5575b80610ad0575b61061257610a9581611220565b610abe576000828193926020839451920190602435905af13d82803e15610aba573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610ae0610adc611d3c565b1590565b610a88565b5030331415610a82565b60405190610afc82610226565b6005825264181719171960d91b6020830152565b346101bd5760003660031901126101bd5761032361030f610aef565b9060406003198301126101bd57600435610b458161035d565b91602435906001600160401b0382116101bd5761042f91600401610379565b610b6d36610b2c565b505050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610bde575b6106125760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b6044820152606490fd5b5030331415610ba3565b346101bd5760003660031901126101bd57602060008051602061207c8339815191525460e01b6040519063ffffffff60e01b168152f35b346101bd5760003660031901126101bd57610c75610c3b610291565b610c43610aef565b90604051928392600f60f81b8452610c6760209360e08587015260e08601906102b3565b9084820360408601526102b3565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cb057505050500390f35b835185528695509381019392810192600101610ca1565b346101bd5760003660031901126101bd57602060008051602061207c8339815191525465ffffffffffff60405191831c168152f35b346101bd5760003660031901126101bd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f840112156101bd578235916001600160401b0383116101bd576020808501948460051b0101116101bd57565b346101bd5760a03660031901126101bd57610d8d60043561035d565b610d9860243561035d565b6001600160401b036044358181116101bd57610db8903690600401610d41565b50506064358181116101bd57610dd2903690600401610d41565b50506084359081116101bd57610dec903690600401610379565b505060405163bc197c8160e01b8152602090f35b346101bd5760003660031901126101bd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101bd5760003660031901126101bd57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060d576103239160009161091457506040519081529081906020820190565b610ecd36610b2c565b916001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821690821603610fb55760008051602061209c8339815191525416610f6457610f30610f2a61001b93610f3693611308565b906117ef565b60601c90565b60008051602061209c83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b8152602060048201526024808201527f4b65726e656c4c69746545434453413a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f4b65726e656c4c69746545434453413a20696e76616c69642076616c6964617460448201526137b960f11b6064820152608490fd5b60203660031901126101bd5761101961045f565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061108d575b6106125760008051602061207c83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561104c565b346101bd5760a03660031901126101bd576110b360043561035d565b6110be60243561035d565b6084356001600160401b0381116101bd576110dd903690600401610379565b505060405163f23a6e6160e01b8152602090f35b60203660031901126101bd576004356111098161035d565b6001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580611165575b6106125760008051602061209c83398151915280546001600160a01b03191691909216179055005b503033141561113d565b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006111bd81356001600160e01b03191661116f565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611211575b61061257818091368280378136915af43d82803e15610aba573d90f35b5061121a611d3c565b156111f4565b6002111561122a57565b634e487b7160e01b600052602160045260246000fd5b80518210156112545760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112f7575b6106125780519060005b8281106112b357505050565b6000806112c08385611240565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112f2576001016112a7565b3d6000fd5b50611303610adc611d3c565b61129d565b906014116101bd5790601490565b906004116101bd5790600490565b90929192836004116101bd5783116101bd57600401916003190190565b906024116101bd5760100190601490565b906058116101bd5760380190602090565b906024116101bd5760040190602090565b906038116101bd5760240190601490565b90600a116101bd5760040190600690565b906010116101bd57600a0190600690565b909392938483116101bd5784116101bd578101920390565b6001600160e01b031990358181169392600481106113dc57505050565b60040360031b82901b16169150565b9190610160838203126101bd57611400610271565b9261140a8161036e565b8452602081013560208501526040810135916001600160401b03928381116101bd5781611438918401610695565b604086015260608201358381116101bd5781611455918401610695565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101bd57826114a7918501610695565b9086015261014092838301359081116101bd576114c49201610695565b90830152565b908160209103126101bd575190565b606080825282516001600160a01b0316908201529193929160409161159f90602081015160808401528381015161151e610160918260a08701526101c08601906102b3565b9061158c61153e606085015193605f1994858983030160c08a01526102b3565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102b3565b92015190848303016101a08501526102b3565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000000000000000000000000000000000000000000000851633036117dd5760049485359283610144810135019187602484019301359461161461160e8786611316565b906113bf565b926001600160e01b03198085169182156117b0576116339036906113eb565b9461164d60008051602061207c8339815191525460e01b90565b1616156116655760405163fc2f51c560e01b81528a90fd5b97989697600160e01b810361175f575090602095966116ef6116bd6116a461169f61160e8760646000990135016024878201359101611316565b61116f565b6001810154909a9081906001600160a01b031698611324565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b611751575b369161064f565b610140850152611713604051998a9788968794633a871cdd60e01b865285016114d9565b0393165af190811561060d576106b092600092611731575b50611ff9565b61174a91925060203d811161093b5761092d8183610241565b903861172b565b348080808f335af1506116e8565b9095939190600160e11b036117a3576117996116ef9460009361179461160e8a606460209c01350160248d8201359101611316565b611901565b91999296916116e2565b5050505050505050600190565b9750505050505050916106b0939450806117cb575b50611e9c565b3490349034903490335af150386117c5565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061181157505050565b60140360031b82901b16169150565b35906020811061182e575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061185a57505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b919061190d8282611341565b611916916117ef565b60601c936119248383611352565b61192d91611820565b6058830160788201948583605801906119479183886113a7565b61195091611820565b61195a8287611363565b61196391611820565b61196d8388611374565b611976916117ef565b60601c61198436878761064f565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119fa60c082610241565b519020611a0690611b59565b9084019660788801611a199184896113a7565b90611a2392611f94565b611a2d8287611363565b6001600160a01b031991611a419190611820565b16611a4b91611ff9565b966078868801019682036077190195611a648382611385565b611a6d9161183d565b60d01c92611a7b8183611396565b611a849161183d565b60d01c91611a928282611374565b611a9b916117ef565b60601c91611aa891611341565b611ab1916117ef565b60601c91611abd610262565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611afb9061116f565b90611b0591611869565b6001600160a01b03871691823b156101bd57611b3b926000928360405180968195829463064acaab60e11b8452600484016118d9565b03925af1801561060d57611b4c5750565b8061060161026f926101d8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611be6575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611bc7565b90611c789291611f94565b65ffffffffffff808260a01c16908115600114611ce3575b428360d01c11611cd35742911610611cc6576001600160a01b0316611cba57630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b905080611c90565b908160209103126101bd575180151581036101bd5790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b60008051602061209c833981519152546001600160a01b039081163314611e6557611d726000356001600160e01b03191661116f565b60018101546001600160a01b031691821615908115611e29575b8115611dfe575b5015611d9f5750600090565b60206040518092639ea9bd5960e01b82528180611dc0363360048401611d03565b03915afa90811561060d57600091611dd6575090565b6106b0915060203d8111611df7575b611def8183610241565b810190611ceb565b503d611de5565b54611e18915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611d93565b905065ffffffffffff611e49611e0d835465ffffffffffff9060301c1690565b168015159081611e5b575b5090611d8c565b9050421138611e54565b50600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b90611ecc906020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b9061014081013590601e19813603018212156101bd5701908135916001600160401b0383116101bd576020019180360383136101bd576116e881611f1392611f1995611324565b90611f45565b60008051602061209c833981519152546001600160a01b03908116911603611f4057600090565b600190565b6001608060006041602094969596604080519880519285526060810151851a88528781015182520151606052145afa51913d15611f86576000606052604052565b638baa579f6000526004601cfd5b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c600420611fcd9291611f139192369161064f565b60008051602061209c833981519152546001600160a01b03918216911614611ff457600190565b600090565b8082186001600160a01b031615600114612014575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612072575b8116801561206b575b848110908518028085189414612063575b5081811190821802181790565b925038612056565b5080612045565b9350809361203c56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9dea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea0390";
-
- function deploy() internal returns (address, address) {
- DeterministicDeploy.checkDeploy("Kernel 2.2", EXPECTED_KERNEL_2_2_ADDRESS, KERNEL_2_2_CODE);
- DeterministicDeploy.checkDeploy("Kernel lite 2.2", EXPECTED_KERNEL_LITE_2_2_ADDRESS, KERNEL_LITE_2_2_CODE);
- return (EXPECTED_KERNEL_2_2_ADDRESS, EXPECTED_KERNEL_LITE_2_2_ADDRESS);
- }
-}
diff --git a/script/deterministic/Kernel2_3.s.sol b/script/deterministic/Kernel2_3.s.sol
deleted file mode 100644
index fdac0b61..00000000
--- a/script/deterministic/Kernel2_3.s.sol
+++ /dev/null
@@ -1,19 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./DeterministicDeploy.s.sol";
-
-library Kernel_2_3_Deploy {
- address constant EXPECTED_KERNEL_2_3_ADDRESS = 0xD3F582F6B4814E989Ee8E96bc3175320B5A540ab;
- bytes constant KERNEL_2_3_CODE =
- hex"000000000000000000000000000000000000000000000000000000000000000061014034620001be57601f6200238b38819003918201601f19168301916001600160401b03831184841017620001c357808492602094604052833981010312620001be57516001600160a01b0381168103620001be57306080524660a05260a062000069620001d9565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d9565b838152019264302e322e3360d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b0319825416179055604051906121919283620001fa843960805183611b42015260a05183611b65015260c05183611bd7015260e05183611bfd01525182611b21015251818181610506015281816107c5015281816108d201528181610a5d01528181610b8501528181610d7f01528181610de901528181610f4d0152818161104c015281816111760152818161121f01526115660152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001c35760405256fe6080604052600436101561001d575b366111595761001b612047565b005b60003560e01c806306fdde031461019d5780630b3dc35414610198578063150b7a02146101935780631626ba7e1461018e57806329f8b17414610189578063333daf921461018457806334fcd5be1461017f5780633659cfe61461017a5780633a871cdd146101755780633e1b08121461017057806351166ba01461016b578063519454471461016657806354fd4d501461016157806355b14f501461015c57806357b750471461015757806384b0196e1461015257806388e7fd061461014d578063b0d691fe14610148578063b68df16d14610143578063bc197c811461013e578063d087d28814610139578063d1f5789414610134578063d54162211461012f5763f23a6e610361000e576110c7565b611035565b610f99565b610f1a565b610e8b565b610dae565b610d69565b610d34565b610c8c565b610c55565b610b6f565b610b1b565b610a16565b61094d565b610889565b610847565b6107a1565b6106be565b610639565b610491565b61043e565b6103b1565b610332565b6102fe565b60009103126101ad57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101db57604052565b6101b2565b606081019081106001600160401b038211176101db57604052565b608081019081106001600160401b038211176101db57604052565b604081019081106001600160401b038211176101db57604052565b60c081019081106001600160401b038211176101db57604052565b90601f801991011681019081106001600160401b038211176101db57604052565b6040519061027a826101fb565b565b6040519061016082018281106001600160401b038211176101db57604052565b604051906102a982610216565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102ea575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102c9565b346101ad5760003660031901126101ad5761032e61031a61029c565b6040519182916020835260208301906102be565b0390f35b346101ad5760003660031901126101ad5760206000805160206121718339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101ad57565b359061027a82610368565b9181601f840112156101ad578235916001600160401b0383116101ad57602083818601950101116101ad57565b346101ad5760803660031901126101ad576103cd600435610368565b6103d8602435610368565b6064356001600160401b0381116101ad576103f7903690600401610384565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101ad5760043591602435906001600160401b0382116101ad5761043a91600401610384565b9091565b346101ad5760206104576104513661040b565b91611c33565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101ad57565b65ffffffffffff8116036101ad57565b60c03660031901126101ad576104a561046a565b602435906104b282610368565b604435906104bf82610368565b6064356104cb81610481565b608435936104d885610481565b60a4356001600160401b0381116101ad576104f7903690600401610384565b9590946001600160a01b0393337f0000000000000000000000000000000000000000000000000000000000000000861614158061062f575b61061d5784926105646105909261055561054761026d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261058b87611121565b611803565b1693843b156101ad576040519063064acaab60e11b825281806105ba6000998a94600484016118b6565b038183895af18015610618576105ff575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060c610612926101c8565b806101a2565b386105cb565b61154d565b604051637046c88d60e01b8152600490fd5b503033141561052f565b346101ad57602061065261064c3661040b565b91611f8c565b604051908152f35b9291926001600160401b0382116101db5760405191610683601f8201601f19166020018461024c565b8294818452818301116101ad578281602093846000960137010152565b9080601f830112156101ad578160206106bb9335910161065a565b90565b6020806003193601126101ad576001600160401b036004358181116101ad57366023820112156101ad578060040135918083116101db578260051b9060409081519461070c8785018761024c565b85528585019160248094860101943686116101ad57848101935b8685106107365761001b8861121c565b84358481116101ad578201606060231982360301126101ad5783519161075b836101e0565b8782013561076881610368565b835260448201358b8401526064820135928684116101ad576107928c94938a8695369201016106a0565b86820152815201940193610726565b60203660031901126101ad576004356107b981610368565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061083d575b61061d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107ee565b6003196060368201126101ad57600435906001600160401b0382116101ad576101609082360301126101ad576106526020916044359060243590600401611559565b346101ad5760203660031901126101ad576004356001600160c01b038116908190036101ad57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106185761032e9160009161091f575b506040519081529081906020820190565b610940915060203d8111610946575b610938818361024c565b81019061146e565b3861090e565b503d61092e565b346101ad5760203660031901126101ad5761032e61099261096c61046a565b6000606060405161097c816101fb565b8281528260208201528260408201520152611121565b6040519061099f826101fb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101ad57600435610a2e81610368565b6044356001600160401b0381116101ad57610a4d9036906004016106a0565b9060643560028110156101ad57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610af0575b80610adb575b61061d57610aa0816111d2565b610ac9576000828193926020839451920190602435905af13d82803e15610ac5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610aeb610ae7611d8c565b1590565b610a93565b5030331415610a8d565b60405190610b0782610216565b6005825264302e322e3360d81b6020830152565b346101ad5760003660031901126101ad5761032e61031a610afa565b9060406003198301126101ad57600435610b5081610368565b91602435906001600160401b0382116101ad5761043a91600401610384565b610b7836610b37565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c4b575b61061d57806000805160206121718339815191525460501c1691610bd181612078565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c47578385610c25819593829463064acaab60e11b8452600484016118b6565b03925af1801561061857610c37575080f35b8061060c610c44926101c8565b80f35b8380fd5b5030331415610bae565b346101ad5760003660031901126101ad5760206000805160206121718339815191525460e01b6040519063ffffffff60e01b168152f35b346101ad5760003660031901126101ad57610ce2610ca861029c565b610cb0610afa565b90604051928392600f60f81b8452610cd460209360e08587015260e08601906102be565b9084820360408601526102be565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d1d57505050500390f35b835185528695509381019392810192600101610d0e565b346101ad5760003660031901126101ad5760206000805160206121718339815191525465ffffffffffff60405191831c168152f35b346101ad5760003660031901126101ad576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60403660031901126101ad57600435610dc681610368565b6024356001600160401b0381116101ad57610de59036906004016106a0565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610e51575b80610e40575b61061d5760008281939260208394519201905af43d82803e15610ac5573d90f35b50610e4c610ae7611d8c565b610e1f565b5030331415610e19565b9181601f840112156101ad578235916001600160401b0383116101ad576020808501948460051b0101116101ad57565b346101ad5760a03660031901126101ad57610ea7600435610368565b610eb2602435610368565b6001600160401b036044358181116101ad57610ed2903690600401610e5b565b50506064358181116101ad57610eec903690600401610e5b565b50506084359081116101ad57610f06903690600401610384565b505060405163bc197c8160e01b8152602090f35b346101ad5760003660031901126101ad57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106185761032e9160009161091f57506040519081529081906020820190565b610fa236610b37565b60008051602061217183398151915254919290916001600160a01b03919060501c821661102457610fd281612078565b1691823b156101ad57611007926000928360405180968195829463064acaab60e11b8452602060048501526024840191611895565b03925af180156106185761101757005b8061060c61001b926101c8565b60405162dc149f60e41b8152600490fd5b60203660031901126101ad5761104961046a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110bd575b61061d5760008051602061217183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561107c565b346101ad5760a03660031901126101ad576110e3600435610368565b6110ee602435610368565b6084356001600160401b0381116101ad5761110d903690600401610384565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061116f81356001600160e01b031916611121565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111c3575b61061d57818091368280378136915af43d82803e15610ac5573d90f35b506111cc611d8c565b156111a6565b600211156111dc57565b634e487b7160e01b600052602160045260246000fd5b80518210156112065760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112a9575b61061d5780519060005b82811061126557505050565b60008061127283856111f2565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112a457600101611259565b3d6000fd5b506112b5610ae7611d8c565b61124f565b906004116101ad5790600490565b90929192836004116101ad5783116101ad57600401916003190190565b906024116101ad5760100190601490565b906058116101ad5760380190602090565b906024116101ad5760040190602090565b906038116101ad5760240190601490565b90600a116101ad5760040190600690565b906010116101ad57600a0190600690565b909392938483116101ad5784116101ad578101920390565b6001600160e01b0319903581811693926004811061138057505050565b60040360031b82901b16169150565b9190610160838203126101ad576113a461027c565b926113ae81610379565b8452602081013560208501526040810135916001600160401b03928381116101ad57816113dc9184016106a0565b604086015260608201358381116101ad57816113f99184016106a0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101ad578261144b9185016106a0565b9086015261014092838301359081116101ad5761146892016106a0565b90830152565b908160209103126101ad575190565b606080825282516001600160a01b031690820152919392916040916115439060208101516080840152838101516114c2610160918260a08701526101c08601906102be565b906115306114e2606085015193605f1994858983030160c08a01526102be565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102be565b92015190848303016101a08501526102be565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f000000000000000000000000000000000000000000000000000000000000000085163303611777576004948535928361014481013501918760248401930135946115b86115b287866112ba565b90611363565b926001600160e01b0319808516918215611754576115d790369061138f565b946115f16000805160206121718339815191525460e01b90565b1616156116095760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611703575090602095966116936116616116486116436115b287606460009901350160248782013591016112ba565b611121565b6001810154909a9081906001600160a01b0316986112c8565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b6116f5575b369161065a565b6101408501526116b7604051998a9788968794633a871cdd60e01b8652850161147d565b0393165af1908115610618576106bb926000926116d5575b506120ee565b6116ee91925060203d811161094657610938818361024c565b90386116cf565b348080808f335af15061168c565b9095939190600160e11b036117475761173d611693946000936117386115b28a606460209c01350160248d82013591016112ba565b6118c7565b9199929691611686565b5050505050505050600190565b9697505050505050506106bb9394508215611ec0573434343486335af150611ec0565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106117ab57505050565b60140360031b82901b16169150565b3590602081106117c8575090565b6000199060200360031b1b1690565b6001600160d01b031990358181169392600681106117f457505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106bb938181520191611895565b91906118d382826112e5565b6118dc91611789565b60601c936118ea83836112f6565b6118f3916117ba565b60588301607882019485836058019061190d91838861134b565b611916916117ba565b6119208287611307565b611929916117ba565b6119338388611318565b61193c91611789565b60601c61194a36878761065a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119c060c08261024c565b5190206119cc90611b1f565b90840196607888016119df91848961134b565b906119e992611f8c565b6119f38287611307565b6001600160a01b031991611a0791906117ba565b16611a11916120ee565b966078868801019682036077190195611a2a8382611329565b611a33916117d7565b60d01c92611a41818361133a565b611a4a916117d7565b60d01c91611a588282611318565b611a6191611789565b60601c91611a6e916112e5565b611a7791611789565b60601c91611a8361026d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611ac190611121565b90611acb91611803565b6001600160a01b03871691823b156101ad57611b01926000928360405180968195829463064acaab60e11b8452600484016118b6565b03925af1801561061857611b125750565b8061060c61027a926101c8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611bac575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611b8d565b91611cf291611cf793611cdc611cea611c4a61029c565b611c52610afa565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611cb181610231565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261024c565b519020611f8c565b6120c5565b9065ffffffffffff928342911611159283611d44575b505081611d32575b5015611d2657630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611d15565b429116101591503880611d0d565b908160209103126101ad575180151581036101ad5790565b6001600160a01b0390911681526040602082018190526106bb92910190611873565b611d963633611ff4565b611ebb57611daf6000356001600160e01b031916611121565b6001810154611dce906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611e7f575b8115611e54575b5015611df55750600090565b60206040518092639ea9bd5960e01b82528180611e16363360048401611d6a565b03915afa90811561061857600091611e2c575090565b6106bb915060203d8111611e4d575b611e45818361024c565b810190611d52565b503d611e3b565b54611e6e915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611de9565b905065ffffffffffff611e9f611e63835465ffffffffffff9060301c1690565b168015159081611eb1575b5090611de2565b9050421138611eaa565b600190565b9091611ecc368361138f565b610140928381013590601e19813603018212156101ad5701938435946001600160401b0386116101ad576020019385360385136101ad57611f1661168c87611f5e986020986112c8565b908301526000611f40611dc26000805160206121718339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b85526004850161147d565b03925af190811561061857600091611f74575090565b6106bb915060203d811161094657610938818361024c565b600080516020612171833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611fde91604484019190611895565b03915afa90811561061857600091611f74575090565b6000805160206121718339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611e16906044830190611873565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b60008051602061217183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c169283156001146120e6575b5060d01c92565b9250386120df565b8082186001600160a01b031615600114612109575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612167575b81168015612160575b848110908518028085189414612158575b5081811190821802181790565b92503861214b565b508061213a565b9350809361213156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789";
-
- address constant EXPECTED_KERNEL_LITE_2_3_ADDRESS = 0x482EC42E88a781485E1B6A4f07a0C5479d183291;
- bytes constant KERNEL_LITE_2_3_CODE =
- hex"0000000000000000000000000000000000000000000000000000000000000000610160346200021a57601f620024b438819003918201601f19168301916001600160401b038311848410176200021f5780849260409485528339810103126200021a5780516001600160a01b039182821682036200021a57602001519182168092036200021a57306080524660a05260a06200007a62000235565b600681526005602082016512d95c9b995b60d21b815260206200009c62000235565b838152019264302e322e3360d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220916101009283526101209182527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b03198254161790556101409081527fdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e976001808060a01b03198254161790556040519161225e938462000256853960805184611c54015260a05184611c77015260c05184611ce9015260e05184611d0f01525183611c33015251828181610526015281816107e5015281816108f201528181610a7d01528181610b9e01528181610d3d01528181610da701528181610f50015281816110f4015281816111ec0152818161129c01528181611345015261169a015251818181610eee0152610fb10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b038111838210176200021f5760405256fe6080604052600436101561001d575b3661127f5761001b611fe4565b005b60003560e01c806306fdde03146101bd5780630b3dc354146101b8578063150b7a02146101b35780631626ba7e146101ae57806329f8b174146101a9578063333daf92146101a457806334fcd5be1461019f5780633659cfe61461019a5780633a871cdd146101955780633e1b08121461019057806351166ba01461018b578063519454471461018657806354fd4d501461018157806355b14f501461017c57806357b750471461017757806384b0196e1461017257806388e7fd061461016d578063b0d691fe14610168578063b68df16d14610163578063bc197c811461015e578063cdaea3ed14610159578063d087d28814610154578063d1f578941461014f578063d54162211461014a578063f23a6e61146101455763f2fde38b0361000e576111c9565b61116f565b6110dd565b610f9c565b610f1d565b610ed8565b610e49565b610d6c565b610d27565b610cf2565b610c4a565b610c13565b610b8f565b610b3b565b610a36565b61096d565b6108a9565b610867565b6107c1565b6106de565b610659565b6104b1565b61045e565b6103d1565b610352565b61031e565b60009103126101cd57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101fb57604052565b6101d2565b606081019081106001600160401b038211176101fb57604052565b608081019081106001600160401b038211176101fb57604052565b604081019081106001600160401b038211176101fb57604052565b60c081019081106001600160401b038211176101fb57604052565b90601f801991011681019081106001600160401b038211176101fb57604052565b6040519061029a8261021b565b565b6040519061016082018281106001600160401b038211176101fb57604052565b604051906102c982610236565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061030a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102e9565b346101cd5760003660031901126101cd5761034e61033a6102bc565b6040519182916020835260208301906102de565b0390f35b346101cd5760003660031901126101cd57602060008051602061221e8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101cd57565b359061029a82610388565b9181601f840112156101cd578235916001600160401b0383116101cd57602083818601950101116101cd57565b346101cd5760803660031901126101cd576103ed600435610388565b6103f8602435610388565b6064356001600160401b0381116101cd576104179036906004016103a4565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101cd5760043591602435906001600160401b0382116101cd5761045a916004016103a4565b9091565b346101cd5760206104776104713661042b565b91611d45565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101cd57565b65ffffffffffff8116036101cd57565b60c03660031901126101cd576104c561048a565b602435906104d282610388565b604435906104df82610388565b6064356104eb816104a1565b608435936104f8856104a1565b60a4356001600160401b0381116101cd576105179036906004016103a4565b9590946001600160a01b0393337f0000000000000000000000000000000000000000000000000000000000000000861614158061064f575b61063d5784926105846105b09261057561056761028d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105ab87611247565b611941565b1693843b156101cd576040519063064acaab60e11b825281806105da6000998a94600484016119b1565b038183895af180156106385761061f575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061062c610632926101e8565b806101c2565b386105eb565b611681565b604051637046c88d60e01b8152600490fd5b503033141561054f565b346101cd57602061067261066c3661042b565b91612136565b604051908152f35b9291926001600160401b0382116101fb57604051916106a3601f8201601f19166020018461026c565b8294818452818301116101cd578281602093846000960137010152565b9080601f830112156101cd578160206106db9335910161067a565b90565b6020806003193601126101cd576001600160401b036004358181116101cd57366023820112156101cd578060040135918083116101fb578260051b9060409081519461072c8785018761026c565b85528585019160248094860101943686116101cd57848101935b8685106107565761001b88611342565b84358481116101cd578201606060231982360301126101cd5783519161077b83610200565b8782013561078881610388565b835260448201358b8401526064820135928684116101cd576107b28c94938a8695369201016106c0565b86820152815201940193610746565b60203660031901126101cd576004356107d981610388565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061085d575b61063d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561080e565b6003196060368201126101cd57600435906001600160401b0382116101cd576101609082360301126101cd57610672602091604435906024359060040161168d565b346101cd5760203660031901126101cd576004356001600160c01b038116908190036101cd57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106385761034e9160009161093f575b506040519081529081906020820190565b610960915060203d8111610966575b610958818361026c565b8101906115a2565b3861092e565b503d61094e565b346101cd5760203660031901126101cd5761034e6109b261098c61048a565b6000606060405161099c8161021b565b8281528260208201528260408201520152611247565b604051906109bf8261021b565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101cd57600435610a4e81610388565b6044356001600160401b0381116101cd57610a6d9036906004016106c0565b9060643560028110156101cd57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610b10575b80610afb575b61063d57610ac0816112f8565b610ae9576000828193926020839451920190602435905af13d82803e15610ae5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610b0b610b07611eb5565b1590565b610ab3565b5030331415610aad565b60405190610b2782610236565b6005825264302e322e3360d81b6020830152565b346101cd5760003660031901126101cd5761034e61033a610b1a565b9060406003198301126101cd57600435610b7081610388565b91602435906001600160401b0382116101cd5761045a916004016103a4565b610b9836610b57565b505050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610c09575b61063d5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b6044820152606490fd5b5030331415610bce565b346101cd5760003660031901126101cd57602060008051602061221e8339815191525460e01b6040519063ffffffff60e01b168152f35b346101cd5760003660031901126101cd57610ca0610c666102bc565b610c6e610b1a565b90604051928392600f60f81b8452610c9260209360e08587015260e08601906102de565b9084820360408601526102de565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cdb57505050500390f35b835185528695509381019392810192600101610ccc565b346101cd5760003660031901126101cd57602060008051602061221e8339815191525465ffffffffffff60405191831c168152f35b346101cd5760003660031901126101cd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60403660031901126101cd57600435610d8481610388565b6024356001600160401b0381116101cd57610da39036906004016106c0565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610e0f575b80610dfe575b61063d5760008281939260208394519201905af43d82803e15610ae5573d90f35b50610e0a610b07611eb5565b610ddd565b5030331415610dd7565b9181601f840112156101cd578235916001600160401b0383116101cd576020808501948460051b0101116101cd57565b346101cd5760a03660031901126101cd57610e65600435610388565b610e70602435610388565b6001600160401b036044358181116101cd57610e90903690600401610e19565b50506064358181116101cd57610eaa903690600401610e19565b50506084359081116101cd57610ec49036906004016103a4565b505060405163bc197c8160e01b8152602090f35b346101cd5760003660031901126101cd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101cd5760003660031901126101cd57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106385761034e9160009161093f57506040519081529081906020820190565b610fa536610b57565b916001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082169082160361108d5760008051602061223e833981519152541661103c5761100861100261001b9361100e936113e0565b906118c7565b60601c90565b60008051602061223e83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b8152602060048201526024808201527f4b65726e656c4c69746545434453413a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f4b65726e656c4c69746545434453413a20696e76616c69642076616c6964617460448201526137b960f11b6064820152608490fd5b60203660031901126101cd576110f161048a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611165575b61063d5760008051602061221e83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415611124565b346101cd5760a03660031901126101cd5761118b600435610388565b611196602435610388565b6084356001600160401b0381116101cd576111b59036906004016103a4565b505060405163f23a6e6160e01b8152602090f35b60203660031901126101cd576004356111e181610388565b6001600160a01b03337f0000000000000000000000000000000000000000000000000000000000000000821614158061123d575b61063d5760008051602061223e83398151915280546001600160a01b03191691909216179055005b5030331415611215565b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061129581356001600160e01b031916611247565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112e9575b61063d57818091368280378136915af43d82803e15610ae5573d90f35b506112f2611eb5565b156112cc565b6002111561130257565b634e487b7160e01b600052602160045260246000fd5b805182101561132c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113cf575b61063d5780519060005b82811061138b57505050565b6000806113988385611318565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156113ca5760010161137f565b3d6000fd5b506113db610b07611eb5565b611375565b906014116101cd5790601490565b906004116101cd5790600490565b90929192836004116101cd5783116101cd57600401916003190190565b906024116101cd5760100190601490565b906058116101cd5760380190602090565b906024116101cd5760040190602090565b906038116101cd5760240190601490565b90600a116101cd5760040190600690565b906010116101cd57600a0190600690565b909392938483116101cd5784116101cd578101920390565b6001600160e01b031990358181169392600481106114b457505050565b60040360031b82901b16169150565b9190610160838203126101cd576114d861029c565b926114e281610399565b8452602081013560208501526040810135916001600160401b03928381116101cd57816115109184016106c0565b604086015260608201358381116101cd578161152d9184016106c0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101cd578261157f9185016106c0565b9086015261014092838301359081116101cd5761159c92016106c0565b90830152565b908160209103126101cd575190565b606080825282516001600160a01b031690820152919392916040916116779060208101516080840152838101516115f6610160918260a08701526101c08601906102de565b90611664611616606085015193605f1994858983030160c08a01526102de565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102de565b92015190848303016101a08501526102de565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000000000000000000000000000000000000000000000851633036118b5576004948535928361014481013501918760248401930135946116ec6116e687866113ee565b90611497565b926001600160e01b03198085169182156118885761170b9036906114c3565b9461172560008051602061221e8339815191525460e01b90565b16161561173d5760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611837575090602095966117c761179561177c6117776116e687606460009901350160248782013591016113ee565b611247565b6001810154909a9081906001600160a01b0316986113fc565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b611829575b369161067a565b6101408501526117eb604051998a9788968794633a871cdd60e01b865285016115b1565b0393165af1908115610638576106db92600092611809575b5061219b565b61182291925060203d811161096657610958818361026c565b9038611803565b348080808f335af1506117c0565b9095939190600160e11b0361187b576118716117c79460009361186c6116e68a606460209c01350160248d82013591016113ee565b6119d9565b91999296916117ba565b5050505050505050600190565b9750505050505050916106db939450806118a3575b5061203e565b3490349034903490335af1503861189d565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106118e957505050565b60140360031b82901b16169150565b359060208110611906575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061193257505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b91906119e58282611419565b6119ee916118c7565b60601c936119fc838361142a565b611a05916118f8565b605883016078820194858360580190611a1f91838861147f565b611a28916118f8565b611a32828761143b565b611a3b916118f8565b611a45838861144c565b611a4e916118c7565b60601c611a5c36878761067a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a08084019290925290825290611ad260c08261026c565b519020611ade90611c31565b9084019660788801611af191848961147f565b90611afb92612136565b611b05828761143b565b6001600160a01b031991611b1991906118f8565b16611b239161219b565b966078868801019682036077190195611b3c838261145d565b611b4591611915565b60d01c92611b53818361146e565b611b5c91611915565b60d01c91611b6a828261144c565b611b73916118c7565b60601c91611b8091611419565b611b89916118c7565b60601c91611b9561028d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611bd390611247565b90611bdd91611941565b6001600160a01b03871691823b156101cd57611c13926000928360405180968195829463064acaab60e11b8452600484016119b1565b03925af1801561063857611c245750565b8061062c61029a926101e8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611cbe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611c9f565b91611e0491611e0993611dee611dfc611d5c6102bc565b611d64610b1a565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611dc381610251565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261026c565b519020612136565b612015565b9065ffffffffffff928342911611159283611e56575b505081611e44575b5015611e3857630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611e27565b429116101591503880611e1f565b908160209103126101cd575180151581036101cd5790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b60008051602061223e833981519152546001600160a01b039081163314611fde57611eeb6000356001600160e01b031916611247565b60018101546001600160a01b031691821615908115611fa2575b8115611f77575b5015611f185750600090565b60206040518092639ea9bd5960e01b82528180611f39363360048401611e7c565b03915afa90811561063857600091611f4f575090565b6106db915060203d8111611f70575b611f68818361026c565b810190611e64565b503d611f5e565b54611f91915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611f0c565b905065ffffffffffff611fc2611f86835465ffffffffffff9060301c1690565b168015159081611fd4575b5090611f05565b9050421138611fcd565b50600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b8065ffffffffffff91828160a01c16928315600114612036575b5060d01c92565b92503861202f565b9061206e906020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b9061014081013590601e19813603018212156101cd5701908135916001600160401b0383116101cd576020019180360383136101cd576117c0816120b5926120bb956113fc565b906120e7565b60008051602061223e833981519152546001600160a01b039081169116036120e257600090565b600190565b6001608060006041602094969596604080519880519285526060810151851a88528781015182520151606052145afa51913d15612128576000606052604052565b638baa579f6000526004601cfd5b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042061216f92916120b59192369161067a565b60008051602061223e833981519152546001600160a01b0391821691161461219657600190565b600090565b8082186001600160a01b0316156001146121b6575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612214575b8116801561220d575b848110908518028085189414612205575b5081811190821802181790565b9250386121f8565b50806121e7565b935080936121de56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9dea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea0390";
-
- function deploy() internal returns (address, address) {
- DeterministicDeploy.checkDeploy("Kernel 2.3", EXPECTED_KERNEL_2_3_ADDRESS, KERNEL_2_3_CODE);
- DeterministicDeploy.checkDeploy("Kernel Lite 2.3", EXPECTED_KERNEL_LITE_2_3_ADDRESS, KERNEL_LITE_2_3_CODE);
- return (EXPECTED_KERNEL_2_3_ADDRESS, EXPECTED_KERNEL_LITE_2_3_ADDRESS);
- }
-}
diff --git a/script/deterministic/SessionKey.s.sol b/script/deterministic/SessionKey.s.sol
deleted file mode 100644
index 157c855f..00000000
--- a/script/deterministic/SessionKey.s.sol
+++ /dev/null
@@ -1,14 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./DeterministicDeploy.s.sol";
-
-library SessionKeyDeploy {
- address constant EXPECTED_SESSIONKEY_ADDRESS = 0xB8E3c4bEaACAd06f6092793012DA4a8cB23D6123;
- bytes constant SESSIONKEY_CODE =
- hex"0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761156e908161001c8239f35b600080fdfe60806040908082526004908136101561001757600080fd5b600092833560e01c9182630c9595561461034d57508163333daf921461031a5781633a871cdd146102d657816346585db21461027d57816352721fdd146102005781637ecebe00146101b8578382638fc925aa1461010b575081639ea9bd59146100bd575063dbba225d1461008b57600080fd5b346100b95760203660031901126100b957356001600160801b03811681036100b9576100b6906105d7565b80f35b5080fd5b905082346101085781600319360112610108576100d8610533565b50602435906001600160401b03821161010857506100f990369084016104eb565b50505163d623472560e01b8152fd5b80fd5b8091846020600319360112610170578035906001600160401b0382116101b357610137913691016104eb565b9091906014810361017457601411610170576002913560601c835260016020528083203384526020528220828155826001820155015580f35b5050fd5b9192506010820361019457506010116100b9576100b6903560801c6105d7565b6100b692506001600160801b03915033845283602052832054166105d7565b505050fd5b8390346100b95760203660031901126100b9579081906001600160a01b036101de610533565b1681528060205220548151906001600160801b038116825260801c6020820152f35b8390346100b957806003193601126100b9578060a09261021e610533565b61022661051d565b90600180871b03809116835260016020528383209116825260205220908154916002600182015491015491805193845265ffffffffffff80831660208601528260301c169084015260601c60608301526080820152f35b919050346102d257816003193601126102d25791819261029b61051d565b9035825260026020528282209060018060a01b03168252602052205481519065ffffffffffff90818116835260301c166020820152f35b8280fd5b91905060031992606084360112610108578135936001600160401b0385116100b95761016090853603011261010857506020926103139101610934565b9051908152f35b90508234610108578160031936011261010857602435906001600160401b03821161010857506100f990369084016104eb565b8492509060203660031901126102d2576001600160401b039184358381116104e35761037c90369087016104eb565b806014116104e757806034116104e75780603a116104e7578084116104e757806054116104e7576074116104e35760548101359360a08301908111838210176104d0579060029184526014810135835260208301603482013560d01c815284840190603a83013560d01c825261046160608601918785013560601c835260808701948986523560601c8a526001602052878a20338b52602052878a2096518755600187019365ffffffffffff8092511665ffffffffffff198654161785555116839065ffffffffffff60301b82549160301b169065ffffffffffff60301b1916179055565b516bffffffffffffffffffffffff82549181199060601b16911617905551910155826020528220908154916001600160801b038084168181146104bd576100b69596506001011680936001600160801b03191617905514610580565b634e487b7160e01b865260118752602486fd5b634e487b7160e01b865260418752602486fd5b8480fd5b8580fd5b9181601f84011215610518578235916001600160401b038311610518576020838186019501011161051857565b600080fd5b602435906001600160a01b038216820361051857565b600435906001600160a01b038216820361051857565b90601f801991011681019081106001600160401b0382111761056a57604052565b634e487b7160e01b600052604160045260246000fd5b1561058757565b60405162461bcd60e51b815260206004820152602260248201527f53657373696f6e4b657956616c696461746f723a20696e76616c6964206e6f6e604482015261636560f01b6064820152608490fd5b600033815280602052604080822054916105ff6001600160801b0385169360801c8411610580565b3381528060205220916001600160801b03199060801b16179055565b903590601e198136030182121561051857018035906001600160401b0382116105185760200191813603831361051857565b356001600160a01b03811681036105185790565b1561066857565b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b156106c057565b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b1561071e57565b60405162461bcd60e51b815260206004820152603360248201527f53657373696f6e4b657956616c696461746f723a207065726d697373696f6e206044820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b6064820152608490fd5b3563ffffffff811681036105185790565b359065ffffffffffff8216820361051857565b602091828252610120820190803563ffffffff81168091036105185784840152808401356001600160a01b038116949085900361051857604094858501528482013563ffffffff60e01b811680910361051857606090818601528083013560808601526080830135601e1984360301811215610518578301918083359301966001600160401b03841161051857828402360388136105185792919082610100968760a08a01525261014087019793600080925b8584106108a3575050505050505061089c60e065ffffffffffff928361087e60a08301610790565b1660c08701528361089160c08301610790565b168287015201610790565b1691015290565b909192939495998a358152818b013560068110156108da57828201528a840135848201528501998501959493600101929190610856565b8380fd5b9092916001600160401b03841161056a578360051b604051926020809461090782850182610549565b809781520191810192831161051857905b8282106109255750505050565b81358152908301908301610918565b6101408101610943818361061b565b601411610518573560601c90600082815260019360209085825260408084203385528352808420936002850180548286528383205460801c1015610d0b578886019687548060601c8b8114600014610c8757506109a461012087018761061b565b905015610c34575b875415610c10575060608501926109c3848761061b565b6004939193116100b95782356001600160e01b031916635194544760e01b8103610b7057506109f2908761061b565b6055959195116100b9576055850135850190605582019560758101350197610a1a828261061b565b6024116104e357610a53929190610a4e9060106001600160a01b03610a416075890161064d565b1691013560601c14610661565b61061b565b6044939193116101085750610a9685610ae994610a82610acc9795602460b5610a9b97013591013511156106b9565b604481013501602460048201359101611388565b610717565b54610aa58461077f565b855188810192835260e09190911b6001600160e01b03191660208301529283906024830190565b0392610ae0601f1994858101835282610549565b51902083610ed8565b96549465ffffffffffff9687871680898b1610610b66575b50610b2f610b4393610b4897969593610b2393549651938491820195866107a3565b03908101835282610549565b5190209236906075605582013591016108de565b610d64565b15610b5f57610b5c945060301c1691610dbb565b90565b5050505090565b9850610b2f610b01565b94509450949650945050631a7e6adf60e19896981b14600014610c0657610b97818561061b565b6055116102d25790816055610baf930135019461061b565b605592919211610108575090816075610be19493013501916075605584013593019160756055830135920190876110f7565b919091610bff575065ffffffffffff610b5c935460301c1691610dbb565b9250505090565b5050505091505090565b98975050505050505050610b5c925065ffffffffffff808360301c16921690610dbb565b845162461bcd60e51b815260048101889052602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610c93575b506109ac565b610ca161012088018861061b565b6014116104e7573560601c03610cb75738610c8d565b845162461bcd60e51b815260048101889052602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b825162461bcd60e51b815260048101869052602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b919091805180610d75575b50501490565b91906020908180820191600595861b0101925b81518111851b90815282825191185281604060002091019383851015610daf579390610d88565b50925050503880610d6f565b919091600435610144810135016024356020526000907b19457468657265756d205369676e6564204d6573736167653a0a33328252603c6004206040908151608081018181106001600160401b03821117610eb15783526041815260208101933660798201116104e75785604160209486600195836038608097018b3784606182015281519981519386526060820151861a89525182520151606052145afa51923d15610ea457606052526001600160a01b03908116911603610e9d5760d09190911b6001600160d01b03191660a09190911b65ffffffffffff60a01b161790565b5050600190565b638baa579f90526004601cfd5b634e487b7160e01b86526041600452602486fd5b3565ffffffffffff811681036105185790565b9065ffffffffffff60a0830160c0840182610ef282610ec5565b16610ff15750610f0360e091610ec5565b935b019181610f1184610ec5565b16610f1d575b50505090565b60009081526002602052604081203382526020526040812090600183835460301c160190838211610fdd575081546bffffffffffff000000000000191660309190911b65ffffffffffff60301b16178155610f7f9082905460301c1692610ec5565b1610610f8d57388080610f17565b60405162461bcd60e51b815260206004820152602260248201527f53657373696f6e4b657956616c696461746f723a2072756e7320657863656564604482015261195960f21b6064820152608490fd5b634e487b7160e01b81526011600452602490fd5b939082610ffd82610ec5565b161561107957600084815260026020526040812033825260205260408120918483549781891692831515600014611060575061103890610ec5565b160190848211610fdd5750908360e0939216955b65ffffffffffff1916868516179055610f05565b91505060e0949392506110739150610ec5565b9561104c565b60405162461bcd60e51b815260206004820152602b60248201527f53657373696f6e4b657956616c696461746f723a20696e76616c69642065786560448201526a637574696f6e2072756c6560a81b6064820152608490fd5b60001981146110e15760010190565b634e487b7160e01b600052601160045260246000fd5b94959391909160009560018060a01b03166000526001968760205260406000203360005260205260406000209365ffffffffffff89860154169560005b6004808401358401013581101561134857600483013583013681900360821901600583901b909101602401351215610518578181101561132a5760fe19863603018160051b870135121561051857611217610a9661120860248460051b600488013588010101356004870135870101606460248201916111e56111b68461064d565b8d6111d2602060018060a01b03928c60051b810135010161064d565b6001600160a01b03909216911614610661565b61120160608d8960051b810135010135604483013511156106b9565b019061061b565b8460051b8a01358a0191611388565b61127e600288015461125f61126d6112368560051b8b01358b0161077f565b604080516020810195865260e09290921b6001600160e01b031916908201529182906044820190565b03601f198101835282610549565b5190208260051b8801358801610ed8565b65ffffffffffff891665ffffffffffff821611611340575b508381101561132a578060051b850135601e19863603018112156105185785018035906001600160401b03821161051857602001908060051b360382136105185761130a91610b438a54918a6040516112ff8161125f60208201948b60051b81013501856107a3565b5190209336916108de565b1561131d57611318906110d2565b611134565b5095989750505050505050565b634e487b7160e01b600052603260045260246000fd5b975038611296565b505050505050509250565b903590601e198136030182121561051857018035906001600160401b0382116105185760200191606082023603831361051857565b600490828211610518576040908185013563ffffffff60e01b80821680920361051857823516036115645760005b608086016113c48188611353565b9050821015611558576113d79087611353565b821015611543576060820201803580860180871161152e57602480830180921161151b57508710610518578301850135602082013560068110156105185780158061150e575b1561143057505050505050505050600090565b6001811480611501575b1561144d57505050505050505050600090565b60028114806114f4575b1561146a57505050505050505050600090565b60038114806114e8575b1561148757505050505050505050600090565b868114806114dc575b156114a357505050505050505050600090565b600586911492836114cf575b5050506114c4576114bf906110d2565b6113b6565b505050505050600090565b01351490503884816114af565b50858301358211611490565b50858301358210611474565b5085830135821015611457565b508583013582111561143a565b508583013582141561141d565b634e487b7160e01b600090815260118952fd5b601187634e487b7160e01b6000525260246000fd5b603285634e487b7160e01b6000525260246000fd5b50505050505050600190565b505050505060009056";
-
- function deploy() internal returns (address) {
- DeterministicDeploy.checkDeploy("SessionKey", EXPECTED_SESSIONKEY_ADDRESS, SESSIONKEY_CODE);
- return EXPECTED_SESSIONKEY_ADDRESS;
- }
-}
diff --git a/src/Kernel.sol b/src/Kernel.sol
index 55d5d658..cb84314f 100644
--- a/src/Kernel.sol
+++ b/src/Kernel.sol
@@ -1,201 +1,218 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
-// Importing external libraries and contracts
+import {PackedUserOperation} from "./interfaces/PackedUserOperation.sol";
+import {IAccount, ValidationData, ValidAfter, ValidUntil, parseValidationData} from "./interfaces/IAccount.sol";
+import {IEntryPoint} from "./interfaces/IEntryPoint.sol";
+import {IAccountExecute} from "./interfaces/IAccountExecute.sol";
+import {IERC7579Account} from "./interfaces/IERC7579Account.sol";
+import {ModuleLib} from "./utils/ModuleLib.sol";
+import {
+ ValidationManager,
+ ValidationMode,
+ ValidationId,
+ ValidatorLib,
+ ValidationType,
+ PermissionId,
+ PassFlag,
+ SKIP_SIGNATURE
+} from "./core/ValidationManager.sol";
+import {HookManager} from "./core/HookManager.sol";
+import {ExecutorManager} from "./core/ExecutorManager.sol";
+import {SelectorManager} from "./core/SelectorManager.sol";
+import {IModule, IValidator, IHook, IExecutor, IFallback, IPolicy, ISigner} from "./interfaces/IERC7579Modules.sol";
import {EIP712} from "solady/utils/EIP712.sol";
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {Compatibility} from "./abstract/Compatibility.sol";
-import {KernelStorage} from "./abstract/KernelStorage.sol";
-import {_intersectValidationData} from "./utils/KernelHelper.sol";
-import {IKernelValidator} from "./interfaces/IKernelValidator.sol";
-
+import {ExecLib, ExecMode, CallType, ExecType, ExecModeSelector, ExecModePayload} from "./utils/ExecLib.sol";
import {
- KERNEL_NAME,
- KERNEL_VERSION,
- VALIDATOR_APPROVED_STRUCT_HASH,
- KERNEL_STORAGE_SLOT_1,
- SIG_VALIDATION_FAILED
-} from "./common/Constants.sol";
-import {Operation} from "./common/Enums.sol";
-import {WalletKernelStorage, Call, ExecutionDetail} from "./common/Structs.sol";
-import {ValidationData, ValidAfter, ValidUntil, parseValidationData, packValidationData} from "./common/Types.sol";
-
-/// @title Kernel
-/// @author taek
-/// @notice wallet kernel for extensible wallet functionality
-contract Kernel is EIP712, Compatibility, KernelStorage {
- /// @dev Selector of the `DisabledMode()` error, to be used in assembly, 'bytes4(keccak256(bytes("DisabledMode()")))', same as DisabledMode.selector()
- uint256 private constant _DISABLED_MODE_SELECTOR = 0xfc2f51c5;
- bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
- 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f;
-
- /// @dev Current kernel name and version
- string public constant name = KERNEL_NAME;
- string public constant version = KERNEL_VERSION;
-
- /// @dev Sets up the EIP712 and KernelStorage with the provided entry point
- constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {}
-
- /// @notice Accepts incoming Ether transactions and calls from the EntryPoint contract
- /// @dev This function will delegate any call to the appropriate executor based on the function signature.
- fallback() external payable {
- bytes4 sig = msg.sig;
- address executor = getKernelStorage().execution[sig].executor;
- if (msg.sender != address(entryPoint) && !_checkCaller()) {
- revert NotAuthorizedCaller();
+ CALLTYPE_SINGLE,
+ CALLTYPE_DELEGATECALL,
+ ERC1967_IMPLEMENTATION_SLOT,
+ VALIDATION_TYPE_ROOT,
+ VALIDATION_TYPE_VALIDATOR,
+ VALIDATION_TYPE_PERMISSION,
+ MODULE_TYPE_VALIDATOR,
+ MODULE_TYPE_EXECUTOR,
+ MODULE_TYPE_FALLBACK,
+ MODULE_TYPE_HOOK,
+ MODULE_TYPE_POLICY,
+ MODULE_TYPE_SIGNER,
+ EXECTYPE_TRY,
+ EXECTYPE_DEFAULT,
+ EXEC_MODE_DEFAULT,
+ CALLTYPE_DELEGATECALL,
+ CALLTYPE_SINGLE,
+ CALLTYPE_BATCH,
+ CALLTYPE_STATIC
+} from "./types/Constants.sol";
+
+contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager {
+ error ExecutionReverted();
+ error InvalidExecutor();
+ error InvalidFallback();
+ error InvalidCallType();
+ error OnlyExecuteUserOp();
+ error InvalidModuleType();
+ error InvalidCaller();
+ error InvalidSelector();
+
+ event Received(address sender, uint256 amount);
+ event Upgraded(address indexed implementation);
+
+ IEntryPoint public immutable entrypoint;
+
+ // NOTE : when eip 1153 has been enabled, this can be transient storage
+ mapping(bytes32 userOpHash => IHook) internal executionHook;
+
+ constructor(IEntryPoint _entrypoint) {
+ entrypoint = _entrypoint;
+ _validationStorage().rootValidator = ValidationId.wrap(bytes21(abi.encodePacked(hex"deadbeef")));
+ }
+
+ modifier onlyEntryPoint() {
+ if (msg.sender != address(entrypoint)) {
+ revert InvalidCaller();
}
- assembly {
- calldatacopy(0, 0, calldatasize())
- let result := delegatecall(gas(), executor, 0, calldatasize(), 0, 0)
- returndatacopy(0, 0, returndatasize())
- switch result
- case 0 { revert(0, returndatasize()) }
- default { return(0, returndatasize()) }
+ _;
+ }
+
+ modifier onlyEntryPointOrSelf() {
+ if (msg.sender != address(entrypoint) && msg.sender != address(this)) {
+ revert InvalidCaller();
}
+ _;
}
- /// @notice Executes a function call to an external contract
- /// @param to The address of the target contract
- /// @param value The amount of Ether to send
- /// @param data The call data to be sent
- /// @dev operation is deprecated param, use executeBatch for batched transaction
- function execute(address to, uint256 value, bytes memory data, Operation _operation) external payable {
- if (msg.sender != address(entryPoint) && msg.sender != address(this) && !_checkCaller()) {
- revert NotAuthorizedCaller();
+ modifier onlyEntryPointOrSelfOrRoot() {
+ IValidator validator = ValidatorLib.getValidator(_validationStorage().rootValidator);
+ if (
+ msg.sender != address(entrypoint) && msg.sender != address(this) // do rootValidator hook
+ ) {
+ if (validator.isModuleType(4)) {
+ bytes memory ret = IHook(address(validator)).preCheck(msg.sender, msg.value, msg.data);
+ _;
+ IHook(address(validator)).postCheck(ret, true, hex""); // TODO don't support try catch hook here
+ } else {
+ revert InvalidCaller();
+ }
+ } else {
+ _;
}
- if (_operation != Operation.Call) {
- revert DeprecatedOperation();
+ }
+
+ function initialize(ValidationId _rootValidator, IHook hook, bytes calldata validatorData, bytes calldata hookData)
+ external
+ {
+ ValidationStorage storage vs = _validationStorage();
+ require(ValidationId.unwrap(vs.rootValidator) == bytes21(0), "already initialized");
+ if (ValidationId.unwrap(_rootValidator) == bytes21(0)) {
+ revert InvalidValidator();
}
- assembly {
- let success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)
- returndatacopy(0, 0, returndatasize())
- switch success
- case 0 { revert(0, returndatasize()) }
- default { return(0, returndatasize()) }
+ ValidationType vType = ValidatorLib.getType(_rootValidator);
+ if (vType != VALIDATION_TYPE_VALIDATOR && vType != VALIDATION_TYPE_PERMISSION) {
+ revert InvalidValidationType();
}
+ _setRootValidator(_rootValidator);
+ ValidationConfig memory config = ValidationConfig({nonce: uint32(1), hook: hook});
+ vs.currentNonce = 1;
+ _installValidation(_rootValidator, config, validatorData, hookData);
}
- /// @notice Executes a function call to an external contract with delegatecall
- /// @param to The address of the target contract
- /// @param data The call data to be sent
- function executeDelegateCall(address to, bytes memory data) external payable {
- if (msg.sender != address(entryPoint) && msg.sender != address(this) && !_checkCaller()) {
- revert NotAuthorizedCaller();
- }
+ function upgradeTo(address _newImplementation) external payable onlyEntryPointOrSelfOrRoot {
assembly {
- let success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0)
- returndatacopy(0, 0, returndatasize())
- switch success
- case 0 { revert(0, returndatasize()) }
- default { return(0, returndatasize()) }
+ sstore(ERC1967_IMPLEMENTATION_SLOT, _newImplementation)
}
+ emit Upgraded(_newImplementation);
}
- /// @notice Executes a function call to an external contract batched
- /// @param calls The calls to be executed, in order
- /// @dev operation deprecated param, use executeBatch for batched transaction
- function executeBatch(Call[] memory calls) external payable {
- if (msg.sender != address(entryPoint) && !_checkCaller()) {
- revert NotAuthorizedCaller();
+ function _domainNameAndVersion() internal pure override returns (string memory name, string memory version) {
+ name = "Kernel";
+ version = "0.3.0-beta";
+ }
+
+ receive() external payable {
+ emit Received(msg.sender, msg.value);
+ }
+
+ fallback() external payable {
+ SelectorConfig memory config = _selectorConfig(msg.sig);
+ bool success;
+ bytes memory result;
+ if (address(config.hook) == address(0)) {
+ revert InvalidSelector();
+ } else {
+ // action installed
+ bytes memory context;
+ if (address(config.hook) != address(1)) {
+ context = _doPreHook(config.hook, msg.value, msg.data);
+ }
+ // execute action
+ if (config.callType == CALLTYPE_SINGLE) {
+ (success, result) = ExecLib.doFallback2771Call(config.target);
+ } else if (config.callType == CALLTYPE_DELEGATECALL) {
+ (success, result) = ExecLib.executeDelegatecall(config.target, msg.data);
+ } else {
+ revert NotSupportedCallType();
+ }
+ if (address(config.hook) != address(1)) {
+ _doPostHook(config.hook, context, success, result);
+ }
}
- uint256 len = calls.length;
- for (uint256 i = 0; i < len;) {
- Call memory call = calls[i];
- address to = call.to;
- uint256 value = call.value;
- bytes memory data = call.data;
+ if (!success) {
assembly {
- let success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)
- switch success
- case 0 {
- returndatacopy(0, 0, returndatasize())
- revert(0, returndatasize())
- }
- default { i := add(i, 1) }
+ revert(add(result, 0x20), mload(result))
+ }
+ } else {
+ assembly {
+ return(add(result, 0x20), mload(result))
}
}
}
- /// @notice Validates a user operation based on its mode
- /// @dev This function will validate user operation and be called by EntryPoint
- /// @param _userOp The user operation to be validated
- /// @param userOpHash The hash of the user operation
- /// @param missingAccountFunds The funds needed to be reimbursed
- /// @return validationData The data used for validation
- function validateUserOp(UserOperation calldata _userOp, bytes32 userOpHash, uint256 missingAccountFunds)
+ // validation part
+ function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)
external
payable
- virtual
+ override
+ onlyEntryPoint
returns (ValidationData validationData)
{
- if (msg.sender != address(entryPoint)) {
- revert NotEntryPoint();
+ ValidationStorage storage vs = _validationStorage();
+ // ONLY ENTRYPOINT
+ // Major change for v2 => v3
+ // 1. instead of packing 4 bytes prefix to userOp.signature to determine the mode, v3 uses userOp.nonce's first 2 bytes to check the mode
+ // 2. instead of packing 20 bytes in userOp.signature for enable mode to provide the validator address, v3 uses userOp.nonce[2:22]
+ // 3. In v2, only 1 plugin validator(aside from root validator) can access the selector.
+ // In v3, you can use more than 1 plugin to use the exact selector, you need to specify the validator address in userOp.nonce[2:22] to use the validator
+
+ (ValidationMode vMode, ValidationType vType, ValidationId vId) = ValidatorLib.decodeNonce(userOp.nonce);
+ if (vType == VALIDATION_TYPE_ROOT) {
+ vId = vs.rootValidator;
}
- bytes calldata userOpSignature;
- uint256 userOpEndOffset;
- assembly {
- // Store the userOpSignature offset
- userOpEndOffset := add(calldataload(0x04), 0x24)
- // Extract the user op signature from the calldata (but keep it in the calldata, just extract offset & length)
- userOpSignature.offset := add(calldataload(add(userOpEndOffset, 0x120)), userOpEndOffset)
- userOpSignature.length := calldataload(sub(userOpSignature.offset, 0x20))
+ validationData = _doValidation(vMode, vId, userOp, userOpHash);
+ ValidationConfig memory vc = vs.validationConfig[vId];
+ // allow when nonce is not revoked or vType is sudo
+ if (vType != VALIDATION_TYPE_ROOT && vc.nonce < vs.validNonceFrom) {
+ revert InvalidNonce();
}
- // mode based signature
- bytes4 mode = bytes4(userOpSignature[0:4]); // mode == 00..00 use validators
- // mode == 0x00000000 use sudo validator
- if (mode == 0x00000000) {
- assembly {
- if missingAccountFunds {
- pop(call(gas(), caller(), missingAccountFunds, callvalue(), callvalue(), callvalue(), callvalue()))
- //ignore failure (its EntryPoint's job to verify, not account.)
- }
- }
- // short circuit here for default validator
- return _validateUserOp(_userOp, userOpHash, missingAccountFunds);
+ IHook execHook = vc.hook;
+ if (address(execHook) == address(0)) {
+ revert InvalidValidator();
}
+ executionHook[userOpHash] = execHook;
- // Check if the kernel is disabled, if that's the case, it's only accepting userOperation with sudo mode
- assembly ("memory-safe") {
- // Extract the disabled mode from the storage slot
- let isKernelDisabled := shl(224, sload(KERNEL_STORAGE_SLOT_1))
- // If we got a non-zero disabled mode, and non zero mode, then revert
- if and(isKernelDisabled, mode) {
- mstore(0x00, _DISABLED_MODE_SELECTOR)
- revert(0x1c, 0x04)
+ if (address(execHook) == address(1)) {
+ // does not require hook
+ if (vType != VALIDATION_TYPE_ROOT && !vs.allowedSelectors[vId][bytes4(userOp.callData[0:4])]) {
+ revert InvalidValidator();
}
- }
-
- // The validator that will be used
- IKernelValidator validator;
-
- // mode == 0x00000001 use given validator
- // mode == 0x00000002 enable validator
- if (mode == 0x00000001) {
- bytes calldata userOpCallData;
- assembly {
- userOpCallData.offset := add(calldataload(add(userOpEndOffset, 0x40)), userOpEndOffset)
- userOpCallData.length := calldataload(sub(userOpCallData.offset, 0x20))
+ } else {
+ // requires hook
+ if (vType != VALIDATION_TYPE_ROOT && !vs.allowedSelectors[vId][bytes4(userOp.callData[4:8])]) {
+ revert InvalidValidator();
}
- ExecutionDetail storage detail = getKernelStorage().execution[bytes4(userOpCallData[0:4])];
- validator = detail.validator;
- userOpSignature = userOpSignature[4:];
- validationData = packValidationData(detail.validAfter, detail.validUntil);
- } else if (mode == 0x00000002) {
- bytes calldata userOpCallData;
- assembly {
- userOpCallData.offset := add(calldataload(add(userOpEndOffset, 0x40)), userOpEndOffset)
- userOpCallData.length := calldataload(sub(userOpCallData.offset, 0x20))
+ if (bytes4(userOp.callData[0:4]) != this.executeUserOp.selector) {
+ revert OnlyExecuteUserOp();
}
- // use given validator
- // userOpSignature[4:10] = validAfter,
- // userOpSignature[10:16] = validUntil,
- // userOpSignature[16:36] = validator address,
- (validator, validationData, userOpSignature) =
- _approveValidator(bytes4(userOpCallData[0:4]), userOpSignature);
- } else {
- return SIG_VALIDATION_FAILED;
}
assembly {
@@ -204,202 +221,273 @@ contract Kernel is EIP712, Compatibility, KernelStorage {
//ignore failure (its EntryPoint's job to verify, not account.)
}
}
+ }
- // Replicate the userOp from memory to calldata, to update it's signature (since with mode 1 & 2 the signatre can be updated)
- UserOperation memory userOp = _userOp;
- userOp.signature = userOpSignature;
+ // --- Execution ---
+ function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash)
+ external
+ payable
+ override
+ onlyEntryPoint
+ {
+ bytes memory context;
+ IHook hook = executionHook[userOpHash];
+ if (address(hook) != address(1)) {
+ // removed 4bytes selector
+ context = _doPreHook(hook, msg.value, userOp.callData[4:]);
+ }
+ (bool success, bytes memory ret) = ExecLib.executeDelegatecall(address(this), userOp.callData[4:]);
+ if (address(hook) != address(1)) {
+ _doPostHook(hook, context, success, ret);
+ } else if (!success) {
+ revert ExecutionReverted();
+ }
+ }
- // Get the validator data from the designated signer
- validationData =
- _intersectValidationData(validationData, validator.validateUserOp(userOp, userOpHash, missingAccountFunds));
- return validationData;
+ function executeFromExecutor(ExecMode execMode, bytes calldata executionCalldata)
+ external
+ payable
+ returns (bytes[] memory returnData)
+ {
+ // no modifier needed, checking if msg.sender is registered executor will replace the modifier
+ IHook hook = _executorConfig(IExecutor(msg.sender)).hook;
+ if (address(hook) == address(0)) {
+ revert InvalidExecutor();
+ }
+ bytes memory context;
+ if (address(hook) != address(1)) {
+ context = _doPreHook(hook, msg.value, msg.data);
+ }
+ returnData = ExecLib.execute(execMode, executionCalldata);
+ if (address(hook) != address(1)) {
+ _doPostHook(hook, context, true, abi.encode(returnData));
+ }
}
- /// @dev This function will approve a new validator for the current kernel
- /// @param sig The signature of the userOp asking for a validator approval
- /// @param signature The signature of the userOp asking for a validator approval
- function _approveValidator(bytes4 sig, bytes calldata signature)
- internal
- returns (IKernelValidator validator, ValidationData validationData, bytes calldata validationSig)
+ function execute(ExecMode execMode, bytes calldata executionCalldata) external payable onlyEntryPointOrSelfOrRoot {
+ ExecLib.execute(execMode, executionCalldata);
+ }
+
+ function isValidSignature(bytes32 hash, bytes calldata signature) external view override returns (bytes4) {
+ ValidationStorage storage vs = _validationStorage();
+ (ValidationId vId, bytes calldata sig) = ValidatorLib.decodeSignature(signature);
+ if (ValidatorLib.getType(vId) == VALIDATION_TYPE_ROOT) {
+ vId = vs.rootValidator;
+ }
+ if (address(vs.validationConfig[vId].hook) == address(0)) {
+ revert InvalidValidator();
+ }
+ if (ValidatorLib.getType(vId) == VALIDATION_TYPE_VALIDATOR) {
+ IValidator validator = ValidatorLib.getValidator(vId);
+ return validator.isValidSignatureWithSender(msg.sender, _toWrappedHash(hash), sig);
+ } else {
+ PermissionId pId = ValidatorLib.getPermissionId(vId);
+ PassFlag permissionFlag = vs.permissionConfig[pId].permissionFlag;
+ if (PassFlag.unwrap(permissionFlag) & PassFlag.unwrap(SKIP_SIGNATURE) != 0) {
+ revert PermissionNotAlllowedForSignature();
+ }
+ return _checkPermissionSignature(pId, msg.sender, hash, sig);
+ }
+ }
+
+ function installModule(uint256 moduleType, address module, bytes calldata initData)
+ external
+ payable
+ override
+ onlyEntryPointOrSelfOrRoot
{
- unchecked {
- validator = IKernelValidator(address(bytes20(signature[16:36])));
- uint256 cursor = 88;
- uint256 length = uint256(bytes32(signature[56:88])); // this is enableDataLength
- bytes calldata enableData;
+ if (moduleType == MODULE_TYPE_VALIDATOR) {
+ ValidationStorage storage vs = _validationStorage();
+ ValidationId vId = ValidatorLib.validatorToIdentifier(IValidator(module));
+ ValidationConfig memory config =
+ ValidationConfig({nonce: vs.currentNonce, hook: IHook(address(bytes20(initData[0:20])))});
+ bytes calldata validatorData;
+ bytes calldata hookData;
assembly {
- enableData.offset := add(signature.offset, cursor)
- enableData.length := length
- cursor := add(cursor, length) // 88 + enableDataLength
+ validatorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 20)))
+ validatorData.length := calldataload(sub(validatorData.offset, 32))
+ hookData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 52)))
+ hookData.length := calldataload(sub(hookData.offset, 32))
}
- length = uint256(bytes32(signature[cursor:cursor + 32])); // this is enableSigLength
+ _installValidation(vId, config, validatorData, hookData);
+ //_installHook(config.hook, hookData); hook install is handled inside installvalidation
+ } else if (moduleType == MODULE_TYPE_EXECUTOR) {
+ bytes calldata executorData;
+ bytes calldata hookData;
assembly {
- cursor := add(cursor, 32)
+ executorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 20)))
+ executorData.length := calldataload(sub(executorData.offset, 32))
+ hookData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 52)))
+ hookData.length := calldataload(sub(hookData.offset, 32))
}
- bytes32 enableDigest = _hashTypedData(
- keccak256(
- abi.encode(
- VALIDATOR_APPROVED_STRUCT_HASH,
- bytes4(sig),
- uint256(bytes32(signature[4:36])),
- address(bytes20(signature[36:56])),
- keccak256(enableData)
- )
- )
- );
- validationData = _intersectValidationData(
- _validateSignature(address(this), enableDigest, enableDigest, signature[cursor:cursor + length]),
- ValidationData.wrap(
- uint256(bytes32(signature[4:36]))
- & 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
- )
- );
+ IHook hook = IHook(address(bytes20(initData[0:20])));
+ _installExecutor(IExecutor(module), executorData, hook);
+ _installHook(hook, hookData);
+ } else if (moduleType == MODULE_TYPE_FALLBACK) {
+ bytes calldata selectorData;
+ bytes calldata hookData;
assembly {
- cursor := add(cursor, length)
- validationSig.offset := add(signature.offset, cursor)
- validationSig.length := sub(signature.length, cursor)
+ selectorData.offset := add(add(initData.offset, 56), calldataload(add(initData.offset, 24)))
+ selectorData.length := calldataload(sub(selectorData.offset, 32))
+ hookData.offset := add(add(initData.offset, 56), calldataload(add(initData.offset, 56)))
+ hookData.length := calldataload(sub(hookData.offset, 32))
}
- getKernelStorage().execution[sig] = ExecutionDetail({
- validAfter: ValidAfter.wrap(uint48(bytes6(signature[4:10]))),
- validUntil: ValidUntil.wrap(uint48(bytes6(signature[10:16]))),
- executor: address(bytes20(signature[36:56])),
- validator: IKernelValidator(address(bytes20(signature[16:36])))
- });
- validator.enable(enableData);
+ _installSelector(bytes4(initData[0:4]), module, IHook(address(bytes20(initData[4:24]))), selectorData);
+ _installHook(IHook(address(bytes20(initData[4:24]))), hookData);
+ } else if (moduleType == MODULE_TYPE_HOOK) {
+ // force call onInstall for hook
+ // NOTE: for hook, kernel does not support independant hook install,
+ // hook is expected to be paired with proper validator/executor/selector
+ IHook(module).onInstall(initData);
+ } else if (moduleType == MODULE_TYPE_POLICY) {
+ // force call onInstall for policy
+ // NOTE: for policy, kernel does not support independant policy install,
+ // policy is expected to be paired with proper permissionId
+ // to "ADD" permission, use "installValidations()" function
+ IPolicy(module).onInstall(initData);
+ } else if (moduleType == MODULE_TYPE_SIGNER) {
+ // force call onInstall for signer
+ // NOTE: for signer, kernel does not support independant signer install,
+ // signer is expected to be paired with proper permissionId
+ // to "ADD" permission, use "installValidations()" function
+ ISigner(module).onInstall(initData);
+ } else {
+ revert InvalidModuleType();
}
}
- /// @dev Validates a signature for the given kernel
- /// @param hash The hash of the data that was signed
- /// @param signature The signature to be validated
- function validateSignature(bytes32 hash, bytes calldata signature) public view returns (ValidationData) {
- return _validateSignature(msg.sender, hash, hash, signature);
+ function installValidations(
+ ValidationId[] calldata vIds,
+ ValidationConfig[] memory configs,
+ bytes[] calldata validationData,
+ bytes[] calldata hookData
+ ) external payable onlyEntryPointOrSelfOrRoot {
+ _installValidations(vIds, configs, validationData, hookData);
}
- /// @dev Get the current name & version of the kernel, used for the EIP-712 domain separator
- function _domainNameAndVersion() internal pure override returns (string memory, string memory) {
- return (name, version);
+ function uninstallValidation(ValidationId vId, bytes calldata deinitData, bytes calldata hookDeinitData)
+ external
+ payable
+ onlyEntryPointOrSelfOrRoot
+ {
+ IHook hook = _uninstallValidation(vId, deinitData);
+ _uninstallHook(hook, hookDeinitData);
}
- /// @dev Get an EIP-712 compliant domain separator
- function _domainSeparator() internal view override returns (bytes32) {
- // Obtain the name and version from the _domainNameAndVersion function.
- (string memory _name, string memory _version) = _domainNameAndVersion();
- bytes32 nameHash = keccak256(bytes(_name));
- bytes32 versionHash = keccak256(bytes(_version));
-
- // Use the proxy address for the EIP-712 domain separator.
- address proxyAddress = address(this);
-
- // Construct the domain separator with name, version, chainId, and proxy address.
- bytes32 typeHash = EIP712_DOMAIN_TYPEHASH;
- return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, proxyAddress));
+ function invalidateNonce(uint32 nonce) external payable onlyEntryPointOrSelfOrRoot {
+ _invalidateNonce(nonce);
}
- /// @notice Checks if a signature is valid
- /// @dev This function checks if a signature is valid based on the hash of the data signed.
- /// @param hash The hash of the data that was signed
- /// @param signature The signature to be validated
- /// @return The magic value 0x1626ba7e if the signature is valid, otherwise returns 0xffffffff.
- function isValidSignature(bytes32 hash, bytes calldata signature) public view returns (bytes4) {
- // Include the proxy address in the domain separator
- bytes32 domainSeparator = _domainSeparator();
-
- // Recreate the signed message hash with the correct domain separator
- bytes32 signedMessageHash = keccak256(abi.encodePacked("\x19\x01", domainSeparator, hash));
-
- ValidationData validationData = _validateSignature(msg.sender, signedMessageHash, hash, signature);
- (ValidAfter validAfter, ValidUntil validUntil, address result) = parseValidationData(validationData);
-
- // Check if the signature is valid within the specified time frame and the result is successful
- if (
- ValidAfter.unwrap(validAfter) <= block.timestamp && ValidUntil.unwrap(validUntil) >= block.timestamp
- && result == address(0)
- ) {
- // If all checks pass, return the ERC1271 magic value for a valid signature
- return 0x1626ba7e;
+ function uninstallModule(uint256 moduleType, address module, bytes calldata deInitData)
+ external
+ payable
+ override
+ onlyEntryPointOrSelfOrRoot
+ {
+ if (moduleType == 1) {
+ ValidationId vId = ValidatorLib.validatorToIdentifier(IValidator(module));
+ _uninstallValidation(vId, deInitData);
+ } else if (moduleType == 2) {
+ _uninstallExecutor(IExecutor(module), deInitData);
+ } else if (moduleType == 3) {
+ bytes4 selector = bytes4(deInitData[0:4]);
+ _uninstallSelector(selector, deInitData[4:]);
+ } else if (moduleType == 4) {
+ ValidationId vId = _validationStorage().rootValidator;
+ if (_validationStorage().validationConfig[vId].hook == IHook(module)) {
+ // when root validator hook is being removed
+ // remove hook on root validator to prevent kernel from being locked
+ _validationStorage().validationConfig[vId].hook = IHook(address(1));
+ }
+ // force call onInstall for hook
+ // NOTE: for hook, kernel does not support independant hook install,
+ // hook is expected to be paired with proper validator/executor/selector
+ ModuleLib.uninstallModule(module, deInitData);
+ } else if (moduleType == 5) {
+ ValidationId rootValidator = _validationStorage().rootValidator;
+ bytes32 permissionId = bytes32(deInitData[0:32]);
+ if (ValidatorLib.getType(rootValidator) == VALIDATION_TYPE_PERMISSION) {
+ if (permissionId == bytes32(PermissionId.unwrap(ValidatorLib.getPermissionId(rootValidator)))) {
+ revert RootValidatorCannotBeRemoved();
+ }
+ }
+ // force call onInstall for policy
+ // NOTE: for policy, kernel does not support independant policy install,
+ // policy is expected to be paired with proper permissionId
+ // to "REMOVE" permission, use "uninstallValidation()" function
+ ModuleLib.uninstallModule(module, deInitData);
+ } else if (moduleType == 6) {
+ ValidationId rootValidator = _validationStorage().rootValidator;
+ bytes32 permissionId = bytes32(deInitData[0:32]);
+ if (ValidatorLib.getType(rootValidator) == VALIDATION_TYPE_PERMISSION) {
+ if (permissionId == bytes32(PermissionId.unwrap(ValidatorLib.getPermissionId(rootValidator)))) {
+ revert RootValidatorCannotBeRemoved();
+ }
+ }
+ // force call onInstall for signer
+ // NOTE: for signer, kernel does not support independant signer install,
+ // signer is expected to be paired with proper permissionId
+ // to "REMOVE" permission, use "uninstallValidation()" function
+ ModuleLib.uninstallModule(module, deInitData);
} else {
- // If any check fails, return the failure magic value
- return 0xffffffff;
+ revert InvalidModuleType();
}
}
- /// @dev Check if the current caller is authorized or no to perform the call
- /// @return True if the caller is authorized, otherwise false
- function _checkCaller() internal returns (bool) {
- if (_validCaller(msg.sender, msg.data)) {
+ function supportsModule(uint256 moduleTypeId) external pure override returns (bool) {
+ if (moduleTypeId < 7) {
return true;
- }
- bytes4 sig = msg.sig;
- ExecutionDetail storage detail = getKernelStorage().execution[sig];
- if (
- address(detail.validator) == address(0)
- || (ValidUntil.unwrap(detail.validUntil) != 0 && ValidUntil.unwrap(detail.validUntil) < block.timestamp)
- || ValidAfter.unwrap(detail.validAfter) > block.timestamp
- ) {
- return false;
} else {
- return detail.validator.validCaller(msg.sender, msg.data);
+ return false;
}
}
- /// @dev This function will validate user operation and be called by EntryPoint
- /// @param _op The user operation to be validated
- /// @param _opHash The hash of the user operation
- /// @param _missingFunds The funds needed to be reimbursed
- function _validateUserOp(UserOperation calldata _op, bytes32 _opHash, uint256 _missingFunds)
- internal
- virtual
- returns (ValidationData)
+ function isModuleInstalled(uint256 moduleType, address module, bytes calldata additionalContext)
+ external
+ view
+ override
+ returns (bool)
{
- // Replace the user op in memory to update the signature
- UserOperation memory op = _op;
- // Remove the validation mode flag from the signature
- op.signature = _op.signature[4:];
-
- IKernelValidator validator;
- assembly {
- validator := shr(80, sload(KERNEL_STORAGE_SLOT_1))
+ if (moduleType == MODULE_TYPE_VALIDATOR) {
+ return _validationStorage().validationConfig[ValidatorLib.validatorToIdentifier(IValidator(module))].hook
+ != IHook(address(0));
+ } else if (moduleType == MODULE_TYPE_EXECUTOR) {
+ return address(_executorConfig(IExecutor(module)).hook) != address(0);
+ } else if (moduleType == MODULE_TYPE_FALLBACK) {
+ return _selectorConfig(bytes4(additionalContext[0:4])).target == module;
+ } else {
+ return false;
}
- return IKernelValidator(validator).validateUserOp(op, _opHash, _missingFunds);
}
- /// @dev This function will validate a signature for the given kernel
- /// @param _hash The hash of the data that was signed
- /// @param _signature The signature to be validated
- /// @return The magic value 0x1626ba7e if the signature is valid, otherwise returns 0xffffffff.
- function _validateSignature(address _requestor, bytes32 _hash, bytes32 _rawHash, bytes calldata _signature)
- internal
- view
- virtual
- returns (ValidationData)
- {
- address validator;
- assembly {
- validator := shr(80, sload(KERNEL_STORAGE_SLOT_1))
- }
- // 20 bytes added at the end of the signature to store the address of the caller
- (bool success, bytes memory res) = validator.staticcall(
- abi.encodePacked(
- abi.encodeWithSelector(IKernelValidator.validateSignature.selector, _hash, _signature),
- _rawHash,
- _requestor
- )
- );
- require(success, "Kernel::_validateSignature: failed to validate signature");
- return abi.decode(res, (ValidationData));
+ function accountId() external pure override returns (string memory accountImplementationId) {
+ return "kernel.advanced.v0.3.0-beta";
}
- /// @dev Check if the given caller is valid for the given data
- /// @param _caller The caller to be checked
- /// @param _data The data to be checked
- /// @return True if the caller is valid, otherwise false
- function _validCaller(address _caller, bytes calldata _data) internal virtual returns (bool) {
- address validator;
- assembly {
- // Load the validator from the storage slot
- validator := shr(80, sload(KERNEL_STORAGE_SLOT_1))
+ function supportsExecutionMode(ExecMode mode) external pure override returns (bool) {
+ (CallType callType, ExecType execType, ExecModeSelector selector, ExecModePayload payload) =
+ ExecLib.decode(mode);
+ if (
+ callType != CALLTYPE_BATCH && callType != CALLTYPE_SINGLE && callType != CALLTYPE_DELEGATECALL
+ && callType != CALLTYPE_STATIC
+ ) {
+ return false;
+ }
+
+ if (
+ ExecType.unwrap(execType) != ExecType.unwrap(EXECTYPE_TRY)
+ && ExecType.unwrap(execType) != ExecType.unwrap(EXECTYPE_DEFAULT)
+ ) {
+ return false;
+ }
+
+ if (ExecModeSelector.unwrap(selector) != ExecModeSelector.unwrap(EXEC_MODE_DEFAULT)) {
+ return false;
+ }
+
+ if (ExecModePayload.unwrap(payload) != bytes22(0)) {
+ return false;
}
- return IKernelValidator(validator).validCaller(_caller, _data);
+ return true;
}
}
diff --git a/src/abstract/Compatibility.sol b/src/abstract/Compatibility.sol
deleted file mode 100644
index 0361d99c..00000000
--- a/src/abstract/Compatibility.sol
+++ /dev/null
@@ -1,26 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-abstract contract Compatibility {
- event Received(address sender, uint256 amount);
-
- receive() external payable {
- emit Received(msg.sender, msg.value);
- }
-
- function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {
- return this.onERC721Received.selector;
- }
-
- function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) {
- return this.onERC1155Received.selector;
- }
-
- function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata)
- external
- pure
- returns (bytes4)
- {
- return this.onERC1155BatchReceived.selector;
- }
-}
diff --git a/src/abstract/KernelStorage.sol b/src/abstract/KernelStorage.sol
deleted file mode 100644
index fb968ebf..00000000
--- a/src/abstract/KernelStorage.sol
+++ /dev/null
@@ -1,130 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-// Importing necessary interfaces
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {IKernel} from "../interfaces/IKernel.sol";
-import {KERNEL_STORAGE_SLOT, KERNEL_STORAGE_SLOT_1, IMPLEMENTATION_SLOT} from "../common/Constants.sol";
-import {ExecutionDetail, WalletKernelStorage} from "../common/Structs.sol";
-import {ValidUntil, ValidAfter} from "../common/Types.sol";
-
-/// @title Kernel Storage Contract
-/// @author taek
-/// @notice This contract serves as the storage module for the Kernel contract.
-/// @dev This contract should only be used by the main Kernel contract.
-abstract contract KernelStorage is IKernel {
- IEntryPoint public immutable entryPoint; // The entry point of the contract
-
- // Modifier to check if the function is called by the entry point, the contract itself or the owner
- modifier onlyFromEntryPointOrSelf() {
- if (msg.sender != address(entryPoint) && msg.sender != address(this)) {
- revert NotAuthorizedCaller();
- }
- _;
- }
-
- /// @param _entryPoint The address of the EntryPoint contract
- /// @dev Sets up the EntryPoint contract address
- constructor(IEntryPoint _entryPoint) {
- entryPoint = _entryPoint;
- getKernelStorage().defaultValidator = IKernelValidator(address(1));
- }
-
- // Function to initialize the wallet kernel
- function initialize(IKernelValidator _defaultValidator, bytes calldata _data) external payable override {
- _setInitialData(_defaultValidator, _data);
- }
-
- // Function to get the wallet kernel storage
- function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {
- assembly {
- ws.slot := KERNEL_STORAGE_SLOT
- }
- }
-
- // Function to upgrade the contract to a new implementation
- function upgradeTo(address _newImplementation) external payable override onlyFromEntryPointOrSelf {
- assembly {
- sstore(IMPLEMENTATION_SLOT, _newImplementation)
- }
- emit Upgraded(_newImplementation);
- }
-
- // Functions to get the nonce from the entry point
- function getNonce() external view virtual returns (uint256) {
- return entryPoint.getNonce(address(this), 0);
- }
-
- function getNonce(uint192 key) external view virtual returns (uint256) {
- return entryPoint.getNonce(address(this), key);
- }
-
- // query storage
- function getDefaultValidator() external view override returns (IKernelValidator validator) {
- assembly {
- validator := shr(80, sload(KERNEL_STORAGE_SLOT_1))
- }
- }
-
- function getDisabledMode() external view override returns (bytes4 disabled) {
- assembly {
- disabled := shl(224, sload(KERNEL_STORAGE_SLOT_1))
- }
- }
-
- function getLastDisabledTime() external view override returns (uint48) {
- return getKernelStorage().lastDisabledTime;
- }
-
- function getExecution(bytes4 _selector) external view override returns (ExecutionDetail memory) {
- return getKernelStorage().execution[_selector];
- }
-
- function setExecution(
- bytes4 _selector,
- address _executor,
- IKernelValidator _validator,
- ValidUntil _validUntil,
- ValidAfter _validAfter,
- bytes calldata _enableData
- ) external payable override onlyFromEntryPointOrSelf {
- getKernelStorage().execution[_selector] = ExecutionDetail({
- executor: _executor,
- validator: _validator,
- validUntil: _validUntil,
- validAfter: _validAfter
- });
- _validator.enable(_enableData);
- emit ExecutionChanged(_selector, _executor, address(_validator));
- }
-
- function setDefaultValidator(IKernelValidator _defaultValidator, bytes calldata _data)
- external
- payable
- virtual
- onlyFromEntryPointOrSelf
- {
- IKernelValidator oldValidator = getKernelStorage().defaultValidator;
- getKernelStorage().defaultValidator = _defaultValidator;
- emit DefaultValidatorChanged(address(oldValidator), address(_defaultValidator));
- _defaultValidator.enable(_data);
- }
-
- function disableMode(bytes4 _disableFlag) external payable override onlyFromEntryPointOrSelf {
- getKernelStorage().disabledMode = _disableFlag;
- getKernelStorage().lastDisabledTime = uint48(block.timestamp);
- }
-
- function _setInitialData(IKernelValidator _defaultValidator, bytes calldata _data) internal virtual {
- address validator;
- assembly {
- validator := shr(80, sload(KERNEL_STORAGE_SLOT_1))
- }
- if (address(validator) != address(0)) {
- revert AlreadyInitialized();
- }
- getKernelStorage().defaultValidator = _defaultValidator;
- _defaultValidator.enable(_data);
- }
-}
diff --git a/src/common/Constants.sol b/src/common/Constants.sol
deleted file mode 100644
index a8de9076..00000000
--- a/src/common/Constants.sol
+++ /dev/null
@@ -1,27 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {ValidationData} from "./Types.sol";
-
-// Constants for kernel metadata
-string constant KERNEL_NAME = "Kernel";
-string constant KERNEL_VERSION = "0.2.4";
-
-// ERC4337 constants
-uint256 constant SIG_VALIDATION_FAILED_UINT = 1;
-ValidationData constant SIG_VALIDATION_FAILED = ValidationData.wrap(SIG_VALIDATION_FAILED_UINT);
-
-// STRUCT_HASH
-
-/// @dev Struct hash for the ValidatorApproved struct -> keccak256("ValidatorApproved(bytes4 sig,uint256 validatorData,address executor,bytes enableData)")
-bytes32 constant VALIDATOR_APPROVED_STRUCT_HASH = 0x3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee964176;
-
-/* -------------------------------------------------------------------------- */
-/* Storage slots */
-/* -------------------------------------------------------------------------- */
-
-/// @dev Storage slot for the kernel storage
-bytes32 constant KERNEL_STORAGE_SLOT = 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd8;
-/// @dev Storage pointer inside the kernel storage, with 1 offset, to access directly disblaedMode, disabled date and default validator
-bytes32 constant KERNEL_STORAGE_SLOT_1 = 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9;
-/// @dev Storage slot for the logic implementation address
-bytes32 constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
diff --git a/src/common/Enums.sol b/src/common/Enums.sol
deleted file mode 100644
index 4a3668aa..00000000
--- a/src/common/Enums.sol
+++ /dev/null
@@ -1,15 +0,0 @@
-pragma solidity ^0.8.0;
-
-enum Operation {
- Call,
- DelegateCall
-}
-
-enum ParamCondition {
- EQUAL,
- GREATER_THAN,
- LESS_THAN,
- GREATER_THAN_OR_EQUAL,
- LESS_THAN_OR_EQUAL,
- NOT_EQUAL
-}
diff --git a/src/common/Structs.sol b/src/common/Structs.sol
deleted file mode 100644
index ab957155..00000000
--- a/src/common/Structs.sol
+++ /dev/null
@@ -1,69 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {ParamCondition, Operation} from "./Enums.sol";
-import {ValidAfter, ValidUntil} from "./Types.sol";
-
-// Defining a struct for execution details
-struct ExecutionDetail {
- ValidAfter validAfter; // Until what time is this execution valid
- ValidUntil validUntil; // After what time is this execution valid
- address executor; // Who is the executor of this execution
- IKernelValidator validator; // The validator for this execution
-}
-
-struct Call {
- address to;
- uint256 value;
- bytes data;
-}
-
-// Defining a struct for wallet kernel storage
-struct WalletKernelStorage {
- bytes32 __deprecated; // A deprecated field
- bytes4 disabledMode; // Mode which is currently disabled
- uint48 lastDisabledTime; // Last time when a mode was disabled
- IKernelValidator defaultValidator; // Default validator for the wallet
- mapping(bytes4 => ExecutionDetail) execution; // Mapping of function selectors to execution details
-}
-
-// Param Rule for session key
-struct Nonces {
- uint128 lastNonce;
- uint128 invalidNonce;
-}
-
-struct ParamRule {
- uint256 offset;
- ParamCondition condition;
- bytes32 param;
-}
-
-struct ExecutionRule {
- ValidAfter validAfter; // 48 bits
- uint48 interval; // 48 bits
- uint48 runs; // 48 bits
-}
-
-struct ExecutionStatus {
- ValidAfter validAfter; // 48 bits
- uint48 runs; // 48 bits
-}
-
-struct Permission {
- uint32 index;
- address target;
- bytes4 sig;
- uint256 valueLimit;
- ParamRule[] rules;
- ExecutionRule executionRule;
- Operation operation;
-}
-
-struct SessionData {
- bytes32 merkleRoot;
- ValidAfter validAfter;
- ValidUntil validUntil;
- address paymaster; // address(0) means accept userOp without paymaster, address(1) means reject userOp with paymaster, other address means accept userOp with paymaster with the address
- uint256 nonce;
-}
diff --git a/src/common/Types.sol b/src/common/Types.sol
deleted file mode 100644
index 81ef36f4..00000000
--- a/src/common/Types.sol
+++ /dev/null
@@ -1,36 +0,0 @@
-pragma solidity ^0.8.9;
-
-type ValidAfter is uint48;
-
-type ValidUntil is uint48;
-
-type ValidationData is uint256;
-
-function packValidationData(ValidAfter validAfter, ValidUntil validUntil) pure returns (ValidationData) {
- return ValidationData.wrap(
- uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160
- );
-}
-
-function packValidationData(address aggregator, ValidAfter validAfter, ValidUntil validUntil)
- pure
- returns (ValidationData)
-{
- return ValidationData.wrap(
- uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160
- | uint160(aggregator)
- );
-}
-
-function parseValidationData(ValidationData validationData)
- pure
- returns (ValidAfter validAfter, ValidUntil validUntil, address result)
-{
- assembly {
- result := validationData
- validUntil := and(shr(160, validationData), 0xffffffffffff)
- switch iszero(validUntil)
- case 1 { validUntil := 0xffffffffffff }
- validAfter := shr(208, validationData)
- }
-}
diff --git a/src/core/ExecutorManager.sol b/src/core/ExecutorManager.sol
new file mode 100644
index 00000000..074ec723
--- /dev/null
+++ b/src/core/ExecutorManager.sol
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {IHook, IExecutor} from "../interfaces/IERC7579Modules.sol";
+import {ModuleLib} from "../utils/ModuleLib.sol";
+import {EXECUTOR_MANAGER_STORAGE_SLOT} from "../types/Constants.sol";
+
+abstract contract ExecutorManager {
+ struct ExecutorConfig {
+ IHook hook; // address(1) : hook not required, address(0) : validator not installed
+ }
+
+ struct ExecutorStorage {
+ mapping(IExecutor => ExecutorConfig) executorConfig;
+ }
+
+ function executorConfig(IExecutor executor) external view returns (ExecutorConfig memory) {
+ return _executorConfig(executor);
+ }
+
+ function _executorConfig(IExecutor executor) internal view returns (ExecutorConfig storage config) {
+ ExecutorStorage storage es;
+ bytes32 slot = EXECUTOR_MANAGER_STORAGE_SLOT;
+ assembly {
+ es.slot := slot
+ }
+ config = es.executorConfig[executor];
+ }
+
+ function _installExecutor(IExecutor executor, bytes calldata executorData, IHook hook) internal {
+ if (address(hook) == address(0)) {
+ hook = IHook(address(1));
+ }
+ ExecutorConfig storage config = _executorConfig(executor);
+ config.hook = hook;
+ executor.onInstall(executorData);
+ }
+
+ function _installExecutorWithoutInit(IExecutor executor, IHook hook) internal {
+ if (address(hook) == address(0)) {
+ hook = IHook(address(1));
+ }
+ ExecutorConfig storage config = _executorConfig(executor);
+ config.hook = hook;
+ }
+
+ function _uninstallExecutor(IExecutor executor, bytes calldata executorData) internal returns (IHook hook) {
+ ExecutorConfig storage config = _executorConfig(executor);
+ hook = config.hook;
+ config.hook = IHook(address(0));
+ ModuleLib.uninstallModule(address(executor), executorData);
+ }
+}
diff --git a/src/core/HookManager.sol b/src/core/HookManager.sol
new file mode 100644
index 00000000..f622f515
--- /dev/null
+++ b/src/core/HookManager.sol
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {IHook} from "../interfaces/IERC7579Modules.sol";
+import {ModuleLib} from "../utils/ModuleLib.sol";
+
+abstract contract HookManager {
+ // NOTE: currently, all install/uninstall calls onInstall/onUninstall
+ // I assume this does not pose any security risks, but there should be a way to branch if hook needs call to onInstall/onUninstall
+ // --- Hook ---
+ // Hook is activated on these scenarios
+ // - on 4337 flow, userOp.calldata starts with executeUserOp.selector && validator requires hook
+ // - executeFromExecutor() is invoked and executor requires hook
+ // - when fallback function has been invoked and fallback requires hook => native functions will not invoke hook
+ function _doPreHook(IHook hook, uint256 value, bytes calldata callData) internal returns (bytes memory context) {
+ context = hook.preCheck(msg.sender, value, callData);
+ }
+
+ function _doPostHook(IHook hook, bytes memory context, bool success, bytes memory result) internal {
+ // bool success,
+ // bytes memory result
+ hook.postCheck(context, success, result);
+ }
+
+ // @notice if hook is not initialized before, kernel will call hook.onInstall no matter what flag it shows, with hookData[1:]
+ // @param hookData is encoded into (1bytes flag + actual hookdata) flag is for identifying if the hook has to be initialized or not
+ function _installHook(IHook hook, bytes calldata hookData) internal {
+ if (address(hook) == address(0) || address(hook) == address(1)) {
+ return;
+ }
+ if (!hook.isInitialized(address(this))) {
+ // if hook is not installed, it should call onInstall
+ hook.onInstall(hookData[1:]);
+ return;
+ }
+ if (bytes1(hookData[0]) == bytes1(0xff)) {
+ // 0xff means you want to explicitly call install hook
+ hook.onInstall(hookData[1:]);
+ }
+ }
+
+ // @param hookData encoded as (1bytes flag + actual hookdata) flag is for identifying if the hook has to be initialized or not
+ function _uninstallHook(IHook hook, bytes calldata hookData) internal {
+ if (address(hook) == address(0) || address(hook) == address(1)) {
+ return;
+ }
+ if (bytes1(hookData[0]) == bytes1(0xff)) {
+ // 0xff means you want to call uninstall hook
+ ModuleLib.uninstallModule(address(hook), hookData[1:]);
+ }
+ }
+}
diff --git a/src/core/SelectorManager.sol b/src/core/SelectorManager.sol
new file mode 100644
index 00000000..e5a09e92
--- /dev/null
+++ b/src/core/SelectorManager.sol
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {IHook, IFallback, IModule} from "../interfaces/IERC7579Modules.sol";
+import {CallType} from "../utils/ExecLib.sol";
+import {SELECTOR_MANAGER_STORAGE_SLOT, CALLTYPE_DELEGATECALL, CALLTYPE_SINGLE} from "../types/Constants.sol";
+import {ModuleLib} from "../utils/ModuleLib.sol";
+
+abstract contract SelectorManager {
+ error NotSupportedCallType();
+
+ struct SelectorConfig {
+ IHook hook; // 20 bytes for hook address
+ address target; // 20 bytes target will be fallback module, called with call
+ CallType callType;
+ }
+
+ struct SelectorStorage {
+ mapping(bytes4 => SelectorConfig) selectorConfig;
+ }
+
+ function selectorConfig(bytes4 selector) external view returns (SelectorConfig memory) {
+ return _selectorConfig(selector);
+ }
+
+ function _selectorConfig(bytes4 selector) internal view returns (SelectorConfig storage config) {
+ config = _selectorStorage().selectorConfig[selector];
+ }
+
+ function _selectorStorage() internal pure returns (SelectorStorage storage ss) {
+ bytes32 slot = SELECTOR_MANAGER_STORAGE_SLOT;
+ assembly {
+ ss.slot := slot
+ }
+ }
+
+ function _installSelector(bytes4 selector, address target, IHook hook, bytes calldata selectorData) internal {
+ if (address(hook) == address(0)) {
+ hook = IHook(address(1));
+ }
+ SelectorConfig storage ss = _selectorConfig(selector);
+ // we are going to install only through call/delegatecall
+ CallType callType = CallType.wrap(bytes1(selectorData[0]));
+ if (callType == CALLTYPE_SINGLE) {
+ IModule(target).onInstall(selectorData[1:]);
+ } else if (callType != CALLTYPE_DELEGATECALL) {
+ // NOTE : we are not going to call onInstall for delegatecall, and we support only CALL & DELEGATECALL
+ revert NotSupportedCallType();
+ }
+ ss.hook = hook;
+ ss.target = target;
+ ss.callType = callType;
+ }
+
+ function _uninstallSelector(bytes4 selector, bytes calldata selectorDeinitData) internal returns (IHook hook) {
+ SelectorConfig storage ss = _selectorConfig(selector);
+ hook = ss.hook;
+ ss.hook = IHook(address(0));
+ ModuleLib.uninstallModule(ss.target, selectorDeinitData);
+ ss.target = address(0);
+ ss.callType = CallType.wrap(bytes1(0xff));
+ }
+}
diff --git a/src/core/ValidationManager.sol b/src/core/ValidationManager.sol
new file mode 100644
index 00000000..a00e1f08
--- /dev/null
+++ b/src/core/ValidationManager.sol
@@ -0,0 +1,585 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IValidator, IModule, IExecutor, IHook, IPolicy, ISigner, IFallback} from "../interfaces/IERC7579Modules.sol";
+import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol";
+import {SelectorManager} from "./SelectorManager.sol";
+import {HookManager} from "./HookManager.sol";
+import {ExecutorManager} from "./ExecutorManager.sol";
+import {ValidationData, ValidAfter, ValidUntil, parseValidationData} from "../interfaces/IAccount.sol";
+import {IAccountExecute} from "../interfaces/IAccountExecute.sol";
+import {EIP712} from "solady/utils/EIP712.sol";
+import {ModuleLib} from "../utils/ModuleLib.sol";
+import {
+ ValidationId,
+ PolicyData,
+ ValidationMode,
+ ValidationType,
+ ValidatorLib,
+ PassFlag
+} from "../utils/ValidationTypeLib.sol";
+
+import {CallType} from "../utils/ExecLib.sol";
+import {CALLTYPE_SINGLE} from "../types/Constants.sol";
+
+import {PermissionId, getValidationResult} from "../types/Types.sol";
+import {_intersectValidationData} from "../utils/KernelValidationResult.sol";
+
+import {
+ VALIDATION_MODE_DEFAULT,
+ VALIDATION_MODE_ENABLE,
+ VALIDATION_TYPE_ROOT,
+ VALIDATION_TYPE_VALIDATOR,
+ VALIDATION_TYPE_PERMISSION,
+ SKIP_USEROP,
+ SKIP_SIGNATURE,
+ VALIDATION_MANAGER_STORAGE_SLOT,
+ MAX_NONCE_INCREMENT_SIZE,
+ ENABLE_TYPE_HASH,
+ KERNEL_WRAPPER_TYPE_HASH
+} from "../types/Constants.sol";
+
+abstract contract ValidationManager is EIP712, SelectorManager, HookManager, ExecutorManager {
+ event RootValidatorUpdated(ValidationId rootValidator);
+ event ValidatorInstalled(IValidator validator, uint32 nonce);
+ event PermissionInstalled(PermissionId permission, uint32 nonce);
+ event NonceInvalidated(uint32 nonce);
+ event ValidatorUninstalled(IValidator validator);
+ event PermissionUninstalled(PermissionId permission);
+ event SelectorSet(bytes4 selector, ValidationId vId, bool allowed);
+
+ error InvalidMode();
+ error InvalidValidator();
+ error InvalidSignature();
+ error EnableNotApproved();
+ error PolicySignatureOrderError();
+ error SignerPrefixNotPresent();
+ error PolicyDataTooLarge();
+ error InvalidValidationType();
+ error InvalidNonce();
+ error PolicyFailed(uint256 i);
+ error PermissionNotAlllowedForUserOp();
+ error PermissionNotAlllowedForSignature();
+ error PermissionDataLengthMismatch();
+ error NonceInvalidationError();
+ error RootValidatorCannotBeRemoved();
+
+ // erc7579 plugins
+ struct ValidationConfig {
+ uint32 nonce; // 4 bytes
+ IHook hook; // 20 bytes address(1) : hook not required, address(0) : validator not installed
+ }
+
+ struct PermissionConfig {
+ PassFlag permissionFlag;
+ ISigner signer;
+ PolicyData[] policyData;
+ }
+
+ struct ValidationStorage {
+ ValidationId rootValidator;
+ uint32 currentNonce;
+ uint32 validNonceFrom;
+ mapping(ValidationId => ValidationConfig) validationConfig;
+ mapping(ValidationId => mapping(bytes4 => bool)) allowedSelectors;
+ // validation = validator | permission
+ // validator == 1 validator
+ // permission == 1 signer + N policies
+ mapping(PermissionId => PermissionConfig) permissionConfig;
+ }
+
+ function rootValidator() external view returns (ValidationId) {
+ return _validationStorage().rootValidator;
+ }
+
+ function currentNonce() external view returns (uint32) {
+ return _validationStorage().currentNonce;
+ }
+
+ function validNonceFrom() external view returns (uint32) {
+ return _validationStorage().validNonceFrom;
+ }
+
+ function isAllowedSelector(ValidationId vId, bytes4 selector) external view returns (bool) {
+ return _validationStorage().allowedSelectors[vId][selector];
+ }
+
+ function validationConfig(ValidationId vId) external view returns (ValidationConfig memory) {
+ return _validationStorage().validationConfig[vId];
+ }
+
+ function permissionConfig(PermissionId pId) external view returns (PermissionConfig memory) {
+ return (_validationStorage().permissionConfig[pId]);
+ }
+
+ function _validationStorage() internal pure returns (ValidationStorage storage state) {
+ assembly {
+ state.slot := VALIDATION_MANAGER_STORAGE_SLOT
+ }
+ }
+
+ function _setRootValidator(ValidationId _rootValidator) internal {
+ ValidationStorage storage vs = _validationStorage();
+ vs.rootValidator = _rootValidator;
+ emit RootValidatorUpdated(_rootValidator);
+ }
+
+ function _invalidateNonce(uint32 nonce) internal {
+ ValidationStorage storage state = _validationStorage();
+ if (state.currentNonce + MAX_NONCE_INCREMENT_SIZE < nonce) {
+ revert NonceInvalidationError();
+ }
+ if (nonce <= state.validNonceFrom) {
+ revert InvalidNonce();
+ }
+ state.validNonceFrom = nonce;
+ if (state.currentNonce < state.validNonceFrom) {
+ state.currentNonce = state.validNonceFrom;
+ }
+ }
+
+ // allow installing multiple validators with same nonce
+ function _installValidations(
+ ValidationId[] calldata validators,
+ ValidationConfig[] memory configs,
+ bytes[] calldata validatorData,
+ bytes[] calldata hookData
+ ) internal {
+ unchecked {
+ for (uint256 i = 0; i < validators.length; i++) {
+ _installValidation(validators[i], configs[i], validatorData[i], hookData[i]);
+ }
+ }
+ }
+
+ function _setSelector(ValidationId vId, bytes4 selector, bool allowed) internal {
+ ValidationStorage storage state = _validationStorage();
+ state.allowedSelectors[vId][selector] = allowed;
+ emit SelectorSet(selector, vId, allowed);
+ }
+
+ // for uninstall, we support uninstall for validator mode by calling onUninstall
+ // but for permission mode, we do it naively by setting hook to address(0).
+ // it is more recommended to use a nonce revoke to make sure the validator has been revoked
+ // also, we are not calling hook.onInstall here
+ function _uninstallValidation(ValidationId vId, bytes calldata validatorData) internal returns (IHook hook) {
+ ValidationStorage storage state = _validationStorage();
+ if (vId == state.rootValidator) {
+ revert RootValidatorCannotBeRemoved();
+ }
+ hook = state.validationConfig[vId].hook;
+ state.validationConfig[vId].hook = IHook(address(0));
+ ValidationType vType = ValidatorLib.getType(vId);
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ IValidator validator = ValidatorLib.getValidator(vId);
+ ModuleLib.uninstallModule(address(validator), validatorData);
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ PermissionId permission = ValidatorLib.getPermissionId(vId);
+ _uninstallPermission(permission, validatorData);
+ } else {
+ revert InvalidValidationType();
+ }
+ }
+
+ function _uninstallPermission(PermissionId pId, bytes calldata data) internal {
+ bytes[] calldata permissionDisableData;
+ assembly {
+ permissionDisableData.offset := add(add(data.offset, 32), calldataload(data.offset))
+ permissionDisableData.length := calldataload(sub(permissionDisableData.offset, 32))
+ }
+ PermissionConfig storage config = _validationStorage().permissionConfig[pId];
+ unchecked {
+ if (permissionDisableData.length != config.policyData.length + 1) {
+ revert PermissionDataLengthMismatch();
+ }
+ PolicyData[] storage policyData = config.policyData;
+ for (uint256 i = 0; i < policyData.length; i++) {
+ (, IPolicy policy) = ValidatorLib.decodePolicyData(policyData[i]);
+ ModuleLib.uninstallModule(
+ address(policy), abi.encodePacked(bytes32(PermissionId.unwrap(pId)), permissionDisableData[i])
+ );
+ }
+ delete _validationStorage().permissionConfig[pId].policyData;
+ ModuleLib.uninstallModule(
+ address(config.signer),
+ abi.encodePacked(
+ bytes32(PermissionId.unwrap(pId)), permissionDisableData[permissionDisableData.length - 1]
+ )
+ );
+ }
+ config.signer = ISigner(address(0));
+ config.permissionFlag = PassFlag.wrap(bytes2(0));
+ }
+
+ function _installValidation(
+ ValidationId vId,
+ ValidationConfig memory config,
+ bytes calldata validatorData,
+ bytes calldata hookData
+ ) internal {
+ ValidationStorage storage state = _validationStorage();
+ if (state.validationConfig[vId].nonce == state.currentNonce) {
+ // only increase currentNonce when vId's currentNonce is same
+ unchecked {
+ state.currentNonce++;
+ }
+ }
+ if (config.hook == IHook(address(0))) {
+ config.hook = IHook(address(1));
+ }
+ if (state.currentNonce != config.nonce || state.validationConfig[vId].nonce >= config.nonce) {
+ revert InvalidNonce();
+ }
+ state.validationConfig[vId] = config;
+ if (config.hook != IHook(address(1))) {
+ _installHook(config.hook, hookData);
+ }
+ ValidationType vType = ValidatorLib.getType(vId);
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ IValidator validator = ValidatorLib.getValidator(vId);
+ validator.onInstall(validatorData);
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ PermissionId permission = ValidatorLib.getPermissionId(vId);
+ _installPermission(permission, validatorData);
+ } else {
+ revert InvalidValidationType();
+ }
+ }
+
+ function _installPermission(PermissionId permission, bytes calldata data) internal {
+ ValidationStorage storage state = _validationStorage();
+ bytes[] calldata permissionEnableData;
+ assembly {
+ permissionEnableData.offset := add(add(data.offset, 32), calldataload(data.offset))
+ permissionEnableData.length := calldataload(sub(permissionEnableData.offset, 32))
+ }
+ // allow up to 0xfe, 0xff is dedicated for signer
+ if (permissionEnableData.length > 254 || permissionEnableData.length == 0) {
+ revert PolicyDataTooLarge();
+ }
+
+ // clean up the policyData
+ if (state.permissionConfig[permission].policyData.length > 0) {
+ delete state.permissionConfig[permission].policyData;
+ }
+ unchecked {
+ for (uint256 i = 0; i < permissionEnableData.length - 1; i++) {
+ state.permissionConfig[permission].policyData.push(
+ PolicyData.wrap(bytes22(permissionEnableData[i][0:22]))
+ );
+ IPolicy(address(bytes20(permissionEnableData[i][2:22]))).onInstall(
+ abi.encodePacked(bytes32(PermissionId.unwrap(permission)), permissionEnableData[i][22:])
+ );
+ }
+ // last permission data will be signer
+ ISigner signer = ISigner(address(bytes20(permissionEnableData[permissionEnableData.length - 1][2:22])));
+ state.permissionConfig[permission].signer = signer;
+ state.permissionConfig[permission].permissionFlag =
+ PassFlag.wrap(bytes2(permissionEnableData[permissionEnableData.length - 1][0:2]));
+ signer.onInstall(
+ abi.encodePacked(
+ bytes32(PermissionId.unwrap(permission)), permissionEnableData[permissionEnableData.length - 1][22:]
+ )
+ );
+ }
+ }
+
+ function _doValidation(ValidationMode vMode, ValidationId vId, PackedUserOperation calldata op, bytes32 userOpHash)
+ internal
+ returns (ValidationData validationData)
+ {
+ ValidationStorage storage state = _validationStorage();
+ PackedUserOperation memory userOp = op;
+ bytes calldata userOpSig = op.signature;
+ unchecked {
+ if (vMode == VALIDATION_MODE_ENABLE) {
+ (validationData, userOpSig) = _enableMode(vId, op.signature);
+ userOp.signature = userOpSig;
+ }
+
+ ValidationType vType = ValidatorLib.getType(vId);
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ validationData = _intersectValidationData(
+ validationData,
+ ValidationData.wrap(ValidatorLib.getValidator(vId).validateUserOp(userOp, userOpHash))
+ );
+ } else {
+ PermissionId pId = ValidatorLib.getPermissionId(vId);
+ if (PassFlag.unwrap(state.permissionConfig[pId].permissionFlag) & PassFlag.unwrap(SKIP_USEROP) != 0) {
+ revert PermissionNotAlllowedForUserOp();
+ }
+ (ValidationData policyCheck, ISigner signer) = _checkUserOpPolicy(pId, userOp, userOpSig);
+ validationData = _intersectValidationData(validationData, policyCheck);
+ validationData = _intersectValidationData(
+ validationData,
+ ValidationData.wrap(
+ signer.checkUserOpSignature(bytes32(PermissionId.unwrap(pId)), userOp, userOpHash)
+ )
+ );
+ }
+ }
+ }
+
+ function _enableMode(ValidationId vId, bytes calldata packedData)
+ internal
+ returns (ValidationData validationData, bytes calldata userOpSig)
+ {
+ validationData = _enableValidationWithSig(vId, packedData);
+
+ assembly {
+ userOpSig.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 148)))
+ userOpSig.length := calldataload(sub(userOpSig.offset, 32))
+ }
+
+ return (validationData, userOpSig);
+ }
+
+ function _enableValidationWithSig(ValidationId vId, bytes calldata packedData)
+ internal
+ returns (ValidationData validationData)
+ {
+ bytes calldata enableSig;
+ (
+ ValidationConfig memory config,
+ bytes calldata validatorData,
+ bytes calldata hookData,
+ bytes calldata selectorData,
+ bytes32 digest
+ ) = _enableDigest(vId, packedData);
+ assembly {
+ enableSig.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 116)))
+ enableSig.length := calldataload(sub(enableSig.offset, 32))
+ }
+ validationData = _checkEnableSig(digest, enableSig);
+ _installValidation(vId, config, validatorData, hookData);
+ _configureSelector(selectorData);
+ _setSelector(vId, bytes4(selectorData[0:4]), true);
+ }
+
+ function _checkEnableSig(bytes32 digest, bytes calldata enableSig)
+ internal
+ view
+ returns (ValidationData validationData)
+ {
+ ValidationStorage storage state = _validationStorage();
+ ValidationType vType = ValidatorLib.getType(state.rootValidator);
+ bytes4 result;
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ IValidator validator = ValidatorLib.getValidator(state.rootValidator);
+ result = validator.isValidSignatureWithSender(address(this), digest, enableSig);
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ PermissionId pId = ValidatorLib.getPermissionId(state.rootValidator);
+ ISigner signer;
+ (signer, validationData, enableSig) = _checkSignaturePolicy(pId, address(this), digest, enableSig);
+ result = signer.checkSignature(bytes32(PermissionId.unwrap(pId)), address(this), digest, enableSig);
+ } else {
+ revert InvalidValidationType();
+ }
+ if (result != 0x1626ba7e) {
+ revert EnableNotApproved();
+ }
+ }
+
+ function _configureSelector(bytes calldata selectorData) internal {
+ bytes4 selector = bytes4(selectorData[0:4]);
+ if (selectorData.length >= 4) {
+ if (selectorData.length >= 44) {
+ // install selector with hook and target contract
+ bytes calldata selectorInitData;
+ bytes calldata hookInitData;
+ IModule selectorModule = IModule(address(bytes20(selectorData[4:24])));
+ assembly {
+ selectorInitData.offset :=
+ add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 44)))
+ selectorInitData.length := calldataload(sub(selectorInitData.offset, 32))
+ hookInitData.offset := add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 76)))
+ hookInitData.length := calldataload(sub(hookInitData.offset, 32))
+ }
+ if (CallType.wrap(bytes1(selectorInitData[0])) == CALLTYPE_SINGLE && selectorModule.isModuleType(2)) {
+ // also adds as executor when fallback module is also a executor
+ bytes calldata executorHookData;
+ assembly {
+ executorHookData.offset :=
+ add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 108)))
+ executorHookData.length := calldataload(sub(executorHookData.offset, 32))
+ }
+ IHook executorHook = IHook(address(bytes20(executorHookData[0:20])));
+ // if module is also executor, install as executor
+ _installExecutorWithoutInit(IExecutor(address(selectorModule)), executorHook);
+ _installHook(executorHook, executorHookData[20:]);
+ }
+ _installSelector(
+ selector, address(selectorModule), IHook(address(bytes20(selectorData[24:44]))), selectorInitData
+ );
+ _installHook(IHook(address(bytes20(selectorData[24:44]))), hookInitData);
+ } else {
+ // set without install
+ require(selectorData.length == 4, "Invalid selectorData");
+ }
+ }
+ }
+
+ function _enableDigest(ValidationId vId, bytes calldata packedData)
+ internal
+ view
+ returns (
+ ValidationConfig memory config,
+ bytes calldata validatorData,
+ bytes calldata hookData,
+ bytes calldata selectorData,
+ bytes32 digest
+ )
+ {
+ ValidationStorage storage state = _validationStorage();
+ config.hook = IHook(address(bytes20(packedData[0:20])));
+ config.nonce = state.currentNonce;
+
+ assembly {
+ validatorData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 20)))
+ validatorData.length := calldataload(sub(validatorData.offset, 32))
+ hookData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 52)))
+ hookData.length := calldataload(sub(hookData.offset, 32))
+ selectorData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 84)))
+ selectorData.length := calldataload(sub(selectorData.offset, 32))
+ }
+ digest = _hashTypedData(
+ keccak256(
+ abi.encode(
+ ENABLE_TYPE_HASH,
+ ValidationId.unwrap(vId),
+ state.currentNonce,
+ config.hook,
+ keccak256(validatorData),
+ keccak256(hookData),
+ keccak256(selectorData)
+ )
+ )
+ );
+ }
+
+ struct PermissionSigMemory {
+ uint8 idx;
+ uint256 length;
+ ValidationData validationData;
+ PermissionId permission;
+ PassFlag flag;
+ IPolicy policy;
+ bytes permSig;
+ address caller;
+ bytes32 digest;
+ }
+
+ function _checkUserOpPolicy(PermissionId pId, PackedUserOperation memory userOp, bytes calldata userOpSig)
+ internal
+ returns (ValidationData validationData, ISigner signer)
+ {
+ ValidationStorage storage state = _validationStorage();
+ PolicyData[] storage policyData = state.permissionConfig[pId].policyData;
+ unchecked {
+ for (uint256 i = 0; i < policyData.length; i++) {
+ (PassFlag flag, IPolicy policy) = ValidatorLib.decodePolicyData(policyData[i]);
+ uint8 idx = uint8(bytes1(userOpSig[0]));
+ if (idx == i) {
+ // we are using uint64 length
+ uint256 length = uint64(bytes8(userOpSig[1:9]));
+ userOp.signature = userOpSig[9:9 + length];
+ userOpSig = userOpSig[9 + length:];
+ } else if (idx < i) {
+ // signature is not in order
+ revert PolicySignatureOrderError();
+ } else {
+ userOp.signature = "";
+ }
+ if (PassFlag.unwrap(flag) & PassFlag.unwrap(SKIP_USEROP) == 0) {
+ ValidationData vd =
+ ValidationData.wrap(policy.checkUserOpPolicy(bytes32(PermissionId.unwrap(pId)), userOp));
+ address result = getValidationResult(vd);
+ if (result != address(0)) {
+ revert PolicyFailed(i);
+ }
+ validationData = _intersectValidationData(validationData, vd);
+ }
+ }
+ if (uint8(bytes1(userOpSig[0])) != 255) {
+ revert SignerPrefixNotPresent();
+ }
+ userOp.signature = userOpSig[1:];
+ return (validationData, state.permissionConfig[pId].signer);
+ }
+ }
+
+ function _checkSignaturePolicy(PermissionId pId, address caller, bytes32 digest, bytes calldata sig)
+ internal
+ view
+ returns (ISigner, ValidationData, bytes calldata)
+ {
+ ValidationStorage storage state = _validationStorage();
+ PermissionSigMemory memory mSig;
+ mSig.permission = pId;
+ mSig.caller = caller;
+ mSig.digest = digest;
+ _checkPermissionPolicy(mSig, state, sig);
+ if (uint8(bytes1(sig[0])) != 255) {
+ revert SignerPrefixNotPresent();
+ }
+ sig = sig[1:];
+ return (state.permissionConfig[mSig.permission].signer, mSig.validationData, sig);
+ }
+
+ function _checkPermissionPolicy(
+ PermissionSigMemory memory mSig,
+ ValidationStorage storage state,
+ bytes calldata sig
+ ) internal view {
+ PolicyData[] storage policyData = state.permissionConfig[mSig.permission].policyData;
+ unchecked {
+ for (uint256 i = 0; i < policyData.length; i++) {
+ (mSig.flag, mSig.policy) = ValidatorLib.decodePolicyData(policyData[i]);
+ mSig.idx = uint8(bytes1(sig[0]));
+ if (mSig.idx == i) {
+ // we are using uint64 length
+ mSig.length = uint64(bytes8(sig[1:9]));
+ mSig.permSig = sig[9:9 + mSig.length];
+ sig = sig[9 + mSig.length:];
+ } else if (mSig.idx < i) {
+ // signature is not in order
+ revert PolicySignatureOrderError();
+ } else {
+ mSig.permSig = sig[0:0];
+ }
+
+ if (PassFlag.unwrap(mSig.flag) & PassFlag.unwrap(SKIP_SIGNATURE) == 0) {
+ ValidationData vd = ValidationData.wrap(
+ mSig.policy.checkSignaturePolicy(
+ bytes32(PermissionId.unwrap(mSig.permission)), mSig.caller, mSig.digest, mSig.permSig
+ )
+ );
+ address result = getValidationResult(vd);
+ if (result != address(0)) {
+ revert PolicyFailed(i);
+ }
+
+ mSig.validationData = _intersectValidationData(mSig.validationData, vd);
+ }
+ }
+ }
+ }
+
+ function _checkPermissionSignature(PermissionId pId, address caller, bytes32 hash, bytes calldata sig)
+ internal
+ view
+ returns (bytes4)
+ {
+ (ISigner signer, ValidationData valdiationData, bytes calldata validatorSig) =
+ _checkSignaturePolicy(pId, caller, hash, sig);
+ (ValidAfter validAfter, ValidUntil validUntil,) = parseValidationData(ValidationData.unwrap(valdiationData));
+ if (block.timestamp < ValidAfter.unwrap(validAfter) || block.timestamp > ValidUntil.unwrap(validUntil)) {
+ return 0xffffffff;
+ }
+ return signer.checkSignature(bytes32(PermissionId.unwrap(pId)), caller, _toWrappedHash(hash), validatorSig);
+ }
+
+ function _toWrappedHash(bytes32 hash) internal view returns (bytes32) {
+ return _hashTypedData(keccak256(abi.encode(KERNEL_WRAPPER_TYPE_HASH, hash)));
+ }
+}
diff --git a/src/executor/KillSwitchAction.sol b/src/executor/KillSwitchAction.sol
deleted file mode 100644
index 3273dec5..00000000
--- a/src/executor/KillSwitchAction.sol
+++ /dev/null
@@ -1,38 +0,0 @@
-pragma solidity ^0.8.18;
-
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {KillSwitchValidator} from "../validator/KillSwitchValidator.sol";
-import {WalletKernelStorage} from "../common/Structs.sol";
-
-contract KillSwitchAction {
- KillSwitchValidator public immutable killSwitchValidator;
-
- constructor(KillSwitchValidator _killswitchValidator) {
- killSwitchValidator = _killswitchValidator;
- }
-
- // Function to get the wallet kernel storage
- function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) {
- bytes32 storagePosition = bytes32(uint256(keccak256("zerodev.kernel")) - 1);
- assembly {
- ws.slot := storagePosition
- }
- }
-
- function toggleKillSwitch() external {
- WalletKernelStorage storage ws = getKernelStorage();
- if (address(ws.defaultValidator) != address(killSwitchValidator)) {
- // this means it is not activated
- ws.defaultValidator = killSwitchValidator;
- getKernelStorage().disabledMode = bytes4(0xffffffff);
- getKernelStorage().lastDisabledTime = uint48(block.timestamp);
- } else {
- (, IKernelValidator prevValidator,, bytes4 prevDisableMode) =
- killSwitchValidator.killSwitchValidatorStorage(address(this));
- // this means it is activated
- ws.defaultValidator = prevValidator;
- getKernelStorage().disabledMode = prevDisableMode;
- killSwitchValidator.disable(bytes(""));
- }
- }
-}
diff --git a/src/executor/RecoveryAction.sol b/src/executor/RecoveryAction.sol
deleted file mode 100644
index cc043117..00000000
--- a/src/executor/RecoveryAction.sol
+++ /dev/null
@@ -1,9 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "src/interfaces/IKernelValidator.sol";
-
-contract RecoveryAction {
- function doRecovery(address _validator, bytes calldata _data) external {
- IKernelValidator(_validator).enable(_data);
- }
-}
diff --git a/src/executor/TokenActions.sol b/src/executor/TokenActions.sol
deleted file mode 100644
index f4956355..00000000
--- a/src/executor/TokenActions.sol
+++ /dev/null
@@ -1,21 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {ERC20} from "solady/tokens/ERC20.sol";
-import {ERC721} from "solady/tokens/ERC721.sol";
-import {ERC1155} from "solady/tokens/ERC1155.sol";
-
-contract TokenActions {
- function transferERC20Action(address _token, uint256 _amount, address _to) external {
- ERC20(_token).transfer(_to, _amount);
- }
-
- function transferERC721Action(address _token, uint256 _id, address _to) external {
- ERC721(_token).transferFrom(address(this), _to, _id);
- }
-
- function transferERC1155Action(address _token, uint256 _id, address _to, uint256 amount, bytes calldata data)
- external
- {
- ERC1155(_token).safeTransferFrom(address(this), _to, _id, amount, data);
- }
-}
diff --git a/src/factory/FactoryStaker.sol b/src/factory/FactoryStaker.sol
new file mode 100644
index 00000000..9df7fac7
--- /dev/null
+++ b/src/factory/FactoryStaker.sol
@@ -0,0 +1,44 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "./KernelFactory.sol";
+import "../interfaces/IEntryPoint.sol";
+import "solady/auth/Ownable.sol";
+
+contract FactoryStaker is Ownable {
+ mapping(KernelFactory => bool) public approved;
+
+ error NotApprovedFactory();
+
+ constructor(address _owner) {
+ _initializeOwner(_owner);
+ }
+
+ function deployWithFactory(KernelFactory factory, bytes calldata createData, bytes32 salt)
+ external
+ payable
+ returns (address)
+ {
+ if (!approved[factory]) {
+ revert NotApprovedFactory();
+ }
+ return factory.createAccount(createData, salt);
+ }
+
+ function approveFactory(KernelFactory factory, bool approval) external payable onlyOwner {
+ approved[factory] = approval;
+ }
+
+ function stake(IEntryPoint entryPoint, uint32 unstakeDelay) external payable onlyOwner {
+ entryPoint.addStake{value: msg.value}(unstakeDelay);
+ }
+
+ function unlockStake(IEntryPoint entryPoint) external payable onlyOwner {
+ entryPoint.unlockStake();
+ }
+
+ function withdrawStake(IEntryPoint entryPoint, address payable recipient) external payable onlyOwner {
+ entryPoint.withdrawStake(recipient);
+ }
+}
diff --git a/src/factory/KernelFactory.sol b/src/factory/KernelFactory.sol
index a88dd775..d0ee899c 100644
--- a/src/factory/KernelFactory.sol
+++ b/src/factory/KernelFactory.sol
@@ -1,61 +1,33 @@
// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {AdminLessERC1967Factory} from "./AdminLessERC1967Factory.sol";
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {Ownable} from "solady/auth/Ownable.sol";
-
-contract KernelFactory is AdminLessERC1967Factory, Ownable {
- /// Error throwned when an implementation isn't allowed
- error ImplementationNotAllowed();
-
- /// @dev The entry point contract.
- IEntryPoint public entryPoint;
-
- /// @dev Check if an implementation is allowed.
- mapping(address implementation => bool isAllowed) public isAllowedImplementation;
-
- constructor(address _owner, IEntryPoint _entryPoint) {
- _initializeOwner(_owner);
- entryPoint = _entryPoint;
- }
- function setImplementation(address _implementation, bool _allow) external onlyOwner {
- isAllowedImplementation[_implementation] = _allow;
- }
+pragma solidity ^0.8.0;
- function setEntryPoint(IEntryPoint _entryPoint) external onlyOwner {
- entryPoint = _entryPoint;
- }
+import {LibClone} from "solady/utils/LibClone.sol";
- function createAccount(address _implementation, bytes calldata _data, uint256 _index)
- external
- payable
- returns (address proxy)
- {
- // Ensure that the implementation contract is allowed
- if (!isAllowedImplementation[_implementation]) revert ImplementationNotAllowed();
- // Create the salt for the account
- bytes32 salt = bytes32(uint256(keccak256(abi.encodePacked(_data, _index))) & type(uint96).max);
- // Deploy the proxy and return it's address
- proxy = deployDeterministicAndCall(_implementation, salt, _data);
- }
+contract KernelFactory {
+ error InitializeError();
- function getAccountAddress(bytes calldata _data, uint256 _index) public view returns (address) {
- bytes32 salt = bytes32(uint256(keccak256(abi.encodePacked(_data, _index))) & type(uint96).max);
- return predictDeterministicAddress(salt);
- }
+ address public immutable implementation;
- // stake functions
- function addStake(uint32 unstakeDelaySec) external payable onlyOwner {
- entryPoint.addStake{value: msg.value}(unstakeDelaySec);
+ constructor(address _impl) {
+ implementation = _impl;
}
- function unlockStake() external onlyOwner {
- entryPoint.unlockStake();
+ function createAccount(bytes calldata data, bytes32 salt) public payable returns (address) {
+ bytes32 actualSalt = keccak256(abi.encodePacked(data, salt));
+ (bool alreadyDeployed, address account) =
+ LibClone.createDeterministicERC1967(msg.value, implementation, actualSalt);
+ if (!alreadyDeployed) {
+ (bool success,) = account.call(data);
+ if (!success) {
+ revert InitializeError();
+ }
+ }
+ return account;
}
- function withdrawStake(address payable withdrawAddress) external onlyOwner {
- entryPoint.withdrawStake(withdrawAddress);
+ function getAddress(bytes calldata data, bytes32 salt) public view virtual returns (address) {
+ bytes32 actualSalt = keccak256(abi.encodePacked(data, salt));
+ return LibClone.predictDeterministicAddressERC1967(implementation, actualSalt, address(this));
}
}
diff --git a/src/interfaces/IAccount.sol b/src/interfaces/IAccount.sol
new file mode 100644
index 00000000..44662e6e
--- /dev/null
+++ b/src/interfaces/IAccount.sol
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+import "./PackedUserOperation.sol";
+import "../types/Types.sol";
+
+interface IAccount {
+ /**
+ * Validate user's signature and nonce
+ * the entryPoint will make the call to the recipient only if this validation call returns successfully.
+ * signature failure should be reported by returning SIG_VALIDATION_FAILED (1).
+ * This allows making a "simulation call" without a valid signature
+ * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.
+ *
+ * @dev Must validate caller is the entryPoint.
+ * Must validate the signature and nonce
+ * @param userOp - The operation that is about to be executed.
+ * @param userOpHash - Hash of the user's request data. can be used as the basis for signature.
+ * @param missingAccountFunds - Missing funds on the account's deposit in the entrypoint.
+ * This is the minimum amount to transfer to the sender(entryPoint) to be
+ * able to make the call. The excess is left as a deposit in the entrypoint
+ * for future calls. Can be withdrawn anytime using "entryPoint.withdrawTo()".
+ * In case there is a paymaster in the request (or the current deposit is high
+ * enough), this value will be zero.
+ * @return validationData - Packaged ValidationData structure. use `_packValidationData` and
+ * `_unpackValidationData` to encode and decode.
+ * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,
+ * otherwise, an address of an "authorizer" contract.
+ * <6-byte> validUntil - Last timestamp this operation is valid. 0 for "indefinite"
+ * <6-byte> validAfter - First timestamp this operation is valid
+ * If an account doesn't use time-range, it is enough to
+ * return SIG_VALIDATION_FAILED value (1) for signature failure.
+ * Note that the validation code cannot use block.timestamp (or block.number) directly.
+ */
+ function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)
+ external
+ payable
+ returns (ValidationData validationData);
+}
diff --git a/src/interfaces/IAccountExecute.sol b/src/interfaces/IAccountExecute.sol
new file mode 100644
index 00000000..40e3c48e
--- /dev/null
+++ b/src/interfaces/IAccountExecute.sol
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+import "./PackedUserOperation.sol";
+
+interface IAccountExecute {
+ /**
+ * Account may implement this execute method.
+ * passing this methodSig at the beginning of callData will cause the entryPoint to pass the full UserOp (and hash)
+ * to the account.
+ * The account should skip the methodSig, and use the callData (and optionally, other UserOp fields)
+ *
+ * @param userOp - The operation that was just validated.
+ * @param userOpHash - Hash of the user's request data.
+ */
+ function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external payable;
+}
diff --git a/src/interfaces/IAggregator.sol b/src/interfaces/IAggregator.sol
new file mode 100644
index 00000000..66ca5f35
--- /dev/null
+++ b/src/interfaces/IAggregator.sol
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+import "./PackedUserOperation.sol";
+
+/**
+ * Aggregated Signatures validator.
+ */
+interface IAggregator {
+ /**
+ * Validate aggregated signature.
+ * Revert if the aggregated signature does not match the given list of operations.
+ * @param userOps - Array of UserOperations to validate the signature for.
+ * @param signature - The aggregated signature.
+ */
+ function validateSignatures(PackedUserOperation[] calldata userOps, bytes calldata signature) external view;
+
+ /**
+ * Validate signature of a single userOp.
+ * This method should be called by bundler after EntryPointSimulation.simulateValidation() returns
+ * the aggregator this account uses.
+ * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps.
+ * @param userOp - The userOperation received from the user.
+ * @return sigForUserOp - The value to put into the signature field of the userOp when calling handleOps.
+ * (usually empty, unless account and aggregator support some kind of "multisig".
+ */
+ function validateUserOpSignature(PackedUserOperation calldata userOp)
+ external
+ view
+ returns (bytes memory sigForUserOp);
+
+ /**
+ * Aggregate multiple signatures into a single value.
+ * This method is called off-chain to calculate the signature to pass with handleOps()
+ * bundler MAY use optimized custom code perform this aggregation.
+ * @param userOps - Array of UserOperations to collect the signatures from.
+ * @return aggregatedSignature - The aggregated signature.
+ */
+ function aggregateSignatures(PackedUserOperation[] calldata userOps)
+ external
+ view
+ returns (bytes memory aggregatedSignature);
+}
diff --git a/src/interfaces/IERC7579Account.sol b/src/interfaces/IERC7579Account.sol
new file mode 100644
index 00000000..2b409949
--- /dev/null
+++ b/src/interfaces/IERC7579Account.sol
@@ -0,0 +1,109 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.21;
+
+import {CallType, ExecType, ExecMode} from "../utils/ExecLib.sol";
+import {PackedUserOperation} from "./PackedUserOperation.sol";
+
+struct Execution {
+ address target;
+ uint256 value;
+ bytes callData;
+}
+
+interface IERC7579Account {
+ event ModuleInstalled(uint256 moduleTypeId, address module);
+ event ModuleUninstalled(uint256 moduleTypeId, address module);
+
+ /**
+ * @dev Executes a transaction on behalf of the account.
+ * This function is intended to be called by ERC-4337 EntryPoint.sol
+ * @dev Ensure adequate authorization control: i.e. onlyEntryPointOrSelf
+ *
+ * @dev MSA MUST implement this function signature.
+ * If a mode is requested that is not supported by the Account, it MUST revert
+ * @param mode The encoded execution mode of the transaction. See ModeLib.sol for details
+ * @param executionCalldata The encoded execution call data
+ */
+ function execute(ExecMode mode, bytes calldata executionCalldata) external payable;
+
+ /**
+ * @dev Executes a transaction on behalf of the account.
+ * This function is intended to be called by Executor Modules
+ * @dev Ensure adequate authorization control: i.e. onlyExecutorModule
+ *
+ * @dev MSA MUST implement this function signature.
+ * If a mode is requested that is not supported by the Account, it MUST revert
+ * @param mode The encoded execution mode of the transaction. See ModeLib.sol for details
+ * @param executionCalldata The encoded execution call data
+ */
+ function executeFromExecutor(ExecMode mode, bytes calldata executionCalldata)
+ external
+ payable
+ returns (bytes[] memory returnData);
+
+ /**
+ * @dev ERC-1271 isValidSignature
+ * This function is intended to be used to validate a smart account signature
+ * and may forward the call to a validator module
+ *
+ * @param hash The hash of the data that is signed
+ * @param data The data that is signed
+ */
+ function isValidSignature(bytes32 hash, bytes calldata data) external view returns (bytes4);
+
+ /**
+ * @dev installs a Module of a certain type on the smart account
+ * @dev Implement Authorization control of your chosing
+ * @param moduleTypeId the module type ID according the ERC-7579 spec
+ * @param module the module address
+ * @param initData arbitrary data that may be required on the module during `onInstall`
+ * initialization.
+ */
+ function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable;
+
+ /**
+ * @dev uninstalls a Module of a certain type on the smart account
+ * @dev Implement Authorization control of your chosing
+ * @param moduleTypeId the module type ID according the ERC-7579 spec
+ * @param module the module address
+ * @param deInitData arbitrary data that may be required on the module during `onUninstall`
+ * de-initialization.
+ */
+ function uninstallModule(uint256 moduleTypeId, address module, bytes calldata deInitData) external payable;
+
+ /**
+ * Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)
+ * @param encodedMode the encoded mode
+ */
+ function supportsExecutionMode(ExecMode encodedMode) external view returns (bool);
+
+ /**
+ * Function to check if the account supports installation of a certain module type Id
+ * @param moduleTypeId the module type ID according the ERC-7579 spec
+ */
+ function supportsModule(uint256 moduleTypeId) external view returns (bool);
+
+ /**
+ * Function to check if the account has a certain module installed
+ * @param moduleTypeId the module type ID according the ERC-7579 spec
+ * Note: keep in mind that some contracts can be multiple module types at the same time. It
+ * thus may be necessary to query multiple module types
+ * @param module the module address
+ * @param additionalContext additional context data that the smart account may interpret to
+ * identifiy conditions under which the module is installed.
+ * usually this is not necessary, but for some special hooks that
+ * are stored in mappings, this param might be needed
+ */
+ function isModuleInstalled(uint256 moduleTypeId, address module, bytes calldata additionalContext)
+ external
+ view
+ returns (bool);
+
+ /**
+ * @dev Returns the account id of the smart account
+ * @return accountImplementationId the account id of the smart account
+ * the accountId should be structured like so:
+ * "vendorname.accountname.semver"
+ */
+ function accountId() external view returns (string memory accountImplementationId);
+}
diff --git a/src/interfaces/IERC7579Modules.sol b/src/interfaces/IERC7579Modules.sol
new file mode 100644
index 00000000..58c1fda2
--- /dev/null
+++ b/src/interfaces/IERC7579Modules.sol
@@ -0,0 +1,117 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.21;
+
+import {PackedUserOperation} from "./PackedUserOperation.sol";
+
+interface IModule {
+ error AlreadyInitialized(address smartAccount);
+ error NotInitialized(address smartAccount);
+
+ /**
+ * @dev This function is called by the smart account during installation of the module
+ * @param data arbitrary data that may be required on the module during `onInstall`
+ * initialization
+ *
+ * MUST revert on error (i.e. if module is already enabled)
+ */
+ function onInstall(bytes calldata data) external payable;
+
+ /**
+ * @dev This function is called by the smart account during uninstallation of the module
+ * @param data arbitrary data that may be required on the module during `onUninstall`
+ * de-initialization
+ *
+ * MUST revert on error
+ */
+ function onUninstall(bytes calldata data) external payable;
+
+ /**
+ * @dev Returns boolean value if module is a certain type
+ * @param moduleTypeId the module type ID according the ERC-7579 spec
+ *
+ * MUST return true if the module is of the given type and false otherwise
+ */
+ function isModuleType(uint256 moduleTypeId) external view returns (bool);
+
+ /**
+ * @dev Returns if the module was already initialized for a provided smartaccount
+ */
+ function isInitialized(address smartAccount) external view returns (bool);
+}
+
+interface IValidator is IModule {
+ error InvalidTargetAddress(address target);
+
+ /**
+ * @dev Validates a transaction on behalf of the account.
+ * This function is intended to be called by the MSA during the ERC-4337 validaton phase
+ * Note: solely relying on bytes32 hash and signature is not suffcient for some
+ * validation implementations (i.e. SessionKeys often need access to userOp.calldata)
+ * @param userOp The user operation to be validated. The userOp MUST NOT contain any metadata.
+ * The MSA MUST clean up the userOp before sending it to the validator.
+ * @param userOpHash The hash of the user operation to be validated
+ * @return return value according to ERC-4337
+ */
+ function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash)
+ external
+ payable
+ returns (uint256);
+
+ /**
+ * Validator can be used for ERC-1271 validation
+ */
+ function isValidSignatureWithSender(address sender, bytes32 hash, bytes calldata data)
+ external
+ view
+ returns (bytes4);
+}
+
+interface IExecutor is IModule {}
+
+interface IHook is IModule {
+ /**
+ * @dev Called by the smart account before execution
+ * @param msgSender the address that called the smart account
+ * @param value the value that was sent to the smart account
+ * @param msgData the data that was sent to the smart account
+ *
+ * MAY return arbitrary data in the `hookData` return value
+ */
+ function preCheck(address msgSender, uint256 value, bytes calldata msgData)
+ external
+ payable
+ returns (bytes memory hookData);
+
+ /**
+ * @dev Called by the smart account after execution
+ * @param hookData the data that was returned by the `preCheck` function
+ * @param executionSuccess whether the execution(s) was (were) successful
+ * @param executionReturn the return/revert data of the execution(s)
+ *
+ * MAY validate the `hookData` to validate transaction context of the `preCheck` function
+ */
+ function postCheck(bytes calldata hookData, bool executionSuccess, bytes calldata executionReturn)
+ external
+ payable;
+}
+
+interface IFallback is IModule {}
+
+interface IPolicy is IModule {
+ function checkUserOpPolicy(bytes32 id, PackedUserOperation calldata userOp) external payable returns (uint256);
+ function checkSignaturePolicy(bytes32 id, address sender, bytes32 hash, bytes calldata sig)
+ external
+ view
+ returns (uint256);
+}
+
+interface ISigner is IModule {
+ function checkUserOpSignature(bytes32 id, PackedUserOperation calldata userOp, bytes32 userOpHash)
+ external
+ payable
+ returns (uint256);
+ function checkSignature(bytes32 id, address sender, bytes32 hash, bytes calldata sig)
+ external
+ view
+ returns (bytes4);
+}
diff --git a/src/interfaces/IEntryPoint.sol b/src/interfaces/IEntryPoint.sol
new file mode 100644
index 00000000..ccc5b965
--- /dev/null
+++ b/src/interfaces/IEntryPoint.sol
@@ -0,0 +1,193 @@
+// SPDX-License-Identifier: GPL-3.0
+/**
+ * Account-Abstraction (EIP-4337) singleton EntryPoint implementation.
+ * Only one instance required on each chain.
+ *
+ */
+pragma solidity >=0.7.5;
+
+/* solhint-disable avoid-low-level-calls */
+/* solhint-disable no-inline-assembly */
+/* solhint-disable reason-string */
+
+import "./PackedUserOperation.sol";
+import "./IStakeManager.sol";
+import "./IAggregator.sol";
+import "./INonceManager.sol";
+
+interface IEntryPoint is IStakeManager, INonceManager {
+ /**
+ *
+ * An event emitted after each successful request.
+ * @param userOpHash - Unique identifier for the request (hash its entire content, except signature).
+ * @param sender - The account that generates this request.
+ * @param paymaster - If non-null, the paymaster that pays for this request.
+ * @param nonce - The nonce value from the request.
+ * @param success - True if the sender transaction succeeded, false if reverted.
+ * @param actualGasCost - Actual amount paid (by account or paymaster) for this UserOperation.
+ * @param actualGasUsed - Total gas used by this UserOperation (including preVerification, creation,
+ * validation and execution).
+ */
+ event UserOperationEvent(
+ bytes32 indexed userOpHash,
+ address indexed sender,
+ address indexed paymaster,
+ uint256 nonce,
+ bool success,
+ uint256 actualGasCost,
+ uint256 actualGasUsed
+ );
+
+ /**
+ * Account "sender" was deployed.
+ * @param userOpHash - The userOp that deployed this account. UserOperationEvent will follow.
+ * @param sender - The account that is deployed
+ * @param factory - The factory used to deploy this account (in the initCode)
+ * @param paymaster - The paymaster used by this UserOp
+ */
+ event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster);
+
+ /**
+ * An event emitted if the UserOperation "callData" reverted with non-zero length.
+ * @param userOpHash - The request unique identifier.
+ * @param sender - The sender of this request.
+ * @param nonce - The nonce used in the request.
+ * @param revertReason - The return bytes from the (reverted) call to "callData".
+ */
+ event UserOperationRevertReason(
+ bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason
+ );
+
+ /**
+ * An event emitted if the UserOperation Paymaster's "postOp" call reverted with non-zero length.
+ * @param userOpHash - The request unique identifier.
+ * @param sender - The sender of this request.
+ * @param nonce - The nonce used in the request.
+ * @param revertReason - The return bytes from the (reverted) call to "callData".
+ */
+ event PostOpRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);
+
+ /**
+ * An event emitted by handleOps(), before starting the execution loop.
+ * Any event emitted before this event, is part of the validation.
+ */
+ event BeforeExecution();
+
+ /**
+ * Signature aggregator used by the following UserOperationEvents within this bundle.
+ * @param aggregator - The aggregator used for the following UserOperationEvents.
+ */
+ event SignatureAggregatorChanged(address indexed aggregator);
+
+ /**
+ * A custom revert error of handleOps, to identify the offending op.
+ * Should be caught in off-chain handleOps simulation and not happen on-chain.
+ * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts.
+ * NOTE: If simulateValidation passes successfully, there should be no reason for handleOps to fail on it.
+ * @param opIndex - Index into the array of ops to the failed one (in simulateValidation, this is always zero).
+ * @param reason - Revert reason. The string starts with a unique code "AAmn",
+ * where "m" is "1" for factory, "2" for account and "3" for paymaster issues,
+ * so a failure can be attributed to the correct entity.
+ */
+ error FailedOp(uint256 opIndex, string reason);
+
+ /**
+ * A custom revert error of handleOps, to report a revert by account or paymaster.
+ * @param opIndex - Index into the array of ops to the failed one (in simulateValidation, this is always zero).
+ * @param reason - Revert reason. see FailedOp(uint256,string), above
+ * @param inner - data from inner cought revert reason
+ * @dev note that inner is truncated to 2048 bytes
+ */
+ error FailedOpWithRevert(uint256 opIndex, string reason, bytes inner);
+
+ error PostOpReverted(bytes returnData);
+
+ /**
+ * Error case when a signature aggregator fails to verify the aggregated signature it had created.
+ * @param aggregator The aggregator that failed to verify the signature
+ */
+ error SignatureValidationFailed(address aggregator);
+
+ // Return value of getSenderAddress.
+ error SenderAddressResult(address sender);
+
+ // UserOps handled, per aggregator.
+ struct UserOpsPerAggregator {
+ PackedUserOperation[] userOps;
+ // Aggregator address
+ IAggregator aggregator;
+ // Aggregated signature
+ bytes signature;
+ }
+
+ /**
+ * Execute a batch of UserOperations.
+ * No signature aggregator is used.
+ * If any account requires an aggregator (that is, it returned an aggregator when
+ * performing simulateValidation), then handleAggregatedOps() must be used instead.
+ * @param ops - The operations to execute.
+ * @param beneficiary - The address to receive the fees.
+ */
+ function handleOps(PackedUserOperation[] calldata ops, address payable beneficiary) external;
+
+ /**
+ * Execute a batch of UserOperation with Aggregators
+ * @param opsPerAggregator - The operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts).
+ * @param beneficiary - The address to receive the fees.
+ */
+ function handleAggregatedOps(UserOpsPerAggregator[] calldata opsPerAggregator, address payable beneficiary)
+ external;
+
+ /**
+ * Generate a request Id - unique identifier for this request.
+ * The request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid.
+ * @param userOp - The user operation to generate the request ID for.
+ * @return hash the hash of this UserOperation
+ */
+ function getUserOpHash(PackedUserOperation calldata userOp) external view returns (bytes32);
+
+ /**
+ * Gas and return values during simulation.
+ * @param preOpGas - The gas used for validation (including preValidationGas)
+ * @param prefund - The required prefund for this operation
+ * @param accountValidationData - returned validationData from account.
+ * @param paymasterValidationData - return validationData from paymaster.
+ * @param paymasterContext - Returned by validatePaymasterUserOp (to be passed into postOp)
+ */
+ struct ReturnInfo {
+ uint256 preOpGas;
+ uint256 prefund;
+ uint256 accountValidationData;
+ uint256 paymasterValidationData;
+ bytes paymasterContext;
+ }
+
+ /**
+ * Returned aggregated signature info:
+ * The aggregator returned by the account, and its current stake.
+ */
+ struct AggregatorStakeInfo {
+ address aggregator;
+ StakeInfo stakeInfo;
+ }
+
+ /**
+ * Get counterfactual sender address.
+ * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation.
+ * This method always revert, and returns the address in SenderAddressResult error
+ * @param initCode - The constructor code to be passed into the UserOperation.
+ */
+ function getSenderAddress(bytes memory initCode) external;
+
+ error DelegateAndRevert(bool success, bytes ret);
+
+ /**
+ * Helper method for dry-run testing.
+ * @dev calling this method, the EntryPoint will make a delegatecall to the given data, and report (via revert) the result.
+ * The method always revert, so is only useful off-chain for dry run calls, in cases where state-override to replace
+ * actual EntryPoint code is less convenient.
+ * @param target a target contract to make a delegatecall from entrypoint
+ * @param data data to pass to target in a delegatecall
+ */
+ function delegateAndRevert(address target, bytes calldata data) external;
+}
diff --git a/src/interfaces/IEntryPointSimulations.sol b/src/interfaces/IEntryPointSimulations.sol
new file mode 100644
index 00000000..282011e9
--- /dev/null
+++ b/src/interfaces/IEntryPointSimulations.sol
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+import "./PackedUserOperation.sol";
+import "./IEntryPoint.sol";
+
+interface IEntryPointSimulations is IEntryPoint {
+ // Return value of simulateHandleOp.
+ struct ExecutionResult {
+ uint256 preOpGas;
+ uint256 paid;
+ uint256 accountValidationData;
+ uint256 paymasterValidationData;
+ bool targetSuccess;
+ bytes targetResult;
+ }
+
+ /**
+ * Successful result from simulateValidation.
+ * If the account returns a signature aggregator the "aggregatorInfo" struct is filled in as well.
+ * @param returnInfo Gas and time-range returned values
+ * @param senderInfo Stake information about the sender
+ * @param factoryInfo Stake information about the factory (if any)
+ * @param paymasterInfo Stake information about the paymaster (if any)
+ * @param aggregatorInfo Signature aggregation info (if the account requires signature aggregator)
+ * Bundler MUST use it to verify the signature, or reject the UserOperation.
+ */
+ struct ValidationResult {
+ ReturnInfo returnInfo;
+ StakeInfo senderInfo;
+ StakeInfo factoryInfo;
+ StakeInfo paymasterInfo;
+ AggregatorStakeInfo aggregatorInfo;
+ }
+
+ /**
+ * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp.
+ * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage
+ * outside the account's data.
+ * @param userOp - The user operation to validate.
+ * @return the validation result structure
+ */
+ function simulateValidation(PackedUserOperation calldata userOp) external returns (ValidationResult memory);
+
+ /**
+ * Simulate full execution of a UserOperation (including both validation and target execution)
+ * It performs full validation of the UserOperation, but ignores signature error.
+ * An optional target address is called after the userop succeeds,
+ * and its value is returned (before the entire call is reverted).
+ * Note that in order to collect the the success/failure of the target call, it must be executed
+ * with trace enabled to track the emitted events.
+ * @param op The UserOperation to simulate.
+ * @param target - If nonzero, a target address to call after userop simulation. If called,
+ * the targetSuccess and targetResult are set to the return from that call.
+ * @param targetCallData - CallData to pass to target address.
+ * @return the execution result structure
+ */
+ function simulateHandleOp(PackedUserOperation calldata op, address target, bytes calldata targetCallData)
+ external
+ returns (ExecutionResult memory);
+}
diff --git a/src/interfaces/IKernel.sol b/src/interfaces/IKernel.sol
deleted file mode 100644
index ec0b98d6..00000000
--- a/src/interfaces/IKernel.sol
+++ /dev/null
@@ -1,95 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-pragma solidity ^0.8.0;
-
-import {IKernelValidator} from "./IKernelValidator.sol";
-import {ExecutionDetail, Call} from "../common/Structs.sol";
-import {ValidationData, ValidUntil, ValidAfter} from "../common/Types.sol";
-import {Operation} from "../common/Enums.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-
-interface IKernel {
- // Event declarations
- event Upgraded(address indexed newImplementation);
-
- event DefaultValidatorChanged(address indexed oldValidator, address indexed newValidator);
-
- event ExecutionChanged(bytes4 indexed selector, address indexed executor, address indexed validator);
-
- // Error declarations
- error NotAuthorizedCaller();
-
- error AlreadyInitialized();
-
- error NotEntryPoint();
-
- error DisabledMode();
-
- error DeprecatedOperation();
-
- function initialize(IKernelValidator _validator, bytes calldata _data) external payable;
-
- function upgradeTo(address _newImplementation) external payable;
-
- function getNonce() external view returns (uint256);
-
- function getNonce(uint192 key) external view returns (uint256);
-
- function getDefaultValidator() external view returns (IKernelValidator);
-
- function getDisabledMode() external view returns (bytes4 disabled);
-
- function getLastDisabledTime() external view returns (uint48);
-
- /// @notice Returns the execution details for a specific function signature
- /// @dev This function can be used to get execution details for a specific function signature
- /// @param _selector The function signature
- /// @return ExecutionDetail struct containing the execution details
- function getExecution(bytes4 _selector) external view returns (ExecutionDetail memory);
-
- /// @notice Changes the execution details for a specific function selector
- /// @dev This function can only be called from the EntryPoint contract, the contract owner, or itself
- /// @param _selector The selector of the function for which execution details are being set
- /// @param _executor The executor to be associated with the function selector
- /// @param _validator The validator contract that will be responsible for validating operations associated with this function selector
- /// @param _validUntil The timestamp until which the execution details are valid
- /// @param _validAfter The timestamp after which the execution details are valid
- function setExecution(
- bytes4 _selector,
- address _executor,
- IKernelValidator _validator,
- ValidUntil _validUntil,
- ValidAfter _validAfter,
- bytes calldata _enableData
- ) external payable;
-
- function setDefaultValidator(IKernelValidator _defaultValidator, bytes calldata _data) external payable;
-
- /// @notice Updates the disabled mode
- /// @dev This function can be used to update the disabled mode
- /// @param _disableFlag The new disabled mode
- function disableMode(bytes4 _disableFlag) external payable;
-
- /// @notice Executes a function call to an external contract
- /// @dev The type of operation (call or delegatecall) is specified as an argument.
- /// @param to The address of the target contract
- /// @param value The amount of Ether to send
- /// @param data The call data to be sent
- /// operation deprecated operation type, usere executeBatch for batch operation
- function execute(address to, uint256 value, bytes memory data, Operation) external payable;
-
- function executeBatch(Call[] memory calls) external payable;
-
- function executeDelegateCall(address to, bytes memory data) external payable;
-
- /// @notice Validates a user operation based on its mode
- /// @dev This function will validate user operation and be called by EntryPoint
- /// @param userOp The user operation to be validated
- /// @param userOpHash The hash of the user operation
- /// @param missingAccountFunds The funds needed to be reimbursed
- /// @return validationData The data used for validation
- function validateUserOp(UserOperation memory userOp, bytes32 userOpHash, uint256 missingAccountFunds)
- external
- payable
- returns (ValidationData validationData);
-}
diff --git a/src/interfaces/IKernelValidator.sol b/src/interfaces/IKernelValidator.sol
deleted file mode 100644
index 4544c92b..00000000
--- a/src/interfaces/IKernelValidator.sol
+++ /dev/null
@@ -1,27 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import "../common/Types.sol";
-
-interface IKernelValidator {
- error NotImplemented();
-
- function enable(bytes calldata _data) external payable;
-
- function disable(bytes calldata _data) external payable;
-
- function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds)
- external
- payable
- returns (ValidationData);
-
- function validateSignature(bytes32 hash, bytes calldata signature) external view returns (ValidationData);
-
- function validCaller(address caller, bytes calldata data) external view returns (bool);
-}
-
-// 3 modes
-// 1. default mode, use preset validator for the kernel
-// 2. enable mode, enable a new validator for given action and use it for current userOp
-// 3. sudo mode, use default plugin for current userOp
diff --git a/src/interfaces/INonceManager.sol b/src/interfaces/INonceManager.sol
new file mode 100644
index 00000000..2a5a2725
--- /dev/null
+++ b/src/interfaces/INonceManager.sol
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+interface INonceManager {
+ /**
+ * Return the next nonce for this sender.
+ * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop)
+ * But UserOp with different keys can come with arbitrary order.
+ *
+ * @param sender the account address
+ * @param key the high 192 bit of the nonce
+ * @return nonce a full nonce to pass for next UserOp with this sender.
+ */
+ function getNonce(address sender, uint192 key) external view returns (uint256 nonce);
+
+ /**
+ * Manually increment the nonce of the sender.
+ * This method is exposed just for completeness..
+ * Account does NOT need to call it, neither during validation, nor elsewhere,
+ * as the EntryPoint will update the nonce regardless.
+ * Possible use-case is call it with various keys to "initialize" their nonces to one, so that future
+ * UserOperations will not pay extra for the first transaction with a given key.
+ */
+ function incrementNonce(uint192 key) external;
+}
diff --git a/src/interfaces/IPaymaster.sol b/src/interfaces/IPaymaster.sol
new file mode 100644
index 00000000..04a91685
--- /dev/null
+++ b/src/interfaces/IPaymaster.sol
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+import "./PackedUserOperation.sol";
+
+/**
+ * The interface exposed by a paymaster contract, who agrees to pay the gas for user's operations.
+ * A paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction.
+ */
+interface IPaymaster {
+ enum PostOpMode {
+ // User op succeeded.
+ opSucceeded,
+ // User op reverted. Still has to pay for gas.
+ opReverted,
+ // Only used internally in the EntryPoint (cleanup after postOp reverts). Never calling paymaster with this value
+ postOpReverted
+ }
+
+ /**
+ * Payment validation: check if paymaster agrees to pay.
+ * Must verify sender is the entryPoint.
+ * Revert to reject this request.
+ * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted).
+ * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.
+ * @param userOp - The user operation.
+ * @param userOpHash - Hash of the user's request data.
+ * @param maxCost - The maximum cost of this transaction (based on maximum gas and gas price from userOp).
+ * @return context - Value to send to a postOp. Zero length to signify postOp is not required.
+ * @return validationData - Signature and time-range of this operation, encoded the same as the return
+ * value of validateUserOperation.
+ * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,
+ * other values are invalid for paymaster.
+ * <6-byte> validUntil - last timestamp this operation is valid. 0 for "indefinite"
+ * <6-byte> validAfter - first timestamp this operation is valid
+ * Note that the validation code cannot use block.timestamp (or block.number) directly.
+ */
+ function validatePaymasterUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost)
+ external
+ returns (bytes memory context, uint256 validationData);
+
+ /**
+ * Post-operation handler.
+ * Must verify sender is the entryPoint.
+ * @param mode - Enum with the following options:
+ * opSucceeded - User operation succeeded.
+ * opReverted - User op reverted. The paymaster still has to pay for gas.
+ * postOpReverted - never passed in a call to postOp().
+ * @param context - The context value returned by validatePaymasterUserOp
+ * @param actualGasCost - Actual gas used so far (without this postOp call).
+ * @param actualUserOpFeePerGas - the gas price this UserOp pays. This value is based on the UserOp's maxFeePerGas
+ * and maxPriorityFee (and basefee)
+ * It is not the same as tx.gasprice, which is what the bundler pays.
+ */
+ function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost, uint256 actualUserOpFeePerGas)
+ external;
+}
diff --git a/src/interfaces/IStakeManager.sol b/src/interfaces/IStakeManager.sol
new file mode 100644
index 00000000..01612d9c
--- /dev/null
+++ b/src/interfaces/IStakeManager.sol
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: GPL-3.0-only
+pragma solidity >=0.7.5;
+
+/**
+ * Manage deposits and stakes.
+ * Deposit is just a balance used to pay for UserOperations (either by a paymaster or an account).
+ * Stake is value locked for at least "unstakeDelay" by the staked entity.
+ */
+interface IStakeManager {
+ event Deposited(address indexed account, uint256 totalDeposit);
+
+ event Withdrawn(address indexed account, address withdrawAddress, uint256 amount);
+
+ // Emitted when stake or unstake delay are modified.
+ event StakeLocked(address indexed account, uint256 totalStaked, uint256 unstakeDelaySec);
+
+ // Emitted once a stake is scheduled for withdrawal.
+ event StakeUnlocked(address indexed account, uint256 withdrawTime);
+
+ event StakeWithdrawn(address indexed account, address withdrawAddress, uint256 amount);
+
+ /**
+ * @param deposit - The entity's deposit.
+ * @param staked - True if this entity is staked.
+ * @param stake - Actual amount of ether staked for this entity.
+ * @param unstakeDelaySec - Minimum delay to withdraw the stake.
+ * @param withdrawTime - First block timestamp where 'withdrawStake' will be callable, or zero if already locked.
+ * @dev Sizes were chosen so that deposit fits into one cell (used during handleOp)
+ * and the rest fit into a 2nd cell (used during stake/unstake)
+ * - 112 bit allows for 10^15 eth
+ * - 48 bit for full timestamp
+ * - 32 bit allows 150 years for unstake delay
+ */
+ struct DepositInfo {
+ uint256 deposit;
+ bool staked;
+ uint112 stake;
+ uint32 unstakeDelaySec;
+ uint48 withdrawTime;
+ }
+
+ // API struct used by getStakeInfo and simulateValidation.
+ struct StakeInfo {
+ uint256 stake;
+ uint256 unstakeDelaySec;
+ }
+
+ /**
+ * Get deposit info.
+ * @param account - The account to query.
+ * @return info - Full deposit information of given account.
+ */
+ function getDepositInfo(address account) external view returns (DepositInfo memory info);
+
+ /**
+ * Get account balance.
+ * @param account - The account to query.
+ * @return - The deposit (for gas payment) of the account.
+ */
+ function balanceOf(address account) external view returns (uint256);
+
+ /**
+ * Add to the deposit of the given account.
+ * @param account - The account to add to.
+ */
+ function depositTo(address account) external payable;
+
+ /**
+ * Add to the account's stake - amount and delay
+ * any pending unstake is first cancelled.
+ * @param _unstakeDelaySec - The new lock duration before the deposit can be withdrawn.
+ */
+ function addStake(uint32 _unstakeDelaySec) external payable;
+
+ /**
+ * Attempt to unlock the stake.
+ * The value can be withdrawn (using withdrawStake) after the unstake delay.
+ */
+ function unlockStake() external;
+
+ /**
+ * Withdraw from the (unlocked) stake.
+ * Must first call unlockStake and wait for the unstakeDelay to pass.
+ * @param withdrawAddress - The address to send withdrawn value.
+ */
+ function withdrawStake(address payable withdrawAddress) external;
+
+ /**
+ * Withdraw from the deposit.
+ * @param withdrawAddress - The address to send withdrawn value.
+ * @param withdrawAmount - The amount to withdraw.
+ */
+ function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;
+}
diff --git a/src/interfaces/PackedUserOperation.sol b/src/interfaces/PackedUserOperation.sol
new file mode 100644
index 00000000..7d455b27
--- /dev/null
+++ b/src/interfaces/PackedUserOperation.sol
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-3.0
+pragma solidity >=0.7.5;
+
+/**
+ * User Operation struct
+ * @param sender - The sender account of this request.
+ * @param nonce - Unique value the sender uses to verify it is not a replay.
+ * @param initCode - If set, the account contract will be created by this constructor/
+ * @param callData - The method call to execute on this account.
+ * @param accountGasLimits - Packed gas limits for validateUserOp and gas limit passed to the callData method call.
+ * @param preVerificationGas - Gas not calculated by the handleOps method, but added to the gas paid.
+ * Covers batch overhead.
+ * @param gasFees - packed gas fields maxFeePerGas and maxPriorityFeePerGas - Same as EIP-1559 gas parameter.
+ * @param paymasterAndData - If set, this field holds the paymaster address, verification gas limit, postOp gas limit and paymaster-specific extra data
+ * The paymaster will pay for the transaction instead of the sender.
+ * @param signature - Sender-verified signature over the entire request, the EntryPoint address and the chain ID.
+ */
+struct PackedUserOperation {
+ address sender;
+ uint256 nonce;
+ bytes initCode;
+ bytes callData;
+ bytes32 accountGasLimits;
+ uint256 preVerificationGas;
+ bytes32 gasFees; //maxPriorityFee and maxFeePerGas;
+ bytes paymasterAndData;
+ bytes signature;
+}
diff --git a/src/lite/KernelLiteECDSA.sol b/src/lite/KernelLiteECDSA.sol
deleted file mode 100644
index ee42efe1..00000000
--- a/src/lite/KernelLiteECDSA.sol
+++ /dev/null
@@ -1,94 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {Kernel} from "../Kernel.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {ValidationData} from "../common/Types.sol";
-import {SIG_VALIDATION_FAILED, KERNEL_STORAGE_SLOT_1} from "../common/Constants.sol";
-import {ExecutionDetail} from "../common/Structs.sol";
-import {packValidationData} from "../common/Types.sol";
-import {_intersectValidationData} from "../utils/KernelHelper.sol";
-
-struct KernelLiteECDSAStorage {
- address owner;
-}
-
-/// @title KernelLiteECDSA Contract
-/// @dev A lite version of the Kernel contract which only uses ECDSA signatures for validation
-contract KernelLiteECDSA is Kernel {
- error InvalidAccess();
- error InvalidValidator();
-
- address public immutable KERNEL_ECDSA_VALIDATOR;
-
- /// @dev The storage slot for this contract
- bytes32 private constant KERNEL_LITE_ECDSA_STORAGE_SLOT =
- 0xdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e97; // keccak256(abi.encodePacked("zerodev.kernel.lite.ecdsa")) - 1
-
- constructor(IEntryPoint _entryPoint, IKernelValidator _ecdsaValidator) Kernel(_entryPoint) {
- KERNEL_ECDSA_VALIDATOR = address(_ecdsaValidator);
- getKernelLiteECDSAStorage().owner = address(1); // set owner to non-zero address to prevent initialization
- }
-
- /// @dev Transfer the ownership of this current kernel
- function transferOwnership(address _newOwner) external payable onlyFromEntryPointOrSelf {
- getKernelLiteECDSAStorage().owner = _newOwner;
- }
-
- // FOR KERNEL USAGE
- function getKernelLiteECDSAStorage() internal pure returns (KernelLiteECDSAStorage storage s) {
- assembly {
- s.slot := KERNEL_LITE_ECDSA_STORAGE_SLOT
- }
- }
-
- /// @dev Set the initial data for this kernel (setup ecdsa signer address)
- function _setInitialData(IKernelValidator _validator, bytes calldata _data) internal override {
- // Ensure the validator is valid
- if (address(_validator) != KERNEL_ECDSA_VALIDATOR) revert InvalidValidator();
- // Ensure the account isn't already initialized
- if (getKernelLiteECDSAStorage().owner != address(0)) revert AlreadyInitialized();
-
- address owner = address(bytes20(_data[0:20]));
- getKernelLiteECDSAStorage().owner = owner;
- }
-
- /// @dev Validate a user operation
- function _validateUserOp(UserOperation calldata _op, bytes32 _opHash, uint256)
- internal
- view
- override
- returns (ValidationData)
- {
- address signed = ECDSA.recover(ECDSA.toEthSignedMessageHash(_opHash), _op.signature[4:]); // note that first 4 bytes are for modes
- if (signed != getKernelLiteECDSAStorage().owner) {
- return SIG_VALIDATION_FAILED;
- }
- return ValidationData.wrap(0);
- }
-
- /// @dev Validate a signature
- function _validateSignature(address, /*_requestor*/ bytes32 _hash, bytes32, /*_rawHash*/ bytes calldata _signature)
- internal
- view
- override
- returns (ValidationData)
- {
- address signed = ECDSA.recover(ECDSA.toEthSignedMessageHash(_hash), _signature);
- if (signed == getKernelLiteECDSAStorage().owner) {
- return ValidationData.wrap(0);
- }
- return SIG_VALIDATION_FAILED;
- }
-
- /// @dev Check if the caller is valid
- function _validCaller(address _caller, bytes calldata) internal view override returns (bool) {
- return _caller == getKernelLiteECDSAStorage().owner;
- }
-
- function setDefaultValidator(IKernelValidator, bytes calldata) external payable override onlyFromEntryPointOrSelf {
- revert("not implemented");
- }
-}
diff --git a/src/mock/MockAction.sol b/src/mock/MockAction.sol
new file mode 100644
index 00000000..dd31e1dc
--- /dev/null
+++ b/src/mock/MockAction.sol
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+contract MockAction {
+ event MockActionEvent(address here);
+
+ function onInstall(bytes calldata data) external payable {}
+
+ function onUninstall(bytes calldata data) external payable {}
+
+ function isModuleType(uint256 moduleTypeId) external view returns (bool) {}
+
+ function isInitialized(address smartAccount) external view returns (bool) {}
+
+ function doSomething() external {
+ emit MockActionEvent(address(this));
+ }
+}
diff --git a/src/mock/MockExecutor.sol b/src/mock/MockExecutor.sol
new file mode 100644
index 00000000..7f286e37
--- /dev/null
+++ b/src/mock/MockExecutor.sol
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IExecutor} from "../interfaces/IERC7579Modules.sol";
+import {IERC7579Account, ExecMode} from "../interfaces/IERC7579Account.sol";
+
+contract MockExecutor is IExecutor {
+ mapping(address => bytes) public data;
+
+ function onInstall(bytes calldata _data) external payable override {
+ data[msg.sender] = _data;
+ }
+
+ function onUninstall(bytes calldata) external payable override {
+ delete data[msg.sender];
+ }
+
+ function isModuleType(uint256 moduleTypeId) external pure override returns (bool) {
+ return moduleTypeId == 2;
+ }
+
+ function isInitialized(address smartAccount) external view override returns (bool) {
+ return data[smartAccount].length > 0;
+ }
+
+ function sudoDoExec(IERC7579Account account, ExecMode mode, bytes calldata executionCalldata) external payable {
+ account.executeFromExecutor(mode, executionCalldata);
+ }
+}
diff --git a/src/mock/MockFallback.sol b/src/mock/MockFallback.sol
new file mode 100644
index 00000000..f8fc4231
--- /dev/null
+++ b/src/mock/MockFallback.sol
@@ -0,0 +1,71 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IERC7579Account} from "../interfaces/IERC7579Account.sol";
+import {IFallback} from "../interfaces/IERC7579Modules.sol";
+import {CallType, ExecType, ExecMode, ExecLib} from "../utils/ExecLib.sol";
+import {EXEC_MODE_DEFAULT} from "../types/Constants.sol";
+
+contract Callee {
+ address public lastCaller;
+
+ function calleeTest() external {
+ lastCaller = msg.sender;
+ }
+}
+
+contract MockFallback is IFallback {
+ mapping(address => bytes) public data;
+
+ uint256 public valueStored;
+
+ bool isExecutor;
+
+ Callee public callee;
+
+ constructor() {
+ callee = new Callee();
+ }
+
+ function setExecutorMode(bool _isExecutor) external payable {
+ isExecutor = _isExecutor;
+ }
+
+ function onInstall(bytes calldata _data) external payable override {
+ data[msg.sender] = _data;
+ }
+
+ function onUninstall(bytes calldata) external payable override {
+ delete data[msg.sender];
+ }
+
+ function isModuleType(uint256 moduleTypeId) external view override returns (bool) {
+ return moduleTypeId == 3 || (isExecutor && moduleTypeId == 2);
+ }
+
+ function isInitialized(address smartAccount) external view override returns (bool) {
+ return data[smartAccount].length > 0;
+ }
+
+ function fallbackFunction(uint256 v) external pure returns (uint256) {
+ return v * v;
+ }
+
+ function getData() external view returns (bytes memory) {
+ return data[msg.sender];
+ }
+
+ function getCaller() external pure returns (address) {
+ return address(bytes20(msg.data[msg.data.length - 20:]));
+ }
+
+ function setData(uint256 value) external {
+ valueStored = value;
+ if (isExecutor) {
+ IERC7579Account(msg.sender).executeFromExecutor(
+ ExecLib.encodeSimpleSingle(),
+ ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(Callee.calleeTest.selector))
+ );
+ }
+ }
+}
diff --git a/src/mock/MockHook.sol b/src/mock/MockHook.sol
new file mode 100644
index 00000000..7acaadac
--- /dev/null
+++ b/src/mock/MockHook.sol
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IHook} from "../interfaces/IERC7579Modules.sol";
+
+contract MockHook is IHook {
+ mapping(address => bytes) public data;
+ mapping(address => bytes) public preHookData;
+ mapping(address => bytes) public postHookData;
+
+ function onInstall(bytes calldata _data) external payable override {
+ data[msg.sender] = _data;
+ }
+
+ function onUninstall(bytes calldata) external payable override {
+ delete data[msg.sender];
+ }
+
+ function isModuleType(uint256 moduleTypeId) external pure override returns (bool) {
+ return moduleTypeId == 1;
+ }
+
+ function isInitialized(address smartAccount) external view override returns (bool) {
+ return data[smartAccount].length > 0;
+ }
+
+ function preCheck(address msgSender, uint256 value, bytes calldata msgData)
+ external
+ payable
+ override
+ returns (bytes memory hookData)
+ {
+ preHookData[msg.sender] = abi.encodePacked(msgSender, msgData);
+ return data[msg.sender];
+ }
+
+ function postCheck(bytes calldata hookData, bool success, bytes memory res) external payable override {
+ postHookData[msg.sender] = hookData;
+ }
+}
diff --git a/src/mock/MockPolicy.sol b/src/mock/MockPolicy.sol
new file mode 100644
index 00000000..a4a9fdd8
--- /dev/null
+++ b/src/mock/MockPolicy.sol
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {IPolicy} from "../interfaces/IERC7579Modules.sol";
+import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol";
+import "forge-std/console.sol";
+
+contract MockPolicy is IPolicy {
+ mapping(address => mapping(bytes32 => bool)) public pass;
+ mapping(address => bytes) public installData;
+ mapping(address => mapping(bytes32 => bytes)) public sig;
+
+ function onInstall(bytes calldata data) external payable override {
+ installData[msg.sender] = data;
+ }
+
+ function onUninstall(bytes calldata) external payable override {}
+
+ function sudoSetValidSig(address _wallet, bytes32 _id, bytes calldata _sig) external payable {
+ sig[_wallet][_id] = _sig;
+ }
+
+ function sudoSetPass(address _wallet, bytes32 _id, bool _pass) external payable {
+ pass[_wallet][_id] = _pass;
+ }
+
+ function isModuleType(uint256 moduleTypeId) external pure override returns (bool) {
+ return moduleTypeId == 5;
+ }
+
+ function isInitialized(address smartAccount) external view override returns (bool) {
+ return installData[smartAccount].length > 0;
+ }
+
+ function checkUserOpPolicy(bytes32 id, PackedUserOperation calldata userOp)
+ external
+ payable
+ override
+ returns (uint256)
+ {
+ return keccak256(userOp.signature) == keccak256(sig[msg.sender][id]) ? 0 : 1;
+ }
+
+ function checkSignaturePolicy(bytes32 id, address, bytes32, bytes calldata)
+ external
+ view
+ override
+ returns (uint256)
+ {
+ return pass[msg.sender][id] ? 0 : 1;
+ }
+}
diff --git a/src/mock/MockSigner.sol b/src/mock/MockSigner.sol
new file mode 100644
index 00000000..f082a330
--- /dev/null
+++ b/src/mock/MockSigner.sol
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../interfaces/IERC7579Modules.sol";
+
+contract MockSigner is ISigner {
+ mapping(address wallet => bytes) public data;
+ mapping(address => mapping(bytes32 => bytes)) public sig;
+ mapping(address => mapping(bytes32 => bool)) public pass;
+
+ function sudoSetValidSig(address _wallet, bytes32 _id, bytes calldata _sig) external payable {
+ sig[_wallet][_id] = _sig;
+ }
+
+ function sudoSetPass(address _wallet, bytes32 _id, bool _flag) external payable {
+ pass[_wallet][_id] = _flag;
+ }
+
+ function onInstall(bytes calldata _data) external payable override {
+ data[msg.sender] = _data;
+ }
+
+ function onUninstall(bytes calldata) external payable override {}
+
+ function isModuleType(uint256 moduleTypeId) external pure override returns (bool) {
+ if (moduleTypeId == 7) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function isInitialized(address smartAccount) external view override returns (bool) {
+ return data[smartAccount].length > 0;
+ }
+
+ function checkUserOpSignature(bytes32 id, PackedUserOperation calldata userOp, bytes32)
+ external
+ payable
+ override
+ returns (uint256)
+ {
+ return keccak256(userOp.signature) == keccak256(sig[msg.sender][id]) ? 0 : 1;
+ }
+
+ function checkSignature(bytes32 id, address, bytes32, bytes calldata) external view override returns (bytes4) {
+ if (pass[msg.sender][id] == true) {
+ return 0x1626ba7e;
+ } else {
+ return 0xffffffff;
+ }
+ }
+}
diff --git a/src/mock/MockValidator.sol b/src/mock/MockValidator.sol
new file mode 100644
index 00000000..7e221212
--- /dev/null
+++ b/src/mock/MockValidator.sol
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import "../interfaces/IERC7579Modules.sol";
+
+contract MockValidator is IValidator, IHook {
+ mapping(address => bool) public initialized;
+ bool public success;
+ uint256 public count;
+
+ mapping(address => bytes) public validatorData;
+ mapping(bytes32 => bool) public validSig;
+
+ bool public isHook;
+
+ function setHook(bool _isHook) external {
+ isHook = _isHook;
+ }
+
+ function sudoSetSuccess(bool _success) external {
+ success = _success;
+ }
+
+ function sudoSetValidSig(bytes calldata sig) external {
+ validSig[keccak256(sig)] = true;
+ }
+
+ function onInstall(bytes calldata data) external payable {
+ initialized[msg.sender] = true;
+ validatorData[msg.sender] = data;
+ }
+
+ function onUninstall(bytes calldata data) external payable {
+ initialized[msg.sender] = false;
+ validatorData[msg.sender] = data;
+ }
+
+ function isModuleType(uint256 typeID) external pure returns (bool) {
+ return typeID == 1;
+ }
+
+ /**
+ * @dev Returns if the module was already initialized for a provided smartaccount
+ */
+ function isInitialized(address smartAccount) external view returns (bool) {
+ return initialized[smartAccount];
+ }
+
+ function validateUserOp(PackedUserOperation calldata, bytes32) external payable returns (uint256) {
+ count++;
+
+ if (success) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ function isValidSignatureWithSender(address, bytes32, bytes calldata sig) external view returns (bytes4) {
+ if (validSig[keccak256(sig)] == true) {
+ return 0x1626ba7e;
+ } else {
+ return 0xffffffff;
+ }
+ }
+
+ function preCheck(address msgSender, uint256 value, bytes calldata msgData)
+ external
+ payable
+ returns (bytes memory hookData)
+ {
+ return hex"";
+ }
+
+ function postCheck(bytes calldata hookData, bool executionSuccess, bytes calldata executionReturn)
+ external
+ payable
+ {
+ return;
+ }
+}
diff --git a/src/mock/TestCallee.sol b/src/mock/TestCallee.sol
deleted file mode 100644
index d23830f2..00000000
--- a/src/mock/TestCallee.sol
+++ /dev/null
@@ -1,39 +0,0 @@
-pragma solidity ^0.8.0;
-
-contract TestCallee {
- uint256 public result;
- address public caller;
- uint256 public sent;
- bytes public message;
-
- receive() external payable {}
-
- fallback() external payable {
- message = msg.data;
- sent = msg.value;
- caller = msg.sender;
- }
-
- function test_ignore() external {}
-
- function addTester(uint256 a, uint256 b) external payable {
- result = a + b + msg.value;
- }
-
- function transferErc20Tester(address token, address to, uint256 amount) external {
- (bool success, bytes memory data) = token.call(abi.encodeWithSignature("transfer(address,uint256)", to, amount));
- require(success, string(data));
- }
-
- function returnLong() external payable returns (string memory) {
- return
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent nec nunc sed nisi sollicitudin suscipit at at nulla. Aenean porttitor tellus felis, dapibus lacinia elit ullamcorper id. Ut dapibus efficitur neque posuere varius. Aenean in sem ac dolor accumsan egestas ut sit amet arcu. Vestibulum nunc urna, imperdiet ut enim eu, venenatis placerat mi. Aliquam a nibh a augue sollicitudin rutrum. Donec eleifend semper elit eu facilisis.";
- }
-
- function returnLongBytes() external payable returns (bytes memory) {
- return
- hex"0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
- }
-
- function notThis() external {}
-}
diff --git a/src/mock/TestCounter.sol b/src/mock/TestCounter.sol
deleted file mode 100644
index 9288084a..00000000
--- a/src/mock/TestCounter.sol
+++ /dev/null
@@ -1,13 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-pragma solidity ^0.8.0;
-
-contract TestCounter {
- uint256 public counter;
-
- function test_ignore() public {}
-
- function increment() public {
- counter += 1;
- }
-}
diff --git a/src/mock/TestERC1155.sol b/src/mock/TestERC1155.sol
deleted file mode 100644
index 3646fe69..00000000
--- a/src/mock/TestERC1155.sol
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "solady/tokens/ERC1155.sol";
-
-contract TestERC1155 is ERC1155 {
- function test_ignore() public {}
-
- function uri(uint256) public pure override returns (string memory) {
- return "https://example.com";
- }
-
- function mint(address to, uint256 id, uint256 amount, bytes memory data) public {
- _mint(to, id, amount, data);
- }
-
- function batchMint(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public {
- _batchMint(to, ids, amounts, data);
- }
-}
diff --git a/src/mock/TestERC20.sol b/src/mock/TestERC20.sol
deleted file mode 100644
index 7390bd79..00000000
--- a/src/mock/TestERC20.sol
+++ /dev/null
@@ -1,22 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "solady/tokens/ERC20.sol";
-
-contract TestERC20 is ERC20 {
- constructor() ERC20() {}
-
- function test_ignore() public {}
-
- function name() public pure override returns (string memory) {
- return "TestERC20";
- }
-
- function symbol() public pure override returns (string memory) {
- return "TST";
- }
-
- function mint(address _to, uint256 _amount) external {
- _mint(_to, _amount);
- }
-}
diff --git a/src/mock/TestERC721.sol b/src/mock/TestERC721.sol
deleted file mode 100644
index 703433f8..00000000
--- a/src/mock/TestERC721.sol
+++ /dev/null
@@ -1,30 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "solady/tokens/ERC721.sol";
-
-contract TestERC721 is ERC721 {
- constructor() ERC721() {}
-
- function test_ignore() public {}
-
- function name() public pure override returns (string memory) {
- return "TestERC721";
- }
-
- function symbol() public pure override returns (string memory) {
- return "TEST";
- }
-
- function tokenURI(uint256) public pure override returns (string memory) {
- return "";
- }
-
- function mint(address _to, uint256 _id) external {
- _mint(_to, _id);
- }
-
- function safeMint(address _to, uint256 _id) external {
- _safeMint(_to, _id);
- }
-}
diff --git a/src/mock/TestExecutor.sol b/src/mock/TestExecutor.sol
deleted file mode 100644
index 72650740..00000000
--- a/src/mock/TestExecutor.sol
+++ /dev/null
@@ -1,13 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-contract TestExecutor {
- event TestExecutorDoNothing();
-
- function test_ignore() public {}
-
- function doNothing() external {
- // do nothing
- emit TestExecutorDoNothing();
- }
-}
diff --git a/src/mock/TestKernel.sol b/src/mock/TestKernel.sol
deleted file mode 100644
index 48a04ad1..00000000
--- a/src/mock/TestKernel.sol
+++ /dev/null
@@ -1,16 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "../Kernel.sol";
-
-contract TestKernel is Kernel {
- constructor(IEntryPoint _entryPoint) Kernel(_entryPoint) {}
-
- function test_ignore() public {}
-
- function sudoInitialize(IKernelValidator _defaultValidator, bytes calldata _data) external payable {
- WalletKernelStorage storage ws = getKernelStorage();
- ws.defaultValidator = _defaultValidator;
- emit DefaultValidatorChanged(address(0), address(_defaultValidator));
- _defaultValidator.enable(_data);
- }
-}
diff --git a/src/mock/TestPaymaster.sol b/src/mock/TestPaymaster.sol
deleted file mode 100644
index 672335d4..00000000
--- a/src/mock/TestPaymaster.sol
+++ /dev/null
@@ -1,20 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "I4337/interfaces/IPaymaster.sol";
-
-contract TestPaymaster is IPaymaster {
- function test_ignore() external {}
-
- function validatePaymasterUserOp(UserOperation calldata, bytes32, uint256)
- external
- pure
- override
- returns (bytes memory context, uint256 validationData)
- {
- return ("", 0);
- }
-
- function postOp(PostOpMode, bytes calldata, uint256) external pure {
- revert("");
- }
-}
diff --git a/src/mock/TestValidator.sol b/src/mock/TestValidator.sol
deleted file mode 100644
index dad5d27e..00000000
--- a/src/mock/TestValidator.sol
+++ /dev/null
@@ -1,55 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "../interfaces/IKernelValidator.sol";
-import "../common/Types.sol";
-import "../utils/KernelHelper.sol";
-import "../common/Constants.sol";
-
-contract TestValidator is IKernelValidator {
- event TestValidateUserOp(bytes32 indexed opHash);
- event TestEnable(bytes data);
- event TestDisable(bytes data);
-
- mapping(address kernel => address) public caller;
-
- ValidationData public data;
-
- function test_ignore() public {}
-
- function sudoSetCaller(address _kernel, address _caller) external {
- caller[_kernel] = _caller;
- }
-
- function setData(bool success, uint48 validAfter, uint48 validUntil) external {
- data = success
- ? packValidationData(ValidAfter.wrap(validAfter), ValidUntil.wrap(validUntil))
- : SIG_VALIDATION_FAILED;
- }
-
- function validateSignature(bytes32, bytes calldata) external view override returns (ValidationData) {
- return data;
- }
-
- function validateUserOp(UserOperation calldata, bytes32 userOpHash, uint256)
- external
- payable
- override
- returns (ValidationData)
- {
- emit TestValidateUserOp(userOpHash);
- return ValidationData.wrap(0);
- }
-
- function enable(bytes calldata _data) external payable override {
- emit TestEnable(_data);
- }
-
- function disable(bytes calldata _data) external payable override {
- emit TestDisable(_data);
- }
-
- function validCaller(address _caller, bytes calldata) external view override returns (bool) {
- return _caller == caller[msg.sender];
- }
-}
diff --git a/src/sdk/ModuleStorageLib.sol b/src/sdk/ModuleStorageLib.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/ModuleStorageLib.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/ActionTestBase.sol b/src/sdk/TestBase/ActionTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/ActionTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/ExecutorTestBase.sol b/src/sdk/TestBase/ExecutorTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/ExecutorTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/FallbackTestBase.sol b/src/sdk/TestBase/FallbackTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/FallbackTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/HookTestBase.sol b/src/sdk/TestBase/HookTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/HookTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/KernelTestBase.sol b/src/sdk/TestBase/KernelTestBase.sol
new file mode 100644
index 00000000..6c0d334d
--- /dev/null
+++ b/src/sdk/TestBase/KernelTestBase.sol
@@ -0,0 +1,877 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import "src/Kernel.sol";
+import "src/factory/KernelFactory.sol";
+import "src/factory/FactoryStaker.sol";
+import "forge-std/Test.sol";
+import "src/mock/MockValidator.sol";
+import "src/mock/MockPolicy.sol";
+import "src/mock/MockSigner.sol";
+import "src/mock/MockAction.sol";
+import "src/mock/MockHook.sol";
+import "src/mock/MockExecutor.sol";
+import "src/mock/MockFallback.sol";
+import "src/core/ValidationManager.sol";
+import "./erc4337Util.sol";
+
+contract MockCallee {
+ uint256 public value;
+
+ function setValue(uint256 _value) public {
+ value = _value;
+ }
+}
+
+abstract contract KernelTestBase is Test {
+ address stakerOwner;
+ Kernel kernel;
+ KernelFactory factory;
+ FactoryStaker staker;
+ IEntryPoint entrypoint;
+ ValidationId rootValidation;
+
+ struct RootValidationConfig {
+ IHook hook;
+ bytes validatorData;
+ bytes hookData;
+ }
+
+ RootValidationConfig rootValidationConfig;
+ MockValidator mockValidator;
+ MockCallee callee;
+ MockHook mockHook;
+ MockFallback mockFallback;
+ MockExecutor mockExecutor;
+
+ IValidator enabledValidator;
+ EnableValidatorConfig validationConfig;
+
+ struct EnableValidatorConfig {
+ IHook hook;
+ bytes hookData;
+ bytes validatorData;
+ }
+
+ PermissionId enabledPermission;
+ EnablePermissionConfig permissionConfig;
+
+ struct EnablePermissionConfig {
+ IHook hook;
+ bytes hookData;
+ IPolicy[] policies;
+ bytes[] policyData;
+ ISigner signer;
+ bytes signerData;
+ }
+
+ modifier whenInitialized() {
+ address deployed = factory.createAccount(initData(), bytes32(0));
+ assertEq(deployed, address(kernel));
+ assertEq(kernel.currentNonce(), 1);
+ assertEq(ValidationId.unwrap(kernel.rootValidator()), ValidationId.unwrap(rootValidation));
+ _;
+ }
+
+ modifier whenValidatorEnabled(bool useFallback, bool isExecutor) {
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_VALIDATOR,
+ useFallback,
+ isExecutor,
+ encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ _;
+ }
+
+ modifier whenPermissionEnabled(bool useFallback, bool isExecutor) {
+ _;
+ }
+
+ function needEnable(ValidationType vType) internal view returns (bool) {
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ if (
+ address(kernel.validationConfig(ValidatorLib.validatorToIdentifier(enabledValidator)).hook)
+ == address(0)
+ ) {
+ return true;
+ }
+ return false;
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ return address(kernel.validationConfig(ValidatorLib.permissionToIdentifier(enabledPermission)).hook)
+ == address(0);
+ } else if (vType == VALIDATION_TYPE_ROOT) {
+ return false;
+ } else {
+ revert("Invalid validation type");
+ }
+ }
+
+ function encodeNonce(ValidationType vType, bool enable) internal view returns (uint256 nonce) {
+ uint192 nonceKey = 0;
+ if (vType == VALIDATION_TYPE_ROOT) {
+ nonceKey = 0;
+ } else if (vType == VALIDATION_TYPE_VALIDATOR) {
+ ValidationMode mode = VALIDATION_MODE_DEFAULT;
+ if (enable) {
+ mode = VALIDATION_MODE_ENABLE;
+ }
+ nonceKey = ValidatorLib.encodeAsNonceKey(
+ ValidationMode.unwrap(mode),
+ ValidationType.unwrap(vType),
+ bytes20(address(enabledValidator)),
+ 0 // parallel key
+ );
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ ValidationMode mode = VALIDATION_MODE_DEFAULT;
+ if (enable) {
+ mode = VALIDATION_MODE_ENABLE;
+ }
+ nonceKey = ValidatorLib.encodeAsNonceKey(
+ ValidationMode.unwrap(VALIDATION_MODE_ENABLE),
+ ValidationType.unwrap(vType),
+ bytes20(PermissionId.unwrap(enabledPermission)), // permission id
+ 0
+ );
+ } else {
+ revert("Invalid validation type");
+ }
+ return entrypoint.getNonce(address(kernel), nonceKey);
+ }
+
+ function getEnableDigest(ValidationType vType, bool overrideValidation, bytes memory selectorData)
+ internal
+ view
+ returns (bytes32)
+ {
+ uint32 nonce = kernel.currentNonce();
+ if (overrideValidation) {
+ nonce = nonce + 1;
+ }
+ ValidationId vId;
+ IHook hook;
+ bytes memory validatorData;
+ bytes memory hookData;
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ vId = ValidatorLib.validatorToIdentifier(enabledValidator);
+ hook = validationConfig.hook;
+ validatorData = validationConfig.validatorData;
+ hookData = validationConfig.hookData;
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ vId = ValidatorLib.permissionToIdentifier(enabledPermission);
+ hook = permissionConfig.hook;
+ validatorData = encodePermissionsEnableData();
+ hookData = permissionConfig.hookData;
+ } else {
+ revert("Invalid validation type");
+ }
+
+ bytes32 hash = keccak256(
+ abi.encode(
+ keccak256(
+ "Enable(bytes21 validationId,uint32 nonce,address hook,bytes validatorData,bytes hookData,bytes selectorData)"
+ ),
+ ValidationId.unwrap(vId),
+ uint256(nonce),
+ hook,
+ keccak256(validatorData),
+ keccak256(abi.encodePacked(hex"ff", hookData)),
+ keccak256(selectorData)
+ )
+ );
+
+ bytes32 digest = keccak256(
+ abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), hash)
+ );
+
+ return digest;
+ }
+
+ function encodeSelectorData(bool isFallback, bool isExecutor) internal view returns (bytes memory) {
+ if (isFallback && isExecutor) {
+ return abi.encodePacked(
+ MockFallback.setData.selector,
+ address(mockFallback),
+ address(1),
+ abi.encode(abi.encodePacked(hex"00", "MockFallbackInit"), hex"", abi.encodePacked(address(0))) // TODO add executor hook test
+ );
+ } else if (isFallback) {
+ return abi.encodePacked(
+ MockFallback.setData.selector,
+ address(mockFallback),
+ address(1),
+ abi.encode(abi.encodePacked(hex"00", "MockFallbackInit"), hex"")
+ );
+ } else if (!isFallback && !isExecutor) {
+ return abi.encodePacked(Kernel.execute.selector);
+ } else {
+ revert("Invalid selector data");
+ }
+ }
+
+ function getValidationId(ValidationType vType) internal view returns (ValidationId) {
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ return ValidatorLib.validatorToIdentifier(enabledValidator);
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ return ValidatorLib.permissionToIdentifier(enabledPermission);
+ } else {
+ revert("Invalid validation type");
+ }
+ }
+
+ function getEnableSignature(
+ ValidationType vType,
+ bytes32 digest,
+ bytes memory selectorData,
+ PackedUserOperation memory op,
+ bool successEnable,
+ bool successUserOp
+ ) internal returns (bytes memory) {
+ bytes memory enableSig = _rootSignDigest(digest, successEnable);
+ bytes memory userOpSig = _signUserOp(vType, op, successUserOp);
+ IHook hook;
+ bytes memory validatorData;
+ bytes memory hookData;
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ hook = validationConfig.hook;
+ validatorData = validationConfig.validatorData;
+ hookData = validationConfig.hookData;
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ hook = permissionConfig.hook;
+ validatorData = encodePermissionsEnableData();
+ hookData = permissionConfig.hookData;
+ } else {
+ revert("Invalid validation type");
+ }
+ return encodeEnableSignature(
+ hook, validatorData, abi.encodePacked(hex"ff", hookData), selectorData, enableSig, userOpSig
+ );
+ }
+
+ function _prepareUserOp(
+ ValidationType vType,
+ bool isFallback,
+ bool isExecutor,
+ bytes memory callData,
+ bool successEnable,
+ bool successUserOp
+ ) internal returns (PackedUserOperation memory op) {
+ if (isFallback && isExecutor) {
+ mockFallback.setExecutorMode(true);
+ }
+ bool enable = needEnable(vType);
+ op = PackedUserOperation({
+ sender: address(kernel),
+ nonce: encodeNonce(vType, enable),
+ initCode: address(kernel).code.length == 0
+ ? abi.encodePacked(
+ address(staker), abi.encodeWithSelector(staker.deployWithFactory.selector, factory, initData(), bytes32(0))
+ )
+ : abi.encodePacked(hex""),
+ callData: callData,
+ accountGasLimits: bytes32(abi.encodePacked(uint128(1000000), uint128(1000000))), // TODO make this dynamic
+ preVerificationGas: 1000000,
+ gasFees: bytes32(abi.encodePacked(uint128(1), uint128(1))),
+ paymasterAndData: hex"", // TODO have paymaster test cases
+ signature: hex""
+ });
+ if (enable) {
+ bytes memory selectorData = encodeSelectorData(isFallback, isExecutor);
+ bytes32 digest = getEnableDigest(vType, false, selectorData);
+ op.signature = getEnableSignature(vType, digest, selectorData, op, successEnable, successUserOp);
+ } else {
+ op.signature = _signUserOp(vType, op, successUserOp);
+ }
+ }
+
+ function setUp() public {
+ enabledPermission = PermissionId.wrap(bytes4(0xdeadbeef));
+ entrypoint = IEntryPoint(EntryPointLib.deploy());
+ Kernel impl = new Kernel(entrypoint);
+ factory = new KernelFactory(address(impl));
+ callee = new MockCallee();
+ mockHook = new MockHook();
+ mockFallback = new MockFallback();
+ mockExecutor = new MockExecutor();
+ _setRootValidationConfig();
+ _setEnableValidatorConfig();
+ _setEnablePermissionConfig();
+ kernel = Kernel(payable(factory.getAddress(initData(), bytes32(0))));
+ stakerOwner = makeAddr("StakerOwner");
+ staker = new FactoryStaker(stakerOwner);
+ vm.startPrank(stakerOwner);
+ staker.approveFactory(factory, true);
+ vm.stopPrank();
+ }
+
+ function testDeployWithFactory() external {
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(VALIDATION_TYPE_ROOT, false, false, hex"", true, true);
+ // _prepareRootUserOp(hex"", true);
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ }
+
+ function initData() internal view returns (bytes memory) {
+ return abi.encodeWithSelector(
+ Kernel.initialize.selector,
+ rootValidation,
+ rootValidationConfig.hook,
+ rootValidationConfig.validatorData,
+ rootValidationConfig.hookData
+ );
+ }
+
+ function encodeEnableSignature(
+ IHook hook,
+ bytes memory validatorData,
+ bytes memory hookData,
+ bytes memory selectorData,
+ bytes memory enableSig,
+ bytes memory userOpSig
+ ) internal pure returns (bytes memory) {
+ return abi.encodePacked(
+ abi.encodePacked(hook), abi.encode(validatorData, hookData, selectorData, enableSig, userOpSig)
+ );
+ }
+
+ // things to override on test
+ function _setRootValidationConfig() internal virtual {
+ mockValidator = new MockValidator();
+ rootValidation = ValidatorLib.validatorToIdentifier(mockValidator);
+ }
+
+ function _setEnableValidatorConfig() internal virtual {
+ enabledValidator = new MockValidator();
+ }
+
+ function _setEnablePermissionConfig() internal virtual {
+ IPolicy[] memory policies = new IPolicy[](2);
+ MockPolicy mockPolicy = new MockPolicy();
+ MockPolicy mockPolicy2 = new MockPolicy();
+ policies[0] = mockPolicy;
+ policies[1] = mockPolicy2;
+ bytes[] memory policyData = new bytes[](2);
+ policyData[0] = "policy1";
+ policyData[1] = "policy2";
+ MockSigner mockSigner = new MockSigner();
+
+ permissionConfig.policies = policies;
+ permissionConfig.signer = mockSigner;
+ permissionConfig.policyData = policyData;
+ permissionConfig.signerData = "signer";
+ }
+
+ // root validator cases
+ function _rootValidatorSuccessCheck() internal virtual {
+ assertEq(123, callee.value());
+ }
+
+ function _rootValidatorFailureCheck() internal virtual {
+ assertEq(0, callee.value());
+ }
+
+ function _rootSignDigest(bytes32 digest, bool success) internal virtual returns (bytes memory data) {
+ if (success) {
+ data = "enableSig";
+ mockValidator.sudoSetValidSig(data);
+ } else {
+ data = "failEnableSig";
+ }
+ }
+
+ function _signUserOp(ValidationType vType, PackedUserOperation memory op, bool success)
+ internal
+ virtual
+ returns (bytes memory data)
+ {
+ if (vType == VALIDATION_TYPE_VALIDATOR) {
+ return _validatorSignUserOp(op, success);
+ } else if (vType == VALIDATION_TYPE_PERMISSION) {
+ return _permissionSignUserOp(op, success);
+ } else if (vType == VALIDATION_TYPE_ROOT) {
+ return _rootSignUserOp(op, success);
+ }
+ revert("Invalid validation type");
+ }
+
+ function _rootSignUserOp(PackedUserOperation memory op, bool success) internal virtual returns (bytes memory) {
+ mockValidator.sudoSetSuccess(success);
+ return success ? abi.encodePacked("success") : abi.encodePacked("failure");
+ }
+
+ function _validatorSignUserOp(PackedUserOperation memory, bool success)
+ internal
+ virtual
+ returns (bytes memory data)
+ {
+ MockValidator(address(enabledValidator)).sudoSetSuccess(success);
+ if (success) {
+ return "userOpSig";
+ } else {
+ return "failUserOpSig";
+ }
+ }
+
+ function _validatorSignDigest(bytes32 digest, bool success) internal virtual returns (bytes memory data) {
+ if (success) {
+ data = "enableSig";
+ MockValidator(address(enabledValidator)).sudoSetValidSig(data);
+ } else {
+ data = "failEnableSig";
+ }
+ }
+
+ function _permissionSignUserOp(PackedUserOperation memory op, bool success)
+ internal
+ virtual
+ returns (bytes memory data)
+ {
+ MockPolicy(address(permissionConfig.policies[0])).sudoSetValidSig(
+ address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), "policy1"
+ );
+ MockPolicy(address(permissionConfig.policies[1])).sudoSetValidSig(
+ address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), "policy2"
+ );
+ MockSigner(address(permissionConfig.signer)).sudoSetValidSig(
+ address(kernel),
+ bytes32(PermissionId.unwrap(enabledPermission)),
+ success ? abi.encodePacked("userOpSig") : abi.encodePacked("NO")
+ );
+ bytes[] memory sigs = _getPolicyAndSignerSig(op, success);
+ for (uint8 i = 0; i < sigs.length - 1; i++) {
+ if (sigs[i].length > 0) {
+ data = abi.encodePacked(data, bytes1(i), bytes8(uint64(sigs[i].length)), sigs[i]);
+ }
+ }
+ data = abi.encodePacked(data, bytes1(0xff), sigs[sigs.length - 1]);
+ }
+
+ function _permissionSignDigest(bytes32 digest, bool success) internal virtual returns (bytes memory data) {
+ MockPolicy(address(permissionConfig.policies[0])).sudoSetPass(
+ address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), true
+ );
+ MockPolicy(address(permissionConfig.policies[1])).sudoSetPass(
+ address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), true
+ );
+ MockSigner(address(permissionConfig.signer)).sudoSetPass(
+ address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), success
+ );
+ return "hello world";
+ }
+
+ function _getPolicyAndSignerSig(PackedUserOperation memory op, bool success)
+ internal
+ returns (bytes[] memory data)
+ {
+ data = new bytes[](3);
+ data[0] = "policy1";
+ data[1] = "policy2";
+ data[2] = "userOpSig";
+ }
+
+ // --- Root validator cases, no need to enable ---
+ function testRootValidateUser(bool success) external whenInitialized {
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)),
+ true,
+ success
+ );
+ if (!success) {
+ vm.expectRevert(abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, "AA24 signature error"));
+ }
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ if (success) {
+ _rootValidatorSuccessCheck();
+ }
+ }
+
+ function _buildDomainSeparator(string memory name, string memory version, address verifyingContract)
+ internal
+ view
+ returns (bytes32)
+ {
+ bytes32 hashedName = keccak256(bytes(name));
+ bytes32 hashedVersion = keccak256(bytes(version));
+ bytes32 typeHash =
+ keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
+
+ return keccak256(abi.encode(typeHash, hashedName, hashedVersion, block.chainid, address(verifyingContract)));
+ }
+
+ function encodeExecute(address _to, uint256 _amount, bytes memory _data) internal view returns (bytes memory) {
+ return abi.encodeWithSelector(
+ kernel.execute.selector, ExecLib.encodeSimpleSingle(), ExecLib.encodeSingle(_to, _amount, _data)
+ );
+ }
+
+ function testInvalidateNonce(uint32 nonce) external whenInitialized {
+ uint32 kernelNonce = kernel.currentNonce();
+ bytes memory errorMsg;
+ if (nonce < kernelNonce) {
+ errorMsg = abi.encodeWithSelector(ValidationManager.InvalidNonce.selector);
+ } else if (nonce > kernelNonce + MAX_NONCE_INCREMENT_SIZE) {
+ errorMsg = abi.encodeWithSelector(ValidationManager.NonceInvalidationError.selector);
+ }
+ if (errorMsg.length > 0) {
+ vm.expectRevert(errorMsg);
+ }
+ vm.prank(address(kernel));
+ kernel.invalidateNonce(nonce);
+ if (errorMsg.length > 0) {
+ assertEq(kernel.currentNonce(), kernelNonce);
+ } else {
+ assertEq(kernel.currentNonce(), nonce);
+ assertEq(kernel.validNonceFrom(), nonce);
+ }
+ }
+
+ function testValidateUserOpWithEnable(
+ ValidationType vType,
+ bool useFallback,
+ bool isExecutor,
+ bool enableSuccess,
+ bool userOpSuccess
+ ) external whenInitialized {
+ vm.assume(vType == VALIDATION_TYPE_VALIDATOR || vType == VALIDATION_TYPE_PERMISSION);
+ if (useFallback == false && isExecutor == true) {
+ isExecutor = false;
+ }
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ vType,
+ useFallback,
+ isExecutor,
+ useFallback
+ ? abi.encodeWithSelector(MockFallback.setData.selector, 123456)
+ : encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)),
+ enableSuccess,
+ userOpSuccess
+ );
+ if (!enableSuccess) {
+ vm.expectRevert(
+ abi.encodeWithSelector(
+ IEntryPoint.FailedOpWithRevert.selector,
+ 0,
+ "AA23 reverted",
+ abi.encodePacked(ValidationManager.EnableNotApproved.selector)
+ )
+ );
+ } else if (!userOpSuccess) {
+ vm.expectRevert(abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, "AA24 signature error"));
+ }
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ if (enableSuccess && userOpSuccess) {
+ ValidationManager.ValidationConfig memory config = kernel.validationConfig(getValidationId(vType));
+ assertEq(config.nonce, 1);
+ assertEq(address(config.hook), address(1));
+ assertEq(kernel.currentNonce(), 1);
+ if (vType == VALIDATION_TYPE_PERMISSION) {
+ ValidationManager.PermissionConfig memory pConfig = kernel.permissionConfig(enabledPermission);
+ pConfig.signer = permissionConfig.signer;
+ }
+ if (useFallback) {
+ assertEq(kernel.isAllowedSelector(getValidationId(vType), MockFallback.setData.selector), true);
+ assertEq(mockFallback.valueStored(), 123456);
+ Callee callee1 = mockFallback.callee();
+ if (isExecutor) {
+ assertEq(callee1.lastCaller(), address(kernel));
+ } else {
+ assertEq(callee1.lastCaller(), address(0));
+ }
+ } else {
+ assertEq(kernel.isAllowedSelector(getValidationId(vType), Kernel.execute.selector), true);
+ assertEq(callee.value(), 123);
+ }
+ }
+ }
+
+ function encodePermissionsEnableData() internal view returns (bytes memory) {
+ bytes[] memory permissions = new bytes[](permissionConfig.policies.length + 1);
+ for (uint256 i = 0; i < permissions.length - 1; i++) {
+ permissions[i] = abi.encodePacked(
+ PolicyData.unwrap(ValidatorLib.encodePolicyData(false, false, address(permissionConfig.policies[i]))),
+ permissionConfig.policyData[i]
+ );
+ }
+ permissions[permissions.length - 1] = abi.encodePacked(
+ PolicyData.unwrap(ValidatorLib.encodePolicyData(false, false, address(permissionConfig.signer))),
+ permissionConfig.signerData
+ );
+ return abi.encode(permissions);
+ }
+
+ function _installAction(bool withHook) internal {
+ vm.deal(address(kernel), 1e18);
+ MockAction mockAction = new MockAction();
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ abi.encodeWithSelector(
+ kernel.installModule.selector,
+ 3,
+ address(mockAction),
+ abi.encodePacked(
+ MockAction.doSomething.selector,
+ withHook ? address(mockHook) : address(0),
+ withHook
+ ? abi.encode(hex"ff", abi.encodePacked(bytes1(0xff), "hookData"))
+ : abi.encode(hex"ff", hex"")
+ )
+ ),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ }
+
+ function testActionInstall(bool withHook) external whenInitialized {
+ _installAction(withHook);
+ SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockAction.doSomething.selector);
+ assertEq(address(config.hook), withHook ? address(mockHook) : address(1));
+ vm.expectEmit(address(kernel));
+ emit MockAction.MockActionEvent(address(kernel));
+ MockAction(address(kernel)).doSomething();
+ if (withHook) {
+ assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData"));
+ assertEq(
+ mockHook.preHookData(address(kernel)), abi.encodePacked(address(this), MockAction.doSomething.selector)
+ );
+ assertEq(mockHook.postHookData(address(kernel)), abi.encodePacked("hookData"));
+ }
+ }
+
+ function testActionUninstall(bool withHook) external whenInitialized {
+ _installAction(withHook);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ abi.encodeWithSelector(
+ kernel.uninstallModule.selector,
+ 3,
+ address(mockFallback),
+ abi.encodePacked(MockAction.doSomething.selector)
+ ),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+
+ SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockAction.doSomething.selector);
+ assertEq(address(config.hook), address(0));
+ assertEq(address(config.target), address(0));
+ }
+
+ function _installFallback(bool withHook) internal {
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ abi.encodeWithSelector(
+ kernel.installModule.selector,
+ 3,
+ address(mockFallback),
+ abi.encodePacked(
+ MockFallback.fallbackFunction.selector,
+ withHook ? address(mockHook) : address(0),
+ withHook
+ ? abi.encode(abi.encodePacked(hex"00", "fallbackData"), abi.encodePacked(bytes1(0xff), "hookData"))
+ : abi.encode(abi.encodePacked(hex"00", "fallbackData"), abi.encodePacked(""))
+ )
+ ),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ }
+
+ function testFallbackInstall(bool withHook) external whenInitialized {
+ _installFallback(withHook);
+ assertEq(mockFallback.data(address(kernel)), abi.encodePacked("fallbackData"));
+
+ SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockFallback.fallbackFunction.selector);
+ assertEq(address(config.hook), withHook ? address(mockHook) : address(1));
+ assertEq(address(config.target), address(mockFallback));
+
+ (bool success, bytes memory result) =
+ address(kernel).call(abi.encodeWithSelector(MockFallback.fallbackFunction.selector, uint256(10)));
+ assertTrue(success);
+ (uint256 res) = abi.decode(result, (uint256));
+ assertEq(res, 100);
+ if (withHook) {
+ assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData"));
+ assertEq(
+ mockHook.preHookData(address(kernel)),
+ abi.encodePacked(address(this), MockFallback.fallbackFunction.selector, uint256(10))
+ );
+ assertEq(mockHook.postHookData(address(kernel)), abi.encodePacked("hookData"));
+ }
+ }
+
+ function testFallbackUninstall(bool withHook) external whenInitialized {
+ _installFallback(withHook);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ abi.encodeWithSelector(
+ kernel.uninstallModule.selector,
+ 3,
+ address(mockFallback),
+ abi.encodePacked(MockFallback.fallbackFunction.selector)
+ ),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockFallback.fallbackFunction.selector);
+ assertEq(address(config.hook), address(0));
+ assertEq(address(config.target), address(0));
+ }
+
+ function _installExecutor(bool withHook) internal {
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ abi.encodeWithSelector(
+ kernel.installModule.selector,
+ 2,
+ address(mockExecutor),
+ abi.encodePacked(
+ withHook ? address(mockHook) : address(0),
+ withHook
+ ? abi.encode(abi.encodePacked("executorData"), abi.encodePacked(bytes1(0xff), "hookData"))
+ : abi.encode(abi.encodePacked("executorData"), abi.encodePacked(""))
+ )
+ ),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ }
+
+ function testExecutorInstall(bool withHook) external whenInitialized {
+ _installExecutor(withHook);
+ assertEq(mockExecutor.data(address(kernel)), abi.encodePacked("executorData"));
+ ExecutorManager.ExecutorConfig memory config = kernel.executorConfig(mockExecutor);
+ assertEq(address(config.hook), withHook ? address(mockHook) : address(1));
+
+ ExecMode mode = ExecLib.encodeSimpleSingle();
+ bytes memory data =
+ ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(MockCallee.setValue.selector, 123));
+ mockExecutor.sudoDoExec(IERC7579Account(kernel), mode, data);
+ assertEq(callee.value(), 123);
+ if (withHook) {
+ assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData"));
+ assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData"));
+ }
+ }
+
+ function testExecutorUninstall(bool withHook) external whenInitialized {
+ _installExecutor(withHook);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_ROOT,
+ false,
+ false,
+ abi.encodeWithSelector(kernel.uninstallModule.selector, 2, address(mockExecutor), hex""),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ ExecutorManager.ExecutorConfig memory config = kernel.executorConfig(mockExecutor);
+ assertEq(address(config.hook), address(0));
+ vm.expectRevert(abi.encodeWithSelector(Kernel.InvalidExecutor.selector));
+ vm.startPrank(address(mockExecutor));
+ kernel.executeFromExecutor(
+ ExecLib.encodeSimpleSingle(),
+ ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(MockCallee.setValue.selector, 123))
+ );
+ vm.stopPrank();
+ }
+
+ function testSignatureRoot(bytes32 hash) external whenInitialized {
+ bytes32 wrappedHash = keccak256(abi.encode(keccak256("Kernel(bytes32 hash)"), hash));
+ bytes32 digest = keccak256(
+ abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), wrappedHash)
+ );
+ bytes memory sig = _rootSignDigest(digest, true);
+ sig = abi.encodePacked(hex"00", sig);
+ bytes4 res = kernel.isValidSignature(hash, sig);
+ assertEq(res, bytes4(0x1626ba7e));
+ }
+
+ function testSignatureValidator(bytes32 hash) external whenInitialized {
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_VALIDATOR,
+ false,
+ false,
+ encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ ValidationManager.ValidationConfig memory config =
+ kernel.validationConfig(ValidatorLib.validatorToIdentifier(enabledValidator));
+ assertEq(config.nonce, 1);
+ assertEq(address(config.hook), address(1));
+ assertEq(kernel.currentNonce(), 1);
+
+ bytes32 wrappedHash = keccak256(abi.encode(keccak256("Kernel(bytes32 hash)"), hash));
+ bytes32 digest = keccak256(
+ abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), wrappedHash)
+ );
+ bytes memory sig = _validatorSignDigest(digest, true);
+ sig = abi.encodePacked(hex"01", address(enabledValidator), sig);
+ bytes4 res = kernel.isValidSignature(hash, sig);
+ assertEq(res, bytes4(0x1626ba7e));
+ }
+
+ function testSignaturePermission(bytes32 hash) external whenInitialized {
+ vm.deal(address(kernel), 1e18);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareUserOp(
+ VALIDATION_TYPE_PERMISSION,
+ false,
+ false,
+ encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)),
+ true,
+ true
+ );
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ assertEq(kernel.currentNonce(), 1);
+ assertEq(
+ MockSigner(address(permissionConfig.signer)).data(address(kernel)),
+ abi.encodePacked(bytes32(bytes4(0xdeadbeef)), "signer")
+ );
+ bytes32 wrappedHash = keccak256(abi.encode(keccak256("Kernel(bytes32 hash)"), hash));
+ bytes32 digest = keccak256(
+ abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), wrappedHash)
+ );
+ bytes memory sig = _permissionSignDigest(digest, true);
+ sig = abi.encodePacked(hex"02", PermissionId.unwrap(enabledPermission), hex"ff", sig);
+ bytes4 res = kernel.isValidSignature(hash, sig);
+ assertEq(res, bytes4(0x1626ba7e));
+ }
+}
diff --git a/src/sdk/TestBase/PolicyTestBase.sol b/src/sdk/TestBase/PolicyTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/PolicyTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/SignerTestBase.sol b/src/sdk/TestBase/SignerTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/SignerTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/ValidatorTestBase.sol b/src/sdk/TestBase/ValidatorTestBase.sol
new file mode 100644
index 00000000..15a8c0d1
--- /dev/null
+++ b/src/sdk/TestBase/ValidatorTestBase.sol
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
diff --git a/src/sdk/TestBase/erc4337Util.sol b/src/sdk/TestBase/erc4337Util.sol
new file mode 100644
index 00000000..cb829f07
--- /dev/null
+++ b/src/sdk/TestBase/erc4337Util.sol
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+library EntryPointLib {
+ function deploy() internal returns (address) {
+ (bool success,) = DEPLOY_PROXY.call(ENTRYPOINT_0_7_BYTECODE);
+ require(success || ENTRYPOINT_0_7_ADDR.code.length > 0, "entrypoint not deployed");
+ return ENTRYPOINT_0_7_ADDR;
+ }
+}
+
+address constant ENTRYPOINT_0_7_ADDR = 0x0000000071727De22E5E9d8BAf0edAc6f37da032;
+address constant DEPLOY_PROXY = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
+bytes constant ENTRYPOINT_0_7_BYTECODE =
+ hex"90d8084deab30c2a37c45e8d47f49f2f7965183cb6990a98943ef94940681de360a08060405234620000825760016002556101df8181016001600160401b038111838210176200006c57829162003f2b833903906000f080156200006057608052604051613ea39081620000888239608051818181610d22015261324b0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f0000000000000000000000000000000000000000000000000000000000000000165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360808060405234610016576101c3908161001c8239f35b600080fdfe6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033";
diff --git a/src/sdk/moduleBase/PolicyBase.sol b/src/sdk/moduleBase/PolicyBase.sol
new file mode 100644
index 00000000..d57e034f
--- /dev/null
+++ b/src/sdk/moduleBase/PolicyBase.sol
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {IPolicy} from "../../interfaces/IERC7579Modules.sol";
+import {PackedUserOperation} from "../../interfaces/PackedUserOperation.sol";
+
+abstract contract PolicyBase is IPolicy {
+ function onInstall(bytes calldata data) external payable {
+ bytes32 id = bytes32(data[0:32]);
+ bytes calldata _data = data[32:];
+ _policyOninstall(id, _data);
+ }
+
+ function onUninstall(bytes calldata data) external payable {
+ bytes32 id = bytes32(data[0:32]);
+ bytes calldata _data = data[32:];
+ _policyOnUninstall(id, _data);
+ }
+
+ function isModuleType(uint256 id) external pure returns (bool) {
+ return id == 5;
+ }
+
+ function isInitialized(address) external view virtual returns (bool); // TODO : not sure if this is the right way to do it
+ function checkUserOpPolicy(bytes32 id, PackedUserOperation calldata userOp)
+ external
+ payable
+ virtual
+ returns (uint256);
+ function checkSignaturePolicy(bytes32 id, address sender, bytes32 hash, bytes calldata sig)
+ external
+ view
+ virtual
+ returns (uint256);
+
+ function _policyOninstall(bytes32 id, bytes calldata _data) internal virtual;
+ function _policyOnUninstall(bytes32 id, bytes calldata _data) internal virtual;
+}
diff --git a/src/sdk/moduleBase/SignerBase.sol b/src/sdk/moduleBase/SignerBase.sol
new file mode 100644
index 00000000..026dad3a
--- /dev/null
+++ b/src/sdk/moduleBase/SignerBase.sol
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import {ISigner} from "../../interfaces/IERC7579Modules.sol";
+import {PackedUserOperation} from "../../interfaces/PackedUserOperation.sol";
+
+abstract contract SignerBase is ISigner {
+ function onInstall(bytes calldata data) external payable {
+ bytes32 id = bytes32(data[0:32]);
+ bytes calldata _data = data[32:];
+ _signerOninstall(id, _data);
+ }
+
+ function onUninstall(bytes calldata data) external payable {
+ bytes32 id = bytes32(data[0:32]);
+ bytes calldata _data = data[32:];
+ _signerOnUninstall(id, _data);
+ }
+
+ function isModuleType(uint256 id) external pure returns (bool) {
+ return id == 6;
+ }
+
+ function isInitialized(address) external view virtual returns (bool); // TODO : not sure if this is the right way to do it
+ function checkUserOpSignature(bytes32 id, PackedUserOperation calldata userOp, bytes32 userOpHash)
+ external
+ payable
+ virtual
+ returns (uint256);
+ function checkSignature(bytes32 id, address sender, bytes32 hash, bytes calldata sig)
+ external
+ view
+ virtual
+ returns (bytes4);
+
+ function _signerOninstall(bytes32 id, bytes calldata _data) internal virtual;
+ function _signerOnUninstall(bytes32 id, bytes calldata _data) internal virtual;
+}
diff --git a/src/types/Constants.sol b/src/types/Constants.sol
new file mode 100644
index 00000000..f96080e6
--- /dev/null
+++ b/src/types/Constants.sol
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {CallType, ExecType, ExecModeSelector} from "./Types.sol";
+import {PassFlag, ValidationMode, ValidationType} from "./Types.sol";
+import {ValidationData} from "./Types.sol";
+
+// --- ERC7579 calltypes ---
+// Default CallType
+CallType constant CALLTYPE_SINGLE = CallType.wrap(0x00);
+// Batched CallType
+CallType constant CALLTYPE_BATCH = CallType.wrap(0x01);
+CallType constant CALLTYPE_STATIC = CallType.wrap(0xFE);
+// @dev Implementing delegatecall is OPTIONAL!
+// implement delegatecall with extreme care.
+CallType constant CALLTYPE_DELEGATECALL = CallType.wrap(0xFF);
+
+// --- ERC7579 exectypes ---
+// @dev default behavior is to revert on failure
+// To allow very simple accounts to use mode encoding, the default behavior is to revert on failure
+// Since this is value 0x00, no additional encoding is required for simple accounts
+ExecType constant EXECTYPE_DEFAULT = ExecType.wrap(0x00);
+// @dev account may elect to change execution behavior. For example "try exec" / "allow fail"
+ExecType constant EXECTYPE_TRY = ExecType.wrap(0x01);
+
+// --- ERC7579 mode selector ---
+ExecModeSelector constant EXEC_MODE_DEFAULT = ExecModeSelector.wrap(bytes4(0x00000000));
+
+// --- Kernel permission skip flags ---
+PassFlag constant SKIP_USEROP = PassFlag.wrap(0x0001);
+PassFlag constant SKIP_SIGNATURE = PassFlag.wrap(0x0002);
+
+// --- Kernel validation modes ---
+ValidationMode constant VALIDATION_MODE_DEFAULT = ValidationMode.wrap(0x00);
+ValidationMode constant VALIDATION_MODE_ENABLE = ValidationMode.wrap(0x01);
+ValidationMode constant VALIDATION_MODE_INSTALL = ValidationMode.wrap(0x02);
+
+// --- Kernel validation types ---
+ValidationType constant VALIDATION_TYPE_ROOT = ValidationType.wrap(0x00);
+ValidationType constant VALIDATION_TYPE_VALIDATOR = ValidationType.wrap(0x01);
+ValidationType constant VALIDATION_TYPE_PERMISSION = ValidationType.wrap(0x02);
+
+// --- storage slots ---
+// bytes32(uint256(keccak256('kernel.v3.selector')) - 1)
+bytes32 constant SELECTOR_MANAGER_STORAGE_SLOT = 0x7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b;
+// bytes32(uint256(keccak256('kernel.v3.executor')) - 1)
+bytes32 constant EXECUTOR_MANAGER_STORAGE_SLOT = 0x1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b86;
+// bytes32(uint256(keccak256('kernel.v3.hook')) - 1)
+bytes32 constant HOOK_MANAGER_STORAGE_SLOT = 0x4605d5f70bb605094b2e761eccdc27bed9a362d8612792676bf3fb9b12832ffc;
+// bytes32(uint256(keccak256('kernel.v3.validation')) - 1)
+bytes32 constant VALIDATION_MANAGER_STORAGE_SLOT = 0x7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f;
+bytes32 constant ERC1967_IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
+
+// --- Kernel validation nonce incremental size limit ---
+uint32 constant MAX_NONCE_INCREMENT_SIZE = 10;
+
+// -- EIP712 type hash ---
+bytes32 constant ENABLE_TYPE_HASH = 0xb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505;
+bytes32 constant KERNEL_WRAPPER_TYPE_HASH = 0x1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83;
+
+// --- ERC constants ---
+// ERC4337 constants
+uint256 constant SIG_VALIDATION_FAILED_UINT = 1;
+uint256 constant SIG_VALIDATION_SUCCESS_UINT = 0;
+ValidationData constant SIG_VALIDATION_FAILED = ValidationData.wrap(SIG_VALIDATION_FAILED_UINT);
+
+// ERC-1271 constants
+bytes4 constant ERC1271_MAGICVALUE = 0x1626ba7e;
+bytes4 constant ERC1271_INVALID = 0xffffffff;
+
+uint256 constant MODULE_TYPE_VALIDATOR = 1;
+uint256 constant MODULE_TYPE_EXECUTOR = 2;
+uint256 constant MODULE_TYPE_FALLBACK = 3;
+uint256 constant MODULE_TYPE_HOOK = 4;
+uint256 constant MODULE_TYPE_POLICY = 5;
+uint256 constant MODULE_TYPE_SIGNER = 6;
diff --git a/src/types/Structs.sol b/src/types/Structs.sol
new file mode 100644
index 00000000..263fcbd4
--- /dev/null
+++ b/src/types/Structs.sol
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.23;
+
+struct Execution {
+ address target;
+ uint256 value;
+ bytes callData;
+}
diff --git a/src/types/Types.sol b/src/types/Types.sol
new file mode 100644
index 00000000..788faadf
--- /dev/null
+++ b/src/types/Types.sol
@@ -0,0 +1,113 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.23;
+
+// Custom type for improved developer experience
+type ExecMode is bytes32;
+
+type CallType is bytes1;
+
+type ExecType is bytes1;
+
+type ExecModeSelector is bytes4;
+
+type ExecModePayload is bytes22;
+
+using {eqModeSelector as ==} for ExecModeSelector global;
+using {eqCallType as ==} for CallType global;
+using {notEqCallType as !=} for CallType global;
+using {eqExecType as ==} for ExecType global;
+
+function eqCallType(CallType a, CallType b) pure returns (bool) {
+ return CallType.unwrap(a) == CallType.unwrap(b);
+}
+
+function notEqCallType(CallType a, CallType b) pure returns (bool) {
+ return CallType.unwrap(a) != CallType.unwrap(b);
+}
+
+function eqExecType(ExecType a, ExecType b) pure returns (bool) {
+ return ExecType.unwrap(a) == ExecType.unwrap(b);
+}
+
+function eqModeSelector(ExecModeSelector a, ExecModeSelector b) pure returns (bool) {
+ return ExecModeSelector.unwrap(a) == ExecModeSelector.unwrap(b);
+}
+
+type ValidationMode is bytes1;
+
+type ValidationId is bytes21;
+
+type ValidationType is bytes1;
+
+type PermissionId is bytes4;
+
+type PolicyData is bytes22; // 2bytes for flag on skip, 20 bytes for validator address
+
+type PassFlag is bytes2;
+
+using {vModeEqual as ==} for ValidationMode global;
+using {vTypeEqual as ==} for ValidationType global;
+using {vIdentifierEqual as ==} for ValidationId global;
+using {vModeNotEqual as !=} for ValidationMode global;
+using {vTypeNotEqual as !=} for ValidationType global;
+using {vIdentifierNotEqual as !=} for ValidationId global;
+
+// nonce = uint192(key) + nonce
+// key = mode + (vtype + validationDataWithoutType) + 2bytes parallelNonceKey
+// key = 0x00 + 0x00 + 0x000 .. 00 + 0x0000
+// key = 0x00 + 0x01 + 0x1234...ff + 0x0000
+// key = 0x00 + 0x02 + ( ) + 0x000
+
+function vModeEqual(ValidationMode a, ValidationMode b) pure returns (bool) {
+ return ValidationMode.unwrap(a) == ValidationMode.unwrap(b);
+}
+
+function vModeNotEqual(ValidationMode a, ValidationMode b) pure returns (bool) {
+ return ValidationMode.unwrap(a) != ValidationMode.unwrap(b);
+}
+
+function vTypeEqual(ValidationType a, ValidationType b) pure returns (bool) {
+ return ValidationType.unwrap(a) == ValidationType.unwrap(b);
+}
+
+function vTypeNotEqual(ValidationType a, ValidationType b) pure returns (bool) {
+ return ValidationType.unwrap(a) != ValidationType.unwrap(b);
+}
+
+function vIdentifierEqual(ValidationId a, ValidationId b) pure returns (bool) {
+ return ValidationId.unwrap(a) == ValidationId.unwrap(b);
+}
+
+function vIdentifierNotEqual(ValidationId a, ValidationId b) pure returns (bool) {
+ return ValidationId.unwrap(a) != ValidationId.unwrap(b);
+}
+
+type ValidationData is uint256;
+
+type ValidAfter is uint48;
+
+type ValidUntil is uint48;
+
+function getValidationResult(ValidationData validationData) pure returns (address result) {
+ assembly {
+ result := validationData
+ }
+}
+
+function packValidationData(ValidAfter validAfter, ValidUntil validUntil) pure returns (uint256) {
+ return uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160;
+}
+
+function parseValidationData(uint256 validationData)
+ pure
+ returns (ValidAfter validAfter, ValidUntil validUntil, address result)
+{
+ assembly {
+ result := validationData
+ validUntil := and(shr(160, validationData), 0xffffffffffff)
+ switch iszero(validUntil)
+ case 1 { validUntil := 0xffffffffffff }
+ validAfter := shr(208, validationData)
+ }
+}
diff --git a/src/utils/ERC4337Utils.sol b/src/utils/ERC4337Utils.sol
deleted file mode 100644
index bd607848..00000000
--- a/src/utils/ERC4337Utils.sol
+++ /dev/null
@@ -1,71 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import "solady/utils/ECDSA.sol";
-import {Vm} from "forge-std/Test.sol";
-
-library ERC4337Utils {
- function test() public {}
-
- function fillUserOp(IEntryPoint _entryPoint, address _sender, bytes memory _data)
- internal
- view
- returns (UserOperation memory op)
- {
- op.sender = _sender;
- op.nonce = _entryPoint.getNonce(_sender, 0);
- op.callData = _data;
- op.callGasLimit = 10000000;
- op.verificationGasLimit = 10000000;
- op.preVerificationGas = 50000;
- op.maxFeePerGas = 50000;
- op.maxPriorityFeePerGas = 1;
- }
-
- function signUserOpHash(IEntryPoint _entryPoint, Vm _vm, uint256 _key, UserOperation memory _op)
- internal
- view
- returns (bytes memory signature)
- {
- bytes32 hash = _entryPoint.getUserOpHash(_op);
- (uint8 v, bytes32 r, bytes32 s) = _vm.sign(_key, ECDSA.toEthSignedMessageHash(hash));
- signature = abi.encodePacked(r, s, v);
- }
-
- // computes the hash of a permit
- function getStructHash(
- bytes4 sig,
- uint48 validUntil,
- uint48 validAfter,
- address validator,
- address executor,
- bytes memory enableData
- ) internal pure returns (bytes32) {
- return keccak256(
- abi.encode(
- keccak256("ValidatorApproved(bytes4 sig,uint256 validatorData,address executor,bytes enableData)"),
- bytes4(sig),
- uint256(
- uint256(uint160(validator)) | (uint256(validAfter) << 160) | (uint256(validUntil) << (48 + 160))
- ),
- executor,
- keccak256(enableData)
- )
- );
- }
-
- function _buildDomainSeparator(string memory name, string memory version, address verifyingContract)
- internal
- view
- returns (bytes32)
- {
- bytes32 hashedName = keccak256(bytes(name));
- bytes32 hashedVersion = keccak256(bytes(version));
- bytes32 typeHash =
- keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
-
- return keccak256(abi.encode(typeHash, hashedName, hashedVersion, block.chainid, address(verifyingContract)));
- }
-}
diff --git a/src/utils/ExecLib.sol b/src/utils/ExecLib.sol
new file mode 100644
index 00000000..631ca0b8
--- /dev/null
+++ b/src/utils/ExecLib.sol
@@ -0,0 +1,261 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.23;
+
+import {ExecMode, CallType, ExecType, ExecModeSelector, ExecModePayload} from "../types/Types.sol";
+import {
+ CALLTYPE_SINGLE,
+ CALLTYPE_BATCH,
+ EXECTYPE_DEFAULT,
+ EXEC_MODE_DEFAULT,
+ EXECTYPE_TRY,
+ CALLTYPE_DELEGATECALL
+} from "../types/Constants.sol";
+import {Execution} from "../types/Structs.sol";
+
+/**
+ * @dev ExecLib is a helper library for execution
+ */
+library ExecLib {
+ error ExecutionFailed();
+
+ event TryExecuteUnsuccessful(uint256 batchExecutionindex, bytes result);
+
+ function execute(ExecMode execMode, bytes calldata executionCalldata)
+ internal
+ returns (bytes[] memory returnData)
+ {
+ (CallType callType, ExecType execType,,) = decode(execMode);
+
+ // check if calltype is batch or single
+ if (callType == CALLTYPE_BATCH) {
+ // destructure executionCallData according to batched exec
+ Execution[] calldata executions = decodeBatch(executionCalldata);
+ // check if execType is revert or try
+ if (execType == EXECTYPE_DEFAULT) returnData = execute(executions);
+ else if (execType == EXECTYPE_TRY) returnData = tryExecute(executions);
+ else revert("Unsupported");
+ } else if (callType == CALLTYPE_SINGLE) {
+ // destructure executionCallData according to single exec
+ (address target, uint256 value, bytes calldata callData) = decodeSingle(executionCalldata);
+ returnData = new bytes[](1);
+ bool success;
+ // check if execType is revert or try
+ if (execType == EXECTYPE_DEFAULT) {
+ returnData[0] = execute(target, value, callData);
+ } else if (execType == EXECTYPE_TRY) {
+ (success, returnData[0]) = tryExecute(target, value, callData);
+ if (!success) emit TryExecuteUnsuccessful(0, returnData[0]);
+ } else {
+ revert("Unsupported");
+ }
+ } else if (callType == CALLTYPE_DELEGATECALL) {
+ address delegate = address(bytes20(executionCalldata[0:20]));
+ bytes calldata callData = executionCalldata[20:];
+ executeDelegatecall(delegate, callData);
+ } else {
+ revert("Unsupported");
+ }
+ }
+
+ function execute(Execution[] calldata executions) internal returns (bytes[] memory result) {
+ uint256 length = executions.length;
+ result = new bytes[](length);
+
+ for (uint256 i; i < length; i++) {
+ Execution calldata _exec = executions[i];
+ result[i] = execute(_exec.target, _exec.value, _exec.callData);
+ }
+ }
+
+ function tryExecute(Execution[] calldata executions) internal returns (bytes[] memory result) {
+ uint256 length = executions.length;
+ result = new bytes[](length);
+
+ for (uint256 i; i < length; i++) {
+ Execution calldata _exec = executions[i];
+ bool success;
+ (success, result[i]) = tryExecute(_exec.target, _exec.value, _exec.callData);
+ if (!success) emit TryExecuteUnsuccessful(i, result[i]);
+ }
+ }
+
+ function execute(address target, uint256 value, bytes calldata callData) internal returns (bytes memory result) {
+ /// @solidity memory-safe-assembly
+ assembly {
+ result := mload(0x40)
+ calldatacopy(result, callData.offset, callData.length)
+ if iszero(call(gas(), target, value, result, callData.length, codesize(), 0x00)) {
+ // Bubble up the revert if the call reverts.
+ returndatacopy(result, 0x00, returndatasize())
+ revert(result, returndatasize())
+ }
+ mstore(result, returndatasize()) // Store the length.
+ let o := add(result, 0x20)
+ returndatacopy(o, 0x00, returndatasize()) // Copy the returndata.
+ mstore(0x40, add(o, returndatasize())) // Allocate the memory.
+ }
+ }
+
+ function tryExecute(address target, uint256 value, bytes calldata callData)
+ internal
+ returns (bool success, bytes memory result)
+ {
+ /// @solidity memory-safe-assembly
+ assembly {
+ result := mload(0x40)
+ calldatacopy(result, callData.offset, callData.length)
+ success := call(gas(), target, value, result, callData.length, codesize(), 0x00)
+ mstore(result, returndatasize()) // Store the length.
+ let o := add(result, 0x20)
+ returndatacopy(o, 0x00, returndatasize()) // Copy the returndata.
+ mstore(0x40, add(o, returndatasize())) // Allocate the memory.
+ }
+ }
+
+ /// @dev Execute a delegatecall with `delegate` on this account.
+ function executeDelegatecall(address delegate, bytes calldata callData)
+ internal
+ returns (bool success, bytes memory result)
+ {
+ /// @solidity memory-safe-assembly
+ assembly {
+ result := mload(0x40)
+ calldatacopy(result, callData.offset, callData.length)
+ // Forwards the `data` to `delegate` via delegatecall.
+ success := delegatecall(gas(), delegate, result, callData.length, codesize(), 0x00)
+ mstore(result, returndatasize()) // Store the length.
+ let o := add(result, 0x20)
+ returndatacopy(o, 0x00, returndatasize()) // Copy the returndata.
+ mstore(0x40, add(o, returndatasize())) // Allocate the memory.
+ }
+ }
+
+ function decode(ExecMode mode)
+ internal
+ pure
+ returns (CallType _calltype, ExecType _execType, ExecModeSelector _modeSelector, ExecModePayload _modePayload)
+ {
+ assembly {
+ _calltype := mode
+ _execType := shl(8, mode)
+ _modeSelector := shl(48, mode)
+ _modePayload := shl(80, mode)
+ }
+ }
+
+ function encode(CallType callType, ExecType execType, ExecModeSelector mode, ExecModePayload payload)
+ internal
+ pure
+ returns (ExecMode)
+ {
+ return ExecMode.wrap(
+ bytes32(abi.encodePacked(callType, execType, bytes4(0), ExecModeSelector.unwrap(mode), payload))
+ );
+ }
+
+ function encodeSimpleBatch() internal pure returns (ExecMode mode) {
+ mode = encode(CALLTYPE_BATCH, EXECTYPE_DEFAULT, EXEC_MODE_DEFAULT, ExecModePayload.wrap(0x00));
+ }
+
+ function encodeSimpleSingle() internal pure returns (ExecMode mode) {
+ mode = encode(CALLTYPE_SINGLE, EXECTYPE_DEFAULT, EXEC_MODE_DEFAULT, ExecModePayload.wrap(0x00));
+ }
+
+ function getCallType(ExecMode mode) internal pure returns (CallType calltype) {
+ assembly {
+ calltype := mode
+ }
+ }
+
+ function decodeBatch(bytes calldata callData) internal pure returns (Execution[] calldata executionBatch) {
+ /*
+ * Batch Call Calldata Layout
+ * Offset (in bytes) | Length (in bytes) | Contents
+ * 0x0 | 0x4 | bytes4 function selector
+ * 0x4 | - |
+ abi.encode(IERC7579Execution.Execution[])
+ */
+ // solhint-disable-next-line no-inline-assembly
+ assembly ("memory-safe") {
+ let dataPointer := add(callData.offset, calldataload(callData.offset))
+
+ // Extract the ERC7579 Executions
+ executionBatch.offset := add(dataPointer, 32)
+ executionBatch.length := calldataload(dataPointer)
+ }
+ }
+
+ function encodeBatch(Execution[] memory executions) internal pure returns (bytes memory callData) {
+ callData = abi.encode(executions);
+ }
+
+ function decodeSingle(bytes calldata executionCalldata)
+ internal
+ pure
+ returns (address target, uint256 value, bytes calldata callData)
+ {
+ target = address(bytes20(executionCalldata[0:20]));
+ value = uint256(bytes32(executionCalldata[20:52]));
+ callData = executionCalldata[52:];
+ }
+
+ function encodeSingle(address target, uint256 value, bytes memory callData)
+ internal
+ pure
+ returns (bytes memory userOpCalldata)
+ {
+ userOpCalldata = abi.encodePacked(target, value, callData);
+ }
+
+ function doFallback2771Static(address fallbackHandler) internal view returns (bool success, bytes memory result) {
+ assembly {
+ function allocate(length) -> pos {
+ pos := mload(0x40)
+ mstore(0x40, add(pos, length))
+ }
+
+ let calldataPtr := allocate(calldatasize())
+ calldatacopy(calldataPtr, 0, calldatasize())
+
+ // The msg.sender address is shifted to the left by 12 bytes to remove the padding
+ // Then the address without padding is stored right after the calldata
+ let senderPtr := allocate(20)
+ mstore(senderPtr, shl(96, caller()))
+
+ // Add 20 bytes for the address appended add the end
+ success := staticcall(gas(), fallbackHandler, calldataPtr, add(calldatasize(), 20), 0, 0)
+
+ result := mload(0x40)
+ mstore(result, returndatasize()) // Store the length.
+ let o := add(result, 0x20)
+ returndatacopy(o, 0x00, returndatasize()) // Copy the returndata.
+ mstore(0x40, add(o, returndatasize())) // Allocate the memory.
+ }
+ }
+
+ function doFallback2771Call(address target) internal returns (bool success, bytes memory result) {
+ assembly {
+ function allocate(length) -> pos {
+ pos := mload(0x40)
+ mstore(0x40, add(pos, length))
+ }
+
+ let calldataPtr := allocate(calldatasize())
+ calldatacopy(calldataPtr, 0, calldatasize())
+
+ // The msg.sender address is shifted to the left by 12 bytes to remove the padding
+ // Then the address without padding is stored right after the calldata
+ let senderPtr := allocate(20)
+ mstore(senderPtr, shl(96, caller()))
+
+ // Add 20 bytes for the address appended add the end
+ success := call(gas(), target, 0, calldataPtr, add(calldatasize(), 20), 0, 0)
+
+ result := mload(0x40)
+ mstore(result, returndatasize()) // Store the length.
+ let o := add(result, 0x20)
+ returndatacopy(o, 0x00, returndatasize()) // Copy the returndata.
+ mstore(0x40, add(o, returndatasize())) // Allocate the memory.
+ }
+ }
+}
diff --git a/src/utils/KernelTestBase.sol b/src/utils/KernelTestBase.sol
deleted file mode 100644
index 04d62eb2..00000000
--- a/src/utils/KernelTestBase.sol
+++ /dev/null
@@ -1,503 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {ENTRYPOINT_0_6_ADDRESS, ENTRYPOINT_0_6_BYTECODE} from "I4337/artifacts/EntryPoint_0_6.sol";
-import {CREATOR_0_6_BYTECODE, CREATOR_0_6_ADDRESS} from "I4337/artifacts/EntryPoint_0_6.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {Kernel} from "../Kernel.sol";
-import {Operation} from "../common/Enums.sol";
-import {Compatibility} from "../abstract/Compatibility.sol";
-import {IKernel} from "../interfaces/IKernel.sol";
-import {KernelFactory} from "../factory/KernelFactory.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-
-import {Call, ExecutionDetail} from "../common/Structs.sol";
-import {ValidationData, ValidUntil, ValidAfter} from "../common/Types.sol";
-import {KERNEL_VERSION, KERNEL_NAME} from "../common/Constants.sol";
-import {ECDSA} from "solady/utils/ECDSA.sol";
-
-import {ERC4337Utils} from "./ERC4337Utils.sol";
-import {Test} from "forge-std/Test.sol";
-import {console} from "forge-std/console.sol";
-import {TestValidator} from "../mock/TestValidator.sol";
-import {TestExecutor} from "../mock/TestExecutor.sol";
-import {TestERC721} from "../mock/TestERC721.sol";
-import {TestERC1155} from "../mock/TestERC1155.sol";
-import {TestCallee} from "../mock/TestCallee.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-abstract contract KernelTestBase is Test {
- // to support 0.8.19
- // also, weird error came up when i did Compatibility.Received
- event Received(address sender, uint256 amount);
- event UserOperationEvent(
- bytes32 indexed userOpHash,
- address indexed sender,
- address indexed paymaster,
- uint256 nonce,
- bool success,
- uint256 actualGasCost,
- uint256 actualGasUsed
- );
- event Upgraded(address indexed newImplementation);
-
- Kernel kernel;
- Kernel kernelImpl;
- KernelFactory factory;
- IEntryPoint entryPoint;
- IKernelValidator defaultValidator;
- address owner;
- uint256 ownerKey;
- address payable beneficiary;
- address factoryOwner;
-
- bytes4 executionSig;
- ExecutionDetail executionDetail;
-
- function _initialize() internal {
- (owner, ownerKey) = makeAddrAndKey("owner");
- (factoryOwner,) = makeAddrAndKey("factoryOwner");
- beneficiary = payable(address(makeAddr("beneficiary")));
- vm.etch(ENTRYPOINT_0_6_ADDRESS, ENTRYPOINT_0_6_BYTECODE);
- entryPoint = IEntryPoint(payable(ENTRYPOINT_0_6_ADDRESS));
- vm.etch(CREATOR_0_6_ADDRESS, CREATOR_0_6_BYTECODE);
- kernelImpl = new Kernel(entryPoint);
- factory = new KernelFactory(factoryOwner, entryPoint);
- vm.startPrank(factoryOwner);
- factory.setImplementation(address(kernelImpl), true);
- vm.stopPrank();
- }
-
- function _setExecutionDetail() internal virtual;
-
- function getEnableData() internal view virtual returns (bytes memory);
-
- function getValidatorSignature(UserOperation memory op) internal view virtual returns (bytes memory);
-
- function getOwners() internal virtual returns (address[] memory _owners);
-
- function getInitializeData() internal view virtual returns (bytes memory);
-
- function signUserOp(UserOperation memory op) internal view virtual returns (bytes memory);
-
- function getWrongSignature(UserOperation memory op) internal view virtual returns (bytes memory);
-
- function signHash(bytes32 hash) internal view virtual returns (bytes memory);
-
- function getWrongSignature(bytes32 hash) internal view virtual returns (bytes memory);
-
- function test_default_validator_enable() external virtual;
-
- function test_default_validator_disable() external virtual;
-
- function test_external_call_execute_success() external virtual {
- address[] memory validCallers = getOwners();
- for (uint256 i = 0; i < validCallers.length; i++) {
- vm.prank(validCallers[i]);
- kernel.execute(validCallers[i], 0, "", Operation.Call);
- }
- }
-
- function test_external_call_execute_delegatecall_success() external virtual {
- address[] memory validCallers = getOwners();
- for (uint256 i = 0; i < validCallers.length; i++) {
- vm.prank(validCallers[i]);
- kernel.executeDelegateCall(validCallers[i], "");
- }
- }
-
- function test_external_call_execute_delegatecall_fail() external virtual {
- address[] memory validCallers = getOwners();
- for (uint256 i = 0; i < validCallers.length; i++) {
- vm.prank(address(uint160(validCallers[i]) + 1));
- vm.expectRevert();
- kernel.executeDelegateCall(validCallers[i], "");
- }
- }
-
- function test_external_call_execute_delegatecall_option_fail() external {
- address[] memory validCallers = getOwners();
- for (uint256 i = 0; i < validCallers.length; i++) {
- vm.prank(validCallers[i]);
- vm.expectRevert();
- kernel.execute(validCallers[i], 0, "", Operation.DelegateCall);
- }
- }
-
- function test_external_call_execute_fail() external {
- address[] memory validCallers = getOwners();
- for (uint256 i = 0; i < validCallers.length; i++) {
- vm.prank(address(uint160(validCallers[i]) + 1));
- vm.expectRevert();
- kernel.execute(validCallers[i], 0, "", Operation.Call);
- }
- }
-
- function test_external_call_batch_execute_success() external virtual {
- TestCallee callee = new TestCallee();
- Call[] memory calls = new Call[](3);
- calls[0] = Call(owner, 0, "");
- calls[1] = Call(address(callee), 0, abi.encodeWithSelector(callee.returnLong.selector));
- calls[2] = Call(address(callee), 0, abi.encode("HelloWorld"));
- vm.prank(owner);
- kernel.executeBatch(calls);
- assertEq(callee.caller(), address(kernel));
- assertEq(callee.sent(), 0);
- assertEq(keccak256(callee.message()), keccak256(abi.encode("HelloWorld")));
- calls = new Call[](3);
- calls[0] = Call(owner, 0, "");
- calls[1] = Call(address(callee), 0, abi.encodeWithSelector(callee.returnLongBytes.selector));
- calls[2] = Call(address(callee), 0, abi.encode("HelloWorld"));
- assertEq(callee.caller(), address(kernel));
- assertEq(callee.sent(), 0);
- assertEq(keccak256(callee.message()), keccak256(abi.encode("HelloWorld")));
-
- vm.prank(owner);
- kernel.executeBatch(calls);
- }
-
- function test_external_call_batch_execute_fail() external {
- Call[] memory calls = new Call[](1);
- calls[0] = Call(owner, 0, "");
- vm.prank(address(uint160(owner) - 1));
- vm.expectRevert();
- kernel.executeBatch(calls);
- }
-
- function test_get_nonce() external {
- assertEq(kernel.getNonce(), entryPoint.getNonce(address(kernel), 0));
- assertEq(kernel.getNonce(100), entryPoint.getNonce(address(kernel), 100));
- }
-
- function test_get_nonce(uint192 key) external {
- assertEq(kernel.getNonce(key), entryPoint.getNonce(address(kernel), key));
- }
-
- function test_eip712() external {
- (bytes1 fields, string memory name, string memory version,, address verifyingContract, bytes32 salt,) =
- kernel.eip712Domain();
- assertEq(fields, bytes1(hex"0f"));
- assertEq(name, KERNEL_NAME);
- assertEq(version, KERNEL_VERSION);
- assertEq(verifyingContract, address(kernel));
- assertEq(salt, bytes32(0));
- }
-
- function test_upgrade() external {
- vm.startPrank(address(entryPoint));
- vm.expectEmit(true, false, false, false, address(kernel));
- emit Upgraded(address(0xdeadbeef));
- kernel.upgradeTo(address(0xdeadbeef));
- }
-
- function test_external_call_default() external virtual {
- vm.startPrank(owner);
- (bool success,) = address(kernel).call(abi.encodePacked("Hello world"));
- assertEq(success, true);
- }
-
- function test_initialize() external {
- factory.createAccount(address(kernelImpl), getInitializeData(), 1);
- }
-
- function test_initialize_twice() external {
- (bool success,) = address(kernel).call(getInitializeData());
- assertEq(success, false);
- }
-
- function test_should_return_address_if_deployed() external {
- address proxy = factory.createAccount(address(kernelImpl), getInitializeData(), 0);
- assertEq(proxy, address(kernel));
- }
-
- function test_validate_signature() external virtual {
- Kernel kernel2 = Kernel(payable(factory.createAccount(address(kernelImpl), getInitializeData(), 3)));
- string memory message = "hello world";
- bytes32 hash = ECDSA.toEthSignedMessageHash(bytes(message));
- bytes32 digest = keccak256(
- abi.encodePacked(
- "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), hash
- )
- );
- bytes memory sig = signHash(digest);
- vm.startPrank(makeAddr("app"));
- assertEq(kernel.isValidSignature(hash, sig), Kernel.isValidSignature.selector);
- assertEq(kernel2.isValidSignature(hash, sig), bytes4(0xffffffff));
- vm.stopPrank();
- }
-
- function test_fail_validate_wrongsignature() external virtual {
- bytes32 hash = keccak256(abi.encodePacked("hello world"));
- bytes memory sig = getWrongSignature(hash);
- vm.startPrank(makeAddr("app"));
- assertEq(kernel.isValidSignature(hash, sig), bytes4(0xffffffff));
- vm.stopPrank();
- }
-
- function test_fail_validate_not_activate() external virtual {
- TestValidator newDefaultValidator = new TestValidator();
- vm.startPrank(address(entryPoint));
- kernel.setDefaultValidator(newDefaultValidator, "");
- vm.stopPrank();
-
- newDefaultValidator.setData(false, 0, 0);
-
- vm.warp(100000);
-
- vm.startPrank(makeAddr("app"));
- bytes32 hash = keccak256(abi.encodePacked("hello world"));
- assertEq(kernel.isValidSignature(hash, ""), bytes4(0xffffffff));
- newDefaultValidator.setData(true, uint48(block.timestamp + 1000), uint48(0));
- assertEq(kernel.isValidSignature(hash, ""), bytes4(0xffffffff));
- newDefaultValidator.setData(true, uint48(0), uint48(block.timestamp - 1000));
- assertEq(kernel.isValidSignature(hash, ""), bytes4(0xffffffff));
- vm.stopPrank();
- }
-
- function test_should_emit_event_on_receive() external {
- vm.expectEmit(address(kernel));
- emit Received(address(this), 1000);
- (bool success,) = address(kernel).call{value: 1000}("");
- assertEq(success, true);
- }
-
- function test_should_receive_erc721() external {
- TestERC721 token = new TestERC721();
- token.safeMint(address(kernel), 1);
- }
-
- function test_should_receive_erc1155() external {
- TestERC1155 token = new TestERC1155();
- token.mint(address(kernel), 1, 1000, "");
- }
-
- function test_should_receive_erc1155_batch() external {
- TestERC1155 token = new TestERC1155();
- uint256[] memory ids = new uint256[](2);
- ids[0] = 1;
- ids[1] = 2;
- uint256[] memory amounts = new uint256[](2);
- amounts[0] = 1000;
- amounts[1] = 1000;
- token.batchMint(address(kernel), ids, amounts, "");
- }
-
- function test_set_default_validator() external virtual {
- TestValidator newDefaultValidator = new TestValidator();
- bytes memory empty;
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(IKernel.setDefaultValidator.selector, address(newDefaultValidator), empty)
- );
- performUserOperationWithSig(op);
- assertEq(address(IKernel(address(kernel)).getDefaultValidator()), address(newDefaultValidator));
- }
-
- function test_disable_mode() external {
- vm.warp(1000);
- bytes memory empty;
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(IKernel.disableMode.selector, bytes4(0x00000001), address(0), empty)
- );
- performUserOperationWithSig(op);
- assertEq(uint256(bytes32(IKernel(address(kernel)).getDisabledMode())), 1 << 224);
- assertEq(uint256(IKernel(address(kernel)).getLastDisabledTime()), block.timestamp);
- }
-
- function test_set_execution() external {
- TestValidator newValidator = new TestValidator();
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.setExecution.selector,
- bytes4(0xdeadbeef),
- address(0xdead),
- address(newValidator),
- uint48(0),
- uint48(0),
- bytes("")
- )
- );
- performUserOperationWithSig(op);
- ExecutionDetail memory execution = IKernel(address(kernel)).getExecution(bytes4(0xdeadbeef));
- assertEq(execution.executor, address(0xdead));
- assertEq(address(execution.validator), address(newValidator));
- assertEq(uint256(ValidUntil.unwrap(execution.validUntil)), uint256(0));
- assertEq(uint256(ValidAfter.unwrap(execution.validAfter)), uint256(0));
- }
-
- function test_external_call_execution() external virtual {
- TestValidator newValidator = new TestValidator();
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.setExecution.selector,
- bytes4(0xdeadbeef),
- address(0xdead),
- address(newValidator),
- uint48(0),
- uint48(0),
- bytes("")
- )
- );
- performUserOperationWithSig(op);
- ExecutionDetail memory execution = IKernel(address(kernel)).getExecution(bytes4(0xdeadbeef));
- assertEq(execution.executor, address(0xdead));
- assertEq(address(execution.validator), address(newValidator));
- assertEq(uint256(ValidUntil.unwrap(execution.validUntil)), uint256(0));
- assertEq(uint256(ValidAfter.unwrap(execution.validAfter)), uint256(0));
-
- address randomAddr = makeAddr("random");
- newValidator.sudoSetCaller(address(kernel), randomAddr);
- vm.startPrank(randomAddr);
- (bool success,) = address(kernel).call(abi.encodePacked(bytes4(0xdeadbeef)));
- assertEq(success, true);
- vm.stopPrank();
-
- address notAllowed = makeAddr("notAllowed");
- vm.startPrank(notAllowed);
- (bool success2,) = address(kernel).call(abi.encodePacked(bytes4(0xdeadbeef)));
- assertEq(success2, false);
- vm.stopPrank();
- }
-
- function test_revert_when_mode_disabled() external {
- vm.warp(1000);
- bytes memory empty;
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(IKernel.disableMode.selector, bytes4(0x00000001), address(0), empty)
- );
- performUserOperationWithSig(op);
-
- // try to run with mode 0x00000001
- op = buildUserOperation(abi.encodeWithSelector(IKernel.disableMode.selector, bytes4(0x00000001)));
- op.signature = abi.encodePacked(bytes4(0x00000001), entryPoint.signUserOpHash(vm, ownerKey, op));
- vm.expectRevert(
- abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, string.concat("AA23 reverted (or OOG)"))
- );
- performUserOperation(op);
- }
-
- // validate user op
- function test_validateUserOp_fail_not_entryPoint() external {
- UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector));
- vm.expectRevert(IKernel.NotEntryPoint.selector);
- kernel.validateUserOp(op, bytes32(hex"deadbeef"), uint256(100));
- }
-
- function test_validateUserOp_fail_invalid_mode() external {
- UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector));
- op.signature = hex"00000003";
- vm.prank(address(entryPoint));
- ValidationData res = kernel.validateUserOp(op, bytes32(hex"deadbeef"), uint256(100));
- assertEq(ValidationData.unwrap(res), 1);
- }
-
- function test_sudo() external {
- UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector));
- performUserOperationWithSig(op);
- }
-
- function test_sudo_wrongSig() external {
- UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector));
- op.signature = getWrongSignature(op);
- vm.expectRevert();
- performUserOperation(op);
- }
-
- // mode 2 tests
- function test_mode_2() public {
- UserOperation memory op = buildUserOperation(abi.encodePacked(executionSig));
-
- op.signature = buildEnableSignature(
- op, executionSig, uint48(0), uint48(0), executionDetail.validator, executionDetail.executor
- );
- vm.expectEmit(true, true, true, false, address(entryPoint));
- emit UserOperationEvent(entryPoint.getUserOpHash(op), address(kernel), address(0), op.nonce, false, 0, 0);
- performUserOperation(op);
- }
-
- function buildEnableSignature(
- UserOperation memory op,
- bytes4 selector,
- uint48 validAfter,
- uint48 validUntil,
- IKernelValidator validator,
- address executor
- ) internal view returns (bytes memory sig) {
- require(address(executionDetail.validator) != address(0), "execution detail not set");
- bytes memory enableData = getEnableData();
- bytes32 digest = getTypedDataHash(selector, validAfter, validUntil, address(validator), executor, enableData);
- bytes memory enableSig = signHash(digest);
- sig = getValidatorSignature(op);
- sig = abi.encodePacked(
- bytes4(0x00000002),
- validAfter,
- validUntil,
- address(validator),
- executor,
- uint256(enableData.length),
- enableData,
- enableSig.length,
- enableSig,
- sig
- );
- }
-
- function test_enable_then_mode_1() public {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.setExecution.selector,
- executionSig,
- executionDetail.executor,
- executionDetail.validator,
- ValidUntil.wrap(0),
- ValidAfter.wrap(0),
- getEnableData()
- )
- );
- performUserOperationWithSig(op);
- op = buildUserOperation(abi.encodeWithSelector(executionSig));
- op.signature = abi.encodePacked(bytes4(0x00000001), getValidatorSignature(op));
- performUserOperation(op);
- }
-
- function _setAddress() internal {
- kernel = Kernel(payable(address(factory.createAccount(address(kernelImpl), getInitializeData(), 0))));
- vm.deal(address(kernel), 1e30);
- }
-
- // computes the hash of the fully encoded EIP-712 message for the domain, which can be used to recover the signer
- function getTypedDataHash(
- bytes4 sig,
- uint48 validUntil,
- uint48 validAfter,
- address validator,
- address executor,
- bytes memory enableData
- ) public view returns (bytes32) {
- return keccak256(
- abi.encodePacked(
- "\x19\x01",
- ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)),
- ERC4337Utils.getStructHash(sig, validUntil, validAfter, validator, executor, enableData)
- )
- );
- }
-
- function buildUserOperation(bytes memory callData) internal view returns (UserOperation memory op) {
- return entryPoint.fillUserOp(address(kernel), callData);
- }
-
- function performUserOperationWithSig(UserOperation memory op) internal {
- op.signature = signUserOp(op);
- UserOperation[] memory ops = new UserOperation[](1);
- ops[0] = op;
- entryPoint.handleOps(ops, beneficiary);
- }
-
- function performUserOperation(UserOperation memory op) internal {
- UserOperation[] memory ops = new UserOperation[](1);
- ops[0] = op;
- entryPoint.handleOps(ops, beneficiary);
- }
-}
diff --git a/src/utils/KernelHelper.sol b/src/utils/KernelValidationResult.sol
similarity index 93%
rename from src/utils/KernelHelper.sol
rename to src/utils/KernelValidationResult.sol
index 6c6d3e47..91a1b6df 100644
--- a/src/utils/KernelHelper.sol
+++ b/src/utils/KernelValidationResult.sol
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
-import {SIG_VALIDATION_FAILED_UINT} from "../common/Constants.sol";
-import {ValidationData} from "../common/Types.sol";
+import {SIG_VALIDATION_FAILED_UINT} from "../types/Constants.sol";
+import {ValidationData, getValidationResult} from "../types/Types.sol";
function _intersectValidationData(ValidationData a, ValidationData b) pure returns (ValidationData validationData) {
assembly {
diff --git a/src/utils/ModuleLib.sol b/src/utils/ModuleLib.sol
new file mode 100644
index 00000000..3c390676
--- /dev/null
+++ b/src/utils/ModuleLib.sol
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {ExcessivelySafeCall} from "ExcessivelySafeCall/ExcessivelySafeCall.sol";
+import {IModule} from "../interfaces/IERC7579Modules.sol";
+
+library ModuleLib {
+ event ModuleUninstallResult(address module, bool result);
+
+ function uninstallModule(address module, bytes memory deinitData) internal returns (bool result) {
+ (result,) = ExcessivelySafeCall.excessivelySafeCall(
+ module, gasleft(), 0, 0, abi.encodeWithSelector(IModule.onUninstall.selector, deinitData)
+ );
+ emit ModuleUninstallResult(module, result);
+ }
+}
diff --git a/src/utils/P256VerifierWrapper.sol b/src/utils/P256VerifierWrapper.sol
deleted file mode 100644
index bc6340ac..00000000
--- a/src/utils/P256VerifierWrapper.sol
+++ /dev/null
@@ -1,45 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {FCL_ecdsa} from "FreshCryptoLib/FCL_ecdsa.sol";
-
-/// @title P256VerifierWrapper
-/// @author rdubois-crypto
-/// @author KONFeature
-/// @notice Wrapper arround the P256Verifier contract of @rdubois-crypto, using it to accept EIP-7212 compliant verification (p256 pre-compiled curve)
-/// @dev This lib is only a wrapper around the P256Verifier contract.
-/// It will call the verifySignature function of the P256Verifier contract.
-/// Once the RIP-7212 will be deployed and effective, this contract will be useless.
-/// Tracker on polygon: PR: https://github.com/maticnetwork/bor/pull/1069
-/// Now waiting on the Napoli hardfork to be deployed
-contract P256VerifierWrapper {
- /**
- * Precompiles don't use a function signature. The first byte of callldata
- * is the first byte of an input argument. In this case:
- *
- * input[ 0: 32] = signed data hash
- * input[ 32: 64] = signature r
- * input[ 64: 96] = signature s
- * input[ 96:128] = public key x
- * input[128:160] = public key y
- *
- * result[ 0: 32] = 0x00..00 (invalid) or 0x00..01 (valid)
- *
- * For details, see https://eips.ethereum.org/EIPS/eip-7212
- */
- fallback(bytes calldata input) external returns (bytes memory) {
- if (input.length != 160) {
- return abi.encodePacked(uint256(0));
- }
-
- bytes32 hash = bytes32(input[0:32]);
- uint256 r = uint256(bytes32(input[32:64]));
- uint256 s = uint256(bytes32(input[64:96]));
- uint256 x = uint256(bytes32(input[96:128]));
- uint256 y = uint256(bytes32(input[128:160]));
-
- uint256 ret = FCL_ecdsa.ecdsa_verify(hash, r, s, x, y) ? 1 : 0;
-
- return abi.encodePacked(ret);
- }
-}
diff --git a/src/utils/ValidationTypeLib.sol b/src/utils/ValidationTypeLib.sol
new file mode 100644
index 00000000..8f4f9710
--- /dev/null
+++ b/src/utils/ValidationTypeLib.sol
@@ -0,0 +1,154 @@
+// SPDX-License-Identifier: MIT
+
+pragma solidity ^0.8.0;
+
+import {IValidator, IPolicy} from "../interfaces/IERC7579Modules.sol";
+import {PassFlag, ValidationType, ValidationId, ValidationMode, PolicyData, PermissionId} from "../types/Types.sol";
+import {VALIDATION_TYPE_PERMISSION} from "../types/Constants.sol";
+
+library ValidatorLib {
+ function encodeFlag(bool skipUserOp, bool skipSignature) internal pure returns (PassFlag flag) {
+ assembly {
+ if skipUserOp { flag := 0x0001000000000000000000000000000000000000000000000000000000000000 }
+ if skipSignature { flag := or(flag, 0x0002000000000000000000000000000000000000000000000000000000000000) }
+ }
+ }
+
+ function encodePolicyData(bool skipUserOp, bool skipSig, address policy) internal pure returns (PolicyData data) {
+ assembly {
+ if skipUserOp { data := 0x0001000000000000000000000000000000000000000000000000000000000000 }
+ if skipSig { data := or(data, 0x0002000000000000000000000000000000000000000000000000000000000000) }
+ data := or(data, shl(80, policy))
+ }
+ }
+
+ function encodePermissionAsNonce(bytes1 mode, bytes4 permissionId, uint16 nonceKey, uint64 nonce)
+ internal
+ pure
+ returns (uint256 res)
+ {
+ return encodeAsNonce(
+ mode, ValidationType.unwrap(VALIDATION_TYPE_PERMISSION), bytes20(permissionId), nonceKey, nonce
+ );
+ }
+
+ function encodeAsNonce(bytes1 mode, bytes1 vType, bytes20 ValidationIdWithoutType, uint16 nonceKey, uint64 nonce)
+ internal
+ pure
+ returns (uint256 res)
+ {
+ assembly {
+ res := nonce
+ res := or(res, shl(64, nonceKey))
+ res := or(res, shr(16, ValidationIdWithoutType))
+ res := or(res, shr(8, vType))
+ res := or(res, mode)
+ }
+ }
+
+ function encodeAsNonceKey(bytes1 mode, bytes1 vType, bytes20 ValidationIdWithoutType, uint16 nonceKey)
+ internal
+ pure
+ returns (uint192 res)
+ {
+ assembly {
+ res := or(nonceKey, shr(80, ValidationIdWithoutType))
+ res := or(res, shr(72, vType))
+ res := or(res, shr(64, mode))
+ }
+ }
+
+ function decodeNonce(uint256 nonce)
+ internal
+ pure
+ returns (ValidationMode mode, ValidationType vType, ValidationId identifier)
+ {
+ // 2bytes mode (1byte currentMode, 1byte type)
+ // 21bytes identifier
+ // 1byte mode | 1byte type | 20bytes identifierWithoutType | 2byte nonceKey | 8byte nonce == 32bytes
+ assembly {
+ mode := nonce
+ vType := shl(8, nonce)
+ identifier := shl(8, nonce)
+ switch shr(248, identifier)
+ case 0x0000000000000000000000000000000000000000000000000000000000000002 {
+ identifier := and(identifier, 0xffffffffff000000000000000000000000000000000000000000000000000000)
+ }
+ }
+ }
+
+ function decodeSignature(bytes calldata signature) internal pure returns (ValidationId vId, bytes calldata sig) {
+ assembly {
+ vId := calldataload(signature.offset)
+ switch shr(248, vId)
+ case 0 {
+ // sudo mode
+ vId := 0x00
+ sig.offset := add(signature.offset, 1)
+ sig.length := sub(signature.length, 1)
+ }
+ case 1 {
+ // validator mode
+ sig.offset := add(signature.offset, 21)
+ sig.length := sub(signature.length, 21)
+ }
+ case 2 {
+ vId := and(vId, 0xffffffffff000000000000000000000000000000000000000000000000000000)
+ sig.offset := add(signature.offset, 5)
+ sig.length := sub(signature.length, 5)
+ }
+ default { revert(0x00, 0x00) }
+ }
+ }
+
+ function decodePolicyData(PolicyData data) internal pure returns (PassFlag flag, IPolicy policy) {
+ assembly {
+ flag := data
+ policy := shr(80, data)
+ }
+ }
+
+ function validatorToIdentifier(IValidator validator) internal pure returns (ValidationId vId) {
+ assembly {
+ vId := 0x0100000000000000000000000000000000000000000000000000000000000000
+ vId := or(vId, shl(88, validator))
+ }
+ }
+
+ function getType(ValidationId validator) internal pure returns (ValidationType vType) {
+ assembly {
+ vType := validator
+ }
+ }
+
+ function getValidator(ValidationId validator) internal pure returns (IValidator v) {
+ assembly {
+ v := shr(88, validator)
+ }
+ }
+
+ function getPermissionId(ValidationId validator) internal pure returns (PermissionId id) {
+ assembly {
+ id := shl(8, validator)
+ }
+ }
+
+ function permissionToIdentifier(PermissionId permissionId) internal pure returns (ValidationId vId) {
+ assembly {
+ vId := 0x0200000000000000000000000000000000000000000000000000000000000000
+ vId := or(vId, shr(8, permissionId))
+ }
+ }
+
+ function getPolicy(PolicyData data) internal pure returns (IPolicy vId) {
+ assembly {
+ vId := shr(80, data)
+ }
+ }
+
+ function getPermissionSkip(PolicyData data) internal pure returns (PassFlag flag) {
+ assembly {
+ flag := data
+ }
+ }
+}
diff --git a/src/validator/ECDSATypedValidator.sol b/src/validator/ECDSATypedValidator.sol
deleted file mode 100644
index f2dea0c3..00000000
--- a/src/validator/ECDSATypedValidator.sol
+++ /dev/null
@@ -1,125 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {EIP712} from "solady/utils/EIP712.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {ValidationData} from "../common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "../common/Constants.sol";
-
-struct ECDSATypedValidatorStorage {
- address owner;
-}
-
-/// @author @KONFeature
-/// @title ECDSATypedValidator
-/// @notice This validator uses the ECDSA curve to validate signatures.
-/// @notice It's using EIP-712 format signature to validate user operations signature & classic signature
-contract ECDSATypedValidator is IKernelValidator, EIP712 {
- /// @notice The type hash used for kernel user op validation
- bytes32 constant USER_OP_TYPEHASH = keccak256("AllowUserOp(address owner,address kernelWallet,bytes32 userOpHash)");
- /// @notice The type hash used for kernel signature validation
- bytes32 constant SIGNATURE_TYPEHASH = keccak256("KernelSignature(address owner,address kernelWallet,bytes32 hash)");
-
- /// @notice Emitted when the owner of a kernel is changed.
- event OwnerChanged(address indexed kernel, address newOwner);
-
- /* -------------------------------------------------------------------------- */
- /* Storage */
- /* -------------------------------------------------------------------------- */
-
- /// @notice The validator storage of a kernel.
- mapping(address kernel => ECDSATypedValidatorStorage validatorStorage) private ecdsaValidatorStorage;
-
- /* -------------------------------------------------------------------------- */
- /* EIP-712 Methods */
- /* -------------------------------------------------------------------------- */
-
- /// @dev Get the current name & version of the validator, used for the EIP-712 domain separator from Solady
- function _domainNameAndVersion() internal pure override returns (string memory, string memory) {
- return ("Kernel:ECDSATypedValidator", "1.0.0");
- }
-
- /// @dev Tell to solady that the current name & version of the validator won't change, so no need to recompute the eip-712 domain separator
- function _domainNameAndVersionMayChange() internal pure override returns (bool) {
- return false;
- }
-
- /// @dev Export the current domain seperator
- function getDomainSeperator() public view returns (bytes32) {
- return _domainSeparator();
- }
-
- /* -------------------------------------------------------------------------- */
- /* Kernel validator Methods */
- /* -------------------------------------------------------------------------- */
-
- /// @dev Enable this validator for a given `kernel` (msg.sender)
- function enable(bytes calldata _data) external payable override {
- address owner = address(bytes20(_data[0:20]));
- ecdsaValidatorStorage[msg.sender].owner = owner;
- emit OwnerChanged(msg.sender, owner);
- }
-
- /// @dev Disable this validator for a given `kernel` (msg.sender)
- function disable(bytes calldata) external payable override {
- delete ecdsaValidatorStorage[msg.sender];
- }
-
- /// @dev Validate a `_userOp` using a EIP-712 signature, signed by the owner of the kernel account who is the `_userOp` sender
- function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256)
- external
- payable
- override
- returns (ValidationData validationData)
- {
- // Get the owner for the given kernel account
- address owner = ecdsaValidatorStorage[_userOp.sender].owner;
-
- // Build the full message hash to check against
- bytes32 typedDataHash =
- _hashTypedData(keccak256(abi.encode(USER_OP_TYPEHASH, owner, _userOp.sender, _userOpHash)));
-
- // Validate the typed data hash signature
- if (owner == ECDSA.recover(typedDataHash, _userOp.signature)) {
- // If that worked, return a valid validation data
- return ValidationData.wrap(0);
- }
-
- // If not, return a failed validation data
- return SIG_VALIDATION_FAILED;
- }
-
- /// @dev Validate a `_signature` of the `_hash` ofor the given `kernel` (msg.sender)
- function validateSignature(bytes32 _hash, bytes calldata signature) public view override returns (ValidationData) {
- // Get the owner for the given kernel account
- address owner = ecdsaValidatorStorage[msg.sender].owner;
-
- // Build the full message hash to check against
- bytes32 typedDataHash = _hashTypedData(keccak256(abi.encode(SIGNATURE_TYPEHASH, owner, msg.sender, _hash)));
-
- // Validate the typed data hash signature
- if (owner == ECDSA.recover(typedDataHash, signature)) {
- // If that worked, return a valid validation data
- return ValidationData.wrap(0);
- }
-
- // If not, return a failed validation data
- return SIG_VALIDATION_FAILED;
- }
-
- /// @dev Check if the caller is a valid signer for this kernel account
- function validCaller(address _caller, bytes calldata) external view override returns (bool) {
- return ecdsaValidatorStorage[msg.sender].owner == _caller;
- }
-
- /* -------------------------------------------------------------------------- */
- /* Public view methods */
- /* -------------------------------------------------------------------------- */
-
- /// @dev Get the owner of a given `kernel`
- function getOwner(address _kernel) public view returns (address) {
- return ecdsaValidatorStorage[_kernel].owner;
- }
-}
diff --git a/src/validator/ECDSAValidator.sol b/src/validator/ECDSAValidator.sol
index 9eeabf6e..00e6aca5 100644
--- a/src/validator/ECDSAValidator.sol
+++ b/src/validator/ECDSAValidator.sol
@@ -2,62 +2,97 @@
pragma solidity ^0.8.0;
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
import {ECDSA} from "solady/utils/ECDSA.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {ValidationData} from "../common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "../common/Constants.sol";
+import {IValidator, IHook} from "../interfaces/IERC7579Modules.sol";
+import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol";
+import {
+ SIG_VALIDATION_SUCCESS_UINT,
+ SIG_VALIDATION_FAILED_UINT,
+ MODULE_TYPE_VALIDATOR,
+ MODULE_TYPE_HOOK,
+ ERC1271_MAGICVALUE,
+ ERC1271_INVALID
+} from "../types/Constants.sol";
struct ECDSAValidatorStorage {
address owner;
}
-contract ECDSAValidator is IKernelValidator {
- event OwnerChanged(address indexed kernel, address indexed oldOwner, address indexed newOwner);
+contract ECDSAValidator is IValidator, IHook {
+ event OwnerRegistered(address indexed kernel, address indexed owner);
mapping(address => ECDSAValidatorStorage) public ecdsaValidatorStorage;
- function disable(bytes calldata) external payable override {
+ function onInstall(bytes calldata _data) external payable override {
+ if (_isInitialized(msg.sender)) revert AlreadyInitialized(msg.sender);
+ address owner = address(bytes20(_data[0:20]));
+ ecdsaValidatorStorage[msg.sender].owner = owner;
+ emit OwnerRegistered(msg.sender, owner);
+ }
+
+ function onUninstall(bytes calldata) external payable override {
+ if (!_isInitialized(msg.sender)) revert NotInitialized(msg.sender);
delete ecdsaValidatorStorage[msg.sender];
}
- function enable(bytes calldata _data) external payable override {
- address owner = address(bytes20(_data[0:20]));
- address oldOwner = ecdsaValidatorStorage[msg.sender].owner;
- ecdsaValidatorStorage[msg.sender].owner = owner;
- emit OwnerChanged(msg.sender, oldOwner, owner);
+ function isModuleType(uint256 typeID) external pure override returns (bool) {
+ return typeID == MODULE_TYPE_VALIDATOR || typeID == MODULE_TYPE_HOOK;
+ }
+
+ function isInitialized(address smartAccount) external view override returns (bool) {
+ return _isInitialized(smartAccount);
+ }
+
+ function _isInitialized(address smartAccount) internal view returns (bool) {
+ return ecdsaValidatorStorage[smartAccount].owner != address(0);
}
- function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256)
+ function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash)
external
payable
override
- returns (ValidationData validationData)
+ returns (uint256)
{
- address owner = ecdsaValidatorStorage[_userOp.sender].owner;
- bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash);
- if (owner == ECDSA.recover(hash, _userOp.signature)) {
- return ValidationData.wrap(0);
+ address owner = ecdsaValidatorStorage[msg.sender].owner;
+ bytes calldata sig = userOp.signature;
+ if (owner == ECDSA.recover(userOpHash, sig)) {
+ return SIG_VALIDATION_SUCCESS_UINT;
}
- if (owner != ECDSA.recover(_userOpHash, _userOp.signature)) {
- return SIG_VALIDATION_FAILED;
+ bytes32 ethHash = ECDSA.toEthSignedMessageHash(userOpHash);
+ address recovered = ECDSA.recover(ethHash, sig);
+ if (owner != recovered) {
+ return SIG_VALIDATION_FAILED_UINT;
}
+ return SIG_VALIDATION_SUCCESS_UINT;
}
- function validateSignature(bytes32 hash, bytes calldata signature) public view override returns (ValidationData) {
+ function isValidSignatureWithSender(address, bytes32 hash, bytes calldata sig)
+ external
+ view
+ override
+ returns (bytes4)
+ {
address owner = ecdsaValidatorStorage[msg.sender].owner;
- if (owner == ECDSA.recover(hash, signature)) {
- return ValidationData.wrap(0);
+ if (owner == ECDSA.recover(hash, sig)) {
+ return ERC1271_MAGICVALUE;
}
bytes32 ethHash = ECDSA.toEthSignedMessageHash(hash);
- address recovered = ECDSA.recover(ethHash, signature);
+ address recovered = ECDSA.recover(ethHash, sig);
if (owner != recovered) {
- return SIG_VALIDATION_FAILED;
+ return ERC1271_INVALID;
}
- return ValidationData.wrap(0);
+ return ERC1271_MAGICVALUE;
}
- function validCaller(address _caller, bytes calldata) external view override returns (bool) {
- return ecdsaValidatorStorage[msg.sender].owner == _caller;
+ function preCheck(address msgSender, uint256 value, bytes calldata)
+ external
+ payable
+ override
+ returns (bytes memory)
+ {
+ require(msgSender == ecdsaValidatorStorage[msg.sender].owner, "ECDSAValidator: sender is not owner");
+ return hex"";
}
+
+ function postCheck(bytes calldata hookData, bool success, bytes calldata res) external payable override {}
}
diff --git a/src/validator/ERC165SessionKeyValidator.sol b/src/validator/ERC165SessionKeyValidator.sol
deleted file mode 100644
index 4f381001..00000000
--- a/src/validator/ERC165SessionKeyValidator.sol
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {ValidAfter, ValidUntil, ValidationData, packValidationData} from "../common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "../common/Constants.sol";
-
-// idea, we can make this merkle root
-struct ERC165SessionKeyStorage {
- bool enabled;
- bytes4 selector;
- bytes4 interfaceId;
- ValidAfter validAfter;
- ValidUntil validUntil;
- uint32 addressOffset;
-}
-
-interface IERC165 {
- function supportsInterface(bytes4 interfaceId) external view returns (bool);
-}
-
-contract ERC165SessionKeyValidator is IKernelValidator {
- mapping(address sessionKey => mapping(address kernel => ERC165SessionKeyStorage)) public sessionKeys;
-
- function enable(bytes calldata _data) external payable {
- address sessionKey = address(bytes20(_data[0:20]));
- bytes4 interfaceId = bytes4(_data[20:24]);
- bytes4 selector = bytes4(_data[24:28]);
- ValidAfter validAfter = ValidAfter.wrap(uint48(bytes6(_data[28:34])));
- ValidUntil validUntil = ValidUntil.wrap(uint48(bytes6(_data[34:40])));
- uint32 addressOffset = uint32(bytes4(_data[40:44]));
- sessionKeys[sessionKey][msg.sender] =
- ERC165SessionKeyStorage(true, selector, interfaceId, validAfter, validUntil, addressOffset);
- }
-
- function disable(bytes calldata _data) external payable {
- address sessionKey = address(bytes20(_data[0:20]));
-
- delete sessionKeys[sessionKey][msg.sender];
- }
-
- function validateSignature(bytes32, bytes calldata) external pure override returns (ValidationData) {
- revert NotImplemented();
- }
-
- function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256)
- external
- payable
- returns (ValidationData)
- {
- bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash);
- address recovered = ECDSA.recover(hash, _userOp.signature);
- ERC165SessionKeyStorage storage sessionKey = sessionKeys[recovered][_userOp.sender];
- if (!sessionKey.enabled) {
- return SIG_VALIDATION_FAILED;
- }
- require(bytes4(_userOp.callData[0:4]) == sessionKey.selector, "not supported selector");
- address token = address(bytes20(_userOp.callData[sessionKey.addressOffset:sessionKey.addressOffset + 20]));
- require(IERC165(token).supportsInterface(sessionKey.interfaceId), "does not support interface");
- return packValidationData(sessionKey.validAfter, sessionKey.validUntil);
- }
-
- function validCaller(address, bytes calldata) external view override returns (bool) {
- revert NotImplemented();
- }
-}
diff --git a/src/validator/KillSwitchValidator.sol b/src/validator/KillSwitchValidator.sol
deleted file mode 100644
index 13b279e9..00000000
--- a/src/validator/KillSwitchValidator.sol
+++ /dev/null
@@ -1,85 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-pragma solidity ^0.8.0;
-
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {IKernel} from "../interfaces/IKernel.sol";
-import {_intersectValidationData} from "../utils/KernelHelper.sol";
-import {WalletKernelStorage, ExecutionDetail} from "../common/Structs.sol";
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {ValidationData, ValidAfter, ValidUntil, packValidationData, parseValidationData} from "../common/Types.sol";
-import {KillSwitchAction} from "../executor/KillSwitchAction.sol";
-import {SIG_VALIDATION_FAILED} from "../common/Constants.sol";
-
-struct KillSwitchValidatorStorage {
- address guardian;
- IKernelValidator validator;
- ValidAfter pausedUntil;
- bytes4 disableMode;
-}
-
-contract KillSwitchValidator is IKernelValidator {
- mapping(address => KillSwitchValidatorStorage) public killSwitchValidatorStorage;
-
- function enable(bytes calldata enableData) external payable override {
- killSwitchValidatorStorage[msg.sender].guardian = address(bytes20(enableData[0:20]));
- }
-
- function disable(bytes calldata) external payable override {
- delete killSwitchValidatorStorage[msg.sender];
- }
-
- function validateSignature(bytes32, bytes calldata) external pure override returns (ValidationData) {
- revert NotImplemented();
- }
-
- function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256)
- external
- payable
- override
- returns (ValidationData)
- {
- KillSwitchValidatorStorage storage validatorStorage = killSwitchValidatorStorage[msg.sender]; // should use msg.sender to prevent others from changing storage
- ValidAfter pausedUntil = validatorStorage.pausedUntil;
- ValidationData validationData;
- if (address(validatorStorage.validator) != address(0)) {
- // check for validator at first
- try validatorStorage.validator.validateUserOp(_userOp, _userOpHash, 0) returns (ValidationData res) {
- validationData = res;
- } catch {
- validationData = SIG_VALIDATION_FAILED;
- }
- (,, address result) = parseValidationData(validationData);
- if (result != address(1)) {
- // if signature verification has not been failed, return with the result
- ValidationData delayedData = packValidationData(pausedUntil, ValidUntil.wrap(0));
- return _intersectValidationData(validationData, delayedData);
- } else if (bytes4(_userOp.callData[0:4]) == KillSwitchAction.toggleKillSwitch.selector) {
- bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash);
- address recovered = ECDSA.recover(hash, _userOp.signature);
- if (validatorStorage.guardian == recovered) {
- return packValidationData(ValidAfter.wrap(0), ValidUntil.wrap(0));
- }
- }
- }
- if (_userOp.signature.length == 71) {
- // save data to this storage
- validatorStorage.pausedUntil = ValidAfter.wrap(uint48(bytes6(_userOp.signature[0:6])));
- validatorStorage.validator = IKernel(msg.sender).getDefaultValidator();
- validatorStorage.disableMode = IKernel(msg.sender).getDisabledMode();
- bytes32 hash = ECDSA.toEthSignedMessageHash(keccak256(bytes.concat(_userOp.signature[0:6], _userOpHash)));
- address recovered = ECDSA.recover(hash, _userOp.signature[6:]);
- if (validatorStorage.guardian != recovered) {
- return SIG_VALIDATION_FAILED;
- }
- return packValidationData(pausedUntil, ValidUntil.wrap(0));
- } else {
- return SIG_VALIDATION_FAILED;
- }
- }
-
- function validCaller(address, bytes calldata) external view override returns (bool) {
- revert NotImplemented();
- }
-}
diff --git a/src/validator/SessionKeyValidator.sol b/src/validator/SessionKeyValidator.sol
deleted file mode 100644
index fe876192..00000000
--- a/src/validator/SessionKeyValidator.sol
+++ /dev/null
@@ -1,311 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {MerkleProofLib} from "solady/utils/MerkleProofLib.sol";
-
-import {IKernelValidator} from "../interfaces/IKernelValidator.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-
-import {SIG_VALIDATION_FAILED} from "../common/Constants.sol";
-import {ParamCondition, Operation} from "../common/Enums.sol";
-import {ParamRule, SessionData, Permission, Call, ExecutionRule, ExecutionStatus, Nonces} from "../common/Structs.sol";
-import "../common/Types.sol";
-
-import {Kernel} from "../Kernel.sol";
-
-contract SessionKeyValidator is IKernelValidator {
- mapping(address kernel => Nonces) public nonces;
- mapping(address sessionKey => mapping(address kernel => SessionData)) public sessionData;
- mapping(bytes32 permissionKey => mapping(address kernel => ExecutionStatus)) public executionStatus;
-
- function enable(bytes calldata _data) external payable {
- address sessionKey = address(bytes20(_data[0:20]));
- bytes32 merkleRoot = bytes32(_data[20:52]);
- ValidAfter validAfter = ValidAfter.wrap(uint48(bytes6(_data[52:58])));
- ValidUntil validUntil = ValidUntil.wrap(uint48(bytes6(_data[58:64])));
- address paymaster = address(bytes20(_data[64:84]));
- uint256 nonce = uint256(bytes32(_data[84:116]));
- sessionData[sessionKey][msg.sender] = SessionData(merkleRoot, validAfter, validUntil, paymaster, nonce);
- require(nonce == ++nonces[msg.sender].lastNonce, "SessionKeyValidator: invalid nonce");
- }
-
- function invalidateNonce(uint128 nonce) public {
- require(nonce > nonces[msg.sender].invalidNonce, "SessionKeyValidator: invalid nonce");
- nonces[msg.sender].invalidNonce = nonce;
- if (nonces[msg.sender].lastNonce < nonce) {
- nonces[msg.sender].lastNonce = nonce;
- }
- }
-
- function disable(bytes calldata _data) external payable {
- // invalidate specific sessionKey
- if (_data.length == 20) {
- address sessionKey = address(bytes20(_data[0:20]));
- delete sessionData[sessionKey][msg.sender];
- } else if (_data.length == 16) {
- // invalidate all sessionKeys before specific nonce
- invalidateNonce(uint128(bytes16(_data[0:16])));
- } else {
- // invalidate all sessionKeys
- invalidateNonce(nonces[msg.sender].lastNonce);
- }
- }
-
- function _verifyPaymaster(UserOperation calldata userOp, SessionData storage session) internal view {
- // to make this fully work with paymaster service, prepack the address of paymaster up front
- if (session.paymaster == address(1)) {
- // any paymaster
- require(userOp.paymasterAndData.length != 0, "SessionKeyValidator: paymaster not set");
- } else if (session.paymaster != address(0)) {
- // specific paymaster
- require(
- address(bytes20(userOp.paymasterAndData[0:20])) == session.paymaster,
- "SessionKeyValidator: paymaster mismatch"
- );
- }
- }
-
- function _verifyUserOpHash(address _sessionKey, ValidAfter validAfter, ValidUntil validUntil)
- internal
- view
- returns (ValidationData)
- {
- bytes32 userOpHash;
- assembly {
- // 0x00 ~ 0x04 : sig
- // 0x04 ~ 0x24 : userOp.offset
- // 0x24 ~ 0x44 : userOpHash
- userOpHash := calldataload(0x24)
- }
- bytes calldata signature;
- assembly {
- //0x00 ~ 0x04 : selector
- //0x04 ~ 0x24 : userOp.offset
- //0x24 ~ 0x44 : userOpHash
- //0x44 ~ 0x64 : missingAccountFund
- //[userOp.offset + 0x04]
- //0x00 ~ 0x20 : sender
- //0x20 ~ 0x40 : nonce
- //0x40 ~ 0x60 : initCode
- //0x60 ~ 0x80 : callData
- //0x80 ~ 0xa0 : callGasLimit
- //0xa0 ~ 0xc0 : verificationGasLimit
- //0xc0 ~ 0xe0 : preVerificationGas
- //0xe0 ~ 0x100 : maxFeePerGas
- //0x100 ~ 0x120 : maxPriorityFeePerGas
- //0x120 ~ 0x140 : paymasterAndData
- //0x140 ~ 0x160 : signatureOffset
- //[signatureOffset + userOp.offset + 0x04]
- //[0x00 ~ 0x20] : length
- //[0x20 ~] : signature
- let userOpOffset := add(calldataload(0x04), 0x04)
- let signatureOffset := add(calldataload(add(userOpOffset, 0x140)), add(userOpOffset, 0x34))
- signature.offset := signatureOffset
- signature.length := 0x41
- }
- if (_sessionKey != ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), signature)) {
- return SIG_VALIDATION_FAILED;
- }
- return packValidationData(validAfter, validUntil);
- }
-
- // to parse batch execute permissions
- function _getPermissions(bytes calldata _sig) internal pure returns (Permission[] calldata permissions) {
- assembly {
- permissions.offset := add(add(_sig.offset, 0x20), calldataload(_sig.offset))
- permissions.length := calldataload(add(_sig.offset, calldataload(_sig.offset)))
- }
- }
-
- function _getProofs(bytes calldata _sig) internal pure returns (bytes32[][] calldata proofs) {
- assembly {
- proofs.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20))))
- proofs.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20)))
- }
- }
-
- // to parse single execute permission
- function _getPermission(bytes calldata _sig)
- internal
- pure
- returns (Permission calldata permission, bytes32[] calldata merkleProof)
- {
- assembly {
- permission := add(_sig.offset, calldataload(_sig.offset))
- merkleProof.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20))))
- merkleProof.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20)))
- }
- }
-
- function validateUserOp(UserOperation calldata userOp, bytes32, uint256)
- external
- payable
- returns (ValidationData)
- {
- // userOp.signature = signer + signature + permission + merkleProof
- address sessionKey = address(bytes20(userOp.signature[0:20]));
- SessionData storage session = sessionData[sessionKey][msg.sender];
- // nonce starts from 1
- require(session.nonce > nonces[msg.sender].invalidNonce, "SessionKeyValidator: session key not enabled");
- _verifyPaymaster(userOp, session);
-
- // NOTE: although this is allowed in smart contract, it is guided not to use this feature in most usecases
- // instead of setting sudo approval to sessionKey, please set specific permission to sessionKey
- if (session.merkleRoot == bytes32(0)) {
- return _verifyUserOpHash(sessionKey, session.validAfter, session.validUntil);
- }
-
- bytes calldata callData = userOp.callData;
- if (
- bytes4(callData[0:4]) == Kernel.execute.selector
- || bytes4(callData[0:4]) == Kernel.executeDelegateCall.selector
- ) {
- (Permission calldata permission, bytes32[] calldata merkleProof) = _getPermission(userOp.signature[85:]);
- (ValidAfter validAfter, bool verifyFailed) = _verifyParam(sessionKey, callData, permission, merkleProof);
- if (verifyFailed) {
- return SIG_VALIDATION_FAILED;
- }
- return _verifyUserOpHash(sessionKey, validAfter, session.validUntil);
- } else if (bytes4(callData[0:4]) == Kernel.executeBatch.selector) {
- Permission[] calldata permissions = _getPermissions(userOp.signature[85:]);
- bytes32[][] calldata merkleProof = _getProofs(userOp.signature[85:]);
- (ValidAfter validAfter, bool verifyFailed) = _verifyParams(sessionKey, callData, permissions, merkleProof);
- if (verifyFailed) {
- return SIG_VALIDATION_FAILED;
- }
- return _verifyUserOpHash(sessionKey, validAfter, session.validUntil);
- } else {
- return SIG_VALIDATION_FAILED;
- }
- }
-
- function _updateValidAfter(Permission calldata permission, bytes32 permissionKey)
- internal
- returns (ValidAfter validAfter)
- {
- if (permission.executionRule.interval == 0) {
- // no need to update validAfter
- validAfter = permission.executionRule.validAfter;
- } else {
- require(
- ValidAfter.unwrap(permission.executionRule.validAfter) != 0,
- "SessionKeyValidator: invalid execution rule"
- );
- // should update validAfter for executionStatus
- ExecutionStatus storage status = executionStatus[permissionKey][msg.sender];
- if (ValidAfter.unwrap(status.validAfter) != 0) {
- validAfter = ValidAfter.wrap(ValidAfter.unwrap(status.validAfter) + permission.executionRule.interval);
- } else {
- validAfter = permission.executionRule.validAfter;
- }
- status.validAfter = validAfter;
- }
- // update runs
- if (permission.executionRule.runs != 0) {
- ExecutionStatus storage status = executionStatus[permissionKey][msg.sender];
- status.runs += 1;
- require(status.runs <= permission.executionRule.runs, "SessionKeyValidator: runs exceeded");
- }
- return validAfter;
- }
-
- function _verifyParams(
- address sessionKey,
- bytes calldata callData,
- Permission[] calldata _permissions,
- bytes32[][] calldata _merkleProof
- ) internal returns (ValidAfter maxValidAfter, bool verifyFailed) {
- Call[] calldata calls;
- assembly {
- calls.offset := add(add(callData.offset, 0x24), calldataload(add(callData.offset, 4)))
- calls.length := calldataload(add(add(callData.offset, 4), calldataload(add(callData.offset, 4))))
- }
- uint256 i = 0;
- SessionData storage session = sessionData[sessionKey][msg.sender];
- maxValidAfter = session.validAfter;
- for (i = 0; i < calls.length; i++) {
- Call calldata call = calls[i];
- Permission calldata permission = _permissions[i];
- require(
- permission.target == address(0) || call.to == permission.target, "SessionKeyValidator: target mismatch"
- );
- require(uint256(bytes32(call.value)) <= permission.valueLimit, "SessionKeyValidator: value limit exceeded");
- require(verifyPermission(call.data, permission), "SessionKeyValidator: permission verification failed");
- ValidAfter validAfter =
- _updateValidAfter(permission, keccak256(abi.encodePacked(session.nonce, permission.index)));
- if (ValidAfter.unwrap(validAfter) > ValidAfter.unwrap(maxValidAfter)) {
- maxValidAfter = validAfter;
- }
- if (!MerkleProofLib.verify(_merkleProof[i], session.merkleRoot, keccak256(abi.encode(permission)))) {
- return (maxValidAfter, true);
- }
- }
- }
-
- function _verifyParam(
- address sessionKey,
- bytes calldata callData,
- Permission calldata _permission,
- bytes32[] calldata _merkleProof
- ) internal returns (ValidAfter validAfter, bool verifyFailed) {
- SessionData storage session = sessionData[sessionKey][msg.sender];
- bool isExecute = bytes4(callData[0:4]) == Kernel.execute.selector;
- require(
- _permission.target == address(0) || address(bytes20(callData[16:36])) == _permission.target,
- "SessionKeyValidator: target mismatch"
- );
- if (isExecute) {
- require(
- uint256(bytes32(callData[36:68])) <= _permission.valueLimit, "SessionKeyValidator: value limit exceeded"
- );
- } else {
- require(_permission.operation == Operation.DelegateCall, "SessionKeyValidator: operation mismatch");
- }
- bytes calldata data;
- uint8 dataParamOffset = isExecute ? 0x44 : 0x24;
- assembly {
- let dataOffset := add(add(callData.offset, 0x04), calldataload(add(callData.offset, dataParamOffset)))
- let length := calldataload(dataOffset)
- data.offset := add(dataOffset, 32)
- data.length := length
- }
- require(verifyPermission(data, _permission), "SessionKeyValidator: permission verification failed");
- validAfter = _updateValidAfter(_permission, keccak256(abi.encodePacked(session.nonce, _permission.index)));
- if (ValidAfter.unwrap(validAfter) < ValidAfter.unwrap(session.validAfter)) {
- validAfter = session.validAfter;
- }
- if (!MerkleProofLib.verify(_merkleProof, session.merkleRoot, keccak256(abi.encode(_permission)))) {
- return (validAfter, true);
- }
- }
-
- function verifyPermission(bytes calldata data, Permission calldata permission) internal pure returns (bool) {
- if (bytes4(data[0:4]) != permission.sig) return false;
- for (uint256 i = 0; i < permission.rules.length; i++) {
- ParamRule calldata rule = permission.rules[i];
- bytes32 param = bytes32(data[4 + rule.offset:4 + rule.offset + 32]);
- if (rule.condition == ParamCondition.EQUAL && param != rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.GREATER_THAN && param <= rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.LESS_THAN && param >= rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.GREATER_THAN_OR_EQUAL && param < rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.LESS_THAN_OR_EQUAL && param > rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.NOT_EQUAL && param == rule.param) {
- return false;
- }
- }
- return true;
- }
-
- function validCaller(address, bytes calldata) external view returns (bool) {
- revert NotImplemented();
- }
-
- function validateSignature(bytes32, bytes calldata) external pure returns (ValidationData) {
- revert NotImplemented();
- }
-}
diff --git a/src/validator/WeightedECDSAValidator.sol b/src/validator/WeightedECDSAValidator.sol
index 47921c7c..5189d31d 100644
--- a/src/validator/WeightedECDSAValidator.sol
+++ b/src/validator/WeightedECDSAValidator.sol
@@ -1,11 +1,19 @@
+// SPDX-License-Identifier: MIT
+
pragma solidity ^0.8.0;
-import "src/common/Types.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
+import "src/types/Types.sol";
import {ECDSA} from "solady/utils/ECDSA.sol";
import {EIP712} from "solady/utils/EIP712.sol";
-import {IKernelValidator} from "src/interfaces/IKernelValidator.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
+import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol";
+import {IValidator} from "../interfaces/IERC7579Modules.sol";
+import {
+ ERC1271_MAGICVALUE,
+ ERC1271_INVALID,
+ SIG_VALIDATION_FAILED_UINT,
+ MODULE_TYPE_VALIDATOR,
+ MODULE_TYPE_HOOK
+} from "../types/Constants.sol";
struct WeightedECDSAValidatorStorage {
uint24 totalWeight;
@@ -40,7 +48,7 @@ struct VoteStorage {
VoteStatus status;
}
-contract WeightedECDSAValidator is EIP712, IKernelValidator {
+contract WeightedECDSAValidator is EIP712, IValidator {
mapping(address kernel => WeightedECDSAValidatorStorage) public weightedStorage;
mapping(address guardian => mapping(address kernel => GuardianStorage)) public guardian;
mapping(bytes32 callDataAndNonceHash => mapping(address kernel => ProposalStorage)) public proposalStatus;
@@ -51,45 +59,34 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
event GuardianRemoved(address indexed guardian, address indexed kernel);
function _domainNameAndVersion() internal pure override returns (string memory, string memory) {
- return ("WeightedECDSAValidator", "0.0.3");
+ return ("WeightedECDSAValidator", "0.0.2");
}
- function _addGuardians(address[] memory _guardians, uint24[] memory _weights, address _kernel) internal {
- uint24 totalWeight = weightedStorage[_kernel].totalWeight;
+ function onInstall(bytes calldata _data) external payable override {
+ (address[] memory _guardians, uint24[] memory _weights, uint24 _threshold, uint48 _delay) =
+ abi.decode(_data, (address[], uint24[], uint24, uint48));
require(_guardians.length == _weights.length, "Length mismatch");
- uint160 prevGuardian = uint160(weightedStorage[_kernel].firstGuardian);
+ if (_isInitialized(msg.sender)) revert AlreadyInitialized(msg.sender);
+ weightedStorage[msg.sender].firstGuardian = msg.sender;
for (uint256 i = 0; i < _guardians.length; i++) {
- require(_guardians[i] != _kernel, "Guardian cannot be self");
+ require(_guardians[i] != msg.sender, "Guardian cannot be self");
require(_guardians[i] != address(0), "Guardian cannot be 0");
require(_weights[i] != 0, "Weight cannot be 0");
- require(guardian[_guardians[i]][_kernel].weight == 0, "Guardian already enabled");
- require(uint160(_guardians[i]) < prevGuardian, "Guardians not sorted");
- guardian[_guardians[i]][_kernel] =
- GuardianStorage({weight: _weights[i], nextGuardian: weightedStorage[_kernel].firstGuardian});
- weightedStorage[_kernel].firstGuardian = _guardians[i];
- totalWeight += _weights[i];
- prevGuardian = uint160(_guardians[i]);
- emit GuardianAdded(_guardians[i], _kernel, _weights[i]);
+ require(guardian[_guardians[i]][msg.sender].weight == 0, "Guardian already enabled");
+ guardian[_guardians[i]][msg.sender] =
+ GuardianStorage({weight: _weights[i], nextGuardian: weightedStorage[msg.sender].firstGuardian});
+ weightedStorage[msg.sender].firstGuardian = _guardians[i];
+ weightedStorage[msg.sender].totalWeight += _weights[i];
+ emit GuardianAdded(_guardians[i], msg.sender, _weights[i]);
}
- weightedStorage[_kernel].totalWeight = totalWeight;
- }
-
- function enable(bytes calldata _data) external payable override {
- (address[] memory _guardians, uint24[] memory _weights, uint24 _threshold, uint48 _delay) =
- abi.decode(_data, (address[], uint24[], uint24, uint48));
- require(_guardians.length == _weights.length, "Length mismatch");
- require(weightedStorage[msg.sender].totalWeight == 0, "Already enabled");
- weightedStorage[msg.sender].firstGuardian = address(uint160(type(uint160).max));
- _addGuardians(_guardians, _weights, msg.sender);
weightedStorage[msg.sender].delay = _delay;
weightedStorage[msg.sender].threshold = _threshold;
- require(_threshold <= weightedStorage[msg.sender].totalWeight, "Threshold too high");
}
- function disable(bytes calldata) external payable override {
- require(weightedStorage[msg.sender].totalWeight != 0, "Not enabled");
+ function onUninstall(bytes calldata) external payable override {
+ if (!_isInitialized(msg.sender)) revert NotInitialized(msg.sender);
address currentGuardian = weightedStorage[msg.sender].firstGuardian;
- while (currentGuardian != address(uint160(type(uint160).max))) {
+ while (currentGuardian != msg.sender) {
address nextGuardian = guardian[currentGuardian][msg.sender].nextGuardian;
emit GuardianRemoved(currentGuardian, msg.sender);
delete guardian[currentGuardian][msg.sender];
@@ -98,11 +95,23 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
delete weightedStorage[msg.sender];
}
+ function isModuleType(uint256 moduleTypeId) external pure returns (bool) {
+ return moduleTypeId == MODULE_TYPE_VALIDATOR;
+ }
+
+ function isInitialized(address smartAccount) external view returns (bool) {
+ return _isInitialized(smartAccount);
+ }
+
+ function _isInitialized(address smartAccount) internal view returns (bool) {
+ return weightedStorage[smartAccount].totalWeight != 0;
+ }
+
function renew(address[] calldata _guardians, uint24[] calldata _weights, uint24 _threshold, uint48 _delay)
external
payable
{
- require(weightedStorage[msg.sender].totalWeight != 0, "Not enabled");
+ if (!_isInitialized(msg.sender)) revert NotInitialized(msg.sender);
address currentGuardian = weightedStorage[msg.sender].firstGuardian;
while (currentGuardian != msg.sender) {
address nextGuardian = guardian[currentGuardian][msg.sender].nextGuardian;
@@ -112,13 +121,23 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
}
delete weightedStorage[msg.sender];
require(_guardians.length == _weights.length, "Length mismatch");
- weightedStorage[msg.sender].firstGuardian = _guardians[0];
- _addGuardians(_guardians, _weights, msg.sender);
+ weightedStorage[msg.sender].firstGuardian = msg.sender;
+ for (uint256 i = 0; i < _guardians.length; i++) {
+ require(_guardians[i] != msg.sender, "Guardian cannot be self");
+ require(_guardians[i] != address(0), "Guardian cannot be 0");
+ require(_weights[i] != 0, "Weight cannot be 0");
+ require(guardian[_guardians[i]][msg.sender].weight == 0, "Guardian already enabled");
+ guardian[_guardians[i]][msg.sender] =
+ GuardianStorage({weight: _weights[i], nextGuardian: weightedStorage[msg.sender].firstGuardian});
+ weightedStorage[msg.sender].firstGuardian = _guardians[i];
+ weightedStorage[msg.sender].totalWeight += _weights[i];
+ emit GuardianAdded(_guardians[i], msg.sender, _weights[i]);
+ }
weightedStorage[msg.sender].delay = _delay;
weightedStorage[msg.sender].threshold = _threshold;
}
- function approve(bytes32 _callDataAndNonceHash, address _kernel) external {
+ function approve(bytes32 _callDataAndNonceHash, address _kernel) external payable {
require(guardian[msg.sender][_kernel].weight != 0, "Guardian not enabled");
require(weightedStorage[_kernel].threshold != 0, "Kernel not enabled");
ProposalStorage storage proposal = proposalStatus[_callDataAndNonceHash][_kernel];
@@ -133,7 +152,7 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
}
}
- function approveWithSig(bytes32 _callDataAndNonceHash, address _kernel, bytes calldata sigs) external {
+ function approveWithSig(bytes32 _callDataAndNonceHash, address _kernel, bytes calldata sigs) external payable {
uint256 sigCount = sigs.length / 65;
require(weightedStorage[_kernel].threshold != 0, "Kernel not enabled");
ProposalStorage storage proposal = proposalStatus[_callDataAndNonceHash][_kernel];
@@ -157,7 +176,7 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
}
}
- function veto(bytes32 _callDataAndNonceHash) external {
+ function veto(bytes32 _callDataAndNonceHash) external payable {
ProposalStorage storage proposal = proposalStatus[_callDataAndNonceHash][msg.sender];
require(
proposal.status == ProposalStatus.Ongoing || proposal.status == ProposalStatus.Approved,
@@ -166,23 +185,24 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
proposal.status = ProposalStatus.Rejected;
}
- function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256)
+ function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash)
external
payable
- returns (ValidationData validationData)
+ override
+ returns (uint256)
{
bytes32 callDataAndNonceHash = keccak256(abi.encode(userOp.sender, userOp.callData, userOp.nonce));
ProposalStorage storage proposal = proposalStatus[callDataAndNonceHash][msg.sender];
WeightedECDSAValidatorStorage storage strg = weightedStorage[msg.sender];
if (strg.threshold == 0) {
- return SIG_VALIDATION_FAILED;
+ return SIG_VALIDATION_FAILED_UINT;
}
(uint256 totalWeight, bool passed) = getApproval(msg.sender, callDataAndNonceHash);
uint256 threshold = strg.threshold;
if (proposal.status == ProposalStatus.Ongoing && !passed) {
if (strg.delay != 0) {
// if delay > 0, only allow proposal to be approved before execution
- return SIG_VALIDATION_FAILED;
+ return SIG_VALIDATION_FAILED_UINT;
}
bytes calldata sig = userOp.signature;
// parse sig with 65 bytes
@@ -222,18 +242,13 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
return packValidationData(ValidAfter.wrap(0), ValidUntil.wrap(0));
}
} else if (proposal.status == ProposalStatus.Approved || passed) {
- if (userOp.paymasterAndData.length == 0 || address(bytes20(userOp.paymasterAndData[0:20])) == address(0)) {
- address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), userOp.signature);
- if (guardian[signer][msg.sender].weight != 0) {
- proposal.status = ProposalStatus.Executed;
- return packValidationData(proposal.validAfter, ValidUntil.wrap(0));
- }
- } else {
+ address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), userOp.signature);
+ if (guardian[signer][msg.sender].weight != 0) {
proposal.status = ProposalStatus.Executed;
return packValidationData(proposal.validAfter, ValidUntil.wrap(0));
}
}
- return SIG_VALIDATION_FAILED;
+ return SIG_VALIDATION_FAILED_UINT;
}
function getApproval(address kernel, bytes32 hash) public view returns (uint256 approvals, bool passed) {
@@ -247,36 +262,33 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator {
approvals += guardian[currentGuardian][kernel].weight;
}
}
- passed = approvals >= strg.threshold;
- }
-
- function validCaller(address, bytes calldata) external view override returns (bool) {
- return false;
+ ProposalStorage storage proposal = proposalStatus[hash][kernel];
+ if (proposal.status == ProposalStatus.Rejected) {
+ passed = false;
+ } else {
+ passed = approvals >= strg.threshold;
+ }
}
- function validateSignature(bytes32 hash, bytes calldata signature) external view returns (ValidationData) {
+ function isValidSignatureWithSender(address, bytes32 hash, bytes calldata data) external view returns (bytes4) {
WeightedECDSAValidatorStorage storage strg = weightedStorage[msg.sender];
if (strg.threshold == 0) {
- return SIG_VALIDATION_FAILED;
+ return ERC1271_INVALID;
}
- uint256 sigCount = signature.length / 65;
+ uint256 sigCount = data.length / 65;
if (sigCount == 0) {
- return SIG_VALIDATION_FAILED;
+ return ERC1271_INVALID;
}
uint256 totalWeight = 0;
- address prevSigner = address(uint160(type(uint160).max));
+ address signer;
for (uint256 i = 0; i < sigCount; i++) {
- address signer = ECDSA.recover(hash, signature[i * 65:(i + 1) * 65]);
+ signer = ECDSA.recover(hash, data[i * 65:(i + 1) * 65]);
totalWeight += guardian[signer][msg.sender].weight;
if (totalWeight >= strg.threshold) {
- return packValidationData(ValidAfter.wrap(0), ValidUntil.wrap(0));
- }
- if (signer >= prevSigner) {
- return SIG_VALIDATION_FAILED;
+ return ERC1271_MAGICVALUE;
}
- prevSigner = signer;
}
- return SIG_VALIDATION_FAILED;
+ return ERC1271_INVALID;
}
}
diff --git a/src/validator/modularPermission/IPolicy.sol b/src/validator/modularPermission/IPolicy.sol
deleted file mode 100644
index a57b8148..00000000
--- a/src/validator/modularPermission/IPolicy.sol
+++ /dev/null
@@ -1,23 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-
-interface IPolicy {
- function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) external payable;
- function checkUserOpPolicy(
- address kernel,
- bytes32 permissionId,
- UserOperation calldata userOp,
- bytes calldata proofAndSig
- ) external payable returns (ValidationData);
- function validateSignature(
- address kernel,
- address caller,
- bytes32 permissionId,
- bytes32 messageHash,
- bytes32 rawHash,
- bytes calldata signature
- ) external view returns (ValidationData);
-}
diff --git a/src/validator/modularPermission/ISigner.sol b/src/validator/modularPermission/ISigner.sol
deleted file mode 100644
index 885cc8ed..00000000
--- a/src/validator/modularPermission/ISigner.sol
+++ /dev/null
@@ -1,17 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {ValidationData} from "src/common/Types.sol";
-import {ValidAfter, ValidUntil, packValidationData} from "src/common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
-
-interface ISigner {
- function registerSigner(address kernel, bytes32 permissionId, bytes calldata signerData) external payable;
- function validateUserOp(address kernel, bytes32 permissionId, bytes32 userOpHash, bytes calldata signature)
- external
- payable
- returns (ValidationData);
- function validateSignature(address kernel, bytes32 permissionId, bytes32 messageHash, bytes calldata signature)
- external
- view
- returns (ValidationData);
-}
diff --git a/src/validator/modularPermission/ModularPermissionValidator.sol b/src/validator/modularPermission/ModularPermissionValidator.sol
deleted file mode 100644
index 68008b93..00000000
--- a/src/validator/modularPermission/ModularPermissionValidator.sol
+++ /dev/null
@@ -1,280 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ValidationData, ValidAfter, ValidUntil} from "src/common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
-import {IKernelValidator} from "src/interfaces/IKernelValidator.sol";
-import {ISigner} from "./ISigner.sol";
-import {IPolicy} from "./IPolicy.sol";
-import {_intersectValidationData} from "src/utils/KernelHelper.sol";
-import {PolicyConfig, PolicyConfigLib, toFlag, MAX_FLAG} from "./PolicyConfig.sol";
-import "forge-std/console.sol";
-
-struct Permission {
- uint128 nonce;
- bytes12 flag; // flag represents what permission can do
- ISigner signer;
- PolicyConfig firstPolicy;
- ValidAfter validAfter;
- ValidUntil validUntil;
-}
-
-struct Nonce {
- uint128 lastNonce;
- uint128 revoked;
-}
-
-/// @title ModularPermissionValidator
-/// @notice Validator that allows to register and revoke permissions
-/// @dev modular architecture to allow composable permission system
-contract ModularPermissionValidator is IKernelValidator {
- mapping(address => bytes32) public priorityPermission;
- mapping(bytes32 permissionId => mapping(address kernel => Permission)) public permissions;
- mapping(bytes32 permissionId => mapping(PolicyConfig policy => mapping(address kernel => PolicyConfig))) public
- nextPolicy;
- mapping(address kernel => Nonce) public nonces;
-
- event PermissionRegistered(address kernel, bytes32 permissionId);
- event PermissionRevoked(address kernel, bytes32 permissionId);
- event NonceRevoked(address kernel, uint256 nonce);
-
- function getPermissionId(
- bytes12 flag,
- ISigner signer,
- ValidAfter validAfter,
- ValidUntil validUntil,
- PolicyConfig[] calldata _policyConfig,
- bytes calldata signerData,
- bytes[] calldata policyData
- ) public pure returns (bytes32) {
- return keccak256(
- abi.encode(
- flag,
- signer,
- ValidAfter.unwrap(validAfter),
- ValidUntil.unwrap(validUntil),
- _policyConfig,
- signerData,
- policyData
- )
- );
- }
-
- function parseData(bytes calldata data)
- public
- pure
- returns (
- uint128 nonce,
- bytes12 flag,
- ISigner signer,
- ValidAfter validAfter,
- ValidUntil validUntil,
- PolicyConfig[] calldata policies,
- bytes calldata signerData,
- bytes[] calldata policyData
- )
- {
- nonce = uint128(bytes16(data[0:16]));
- flag = bytes12(data[16:28]);
- validAfter = ValidAfter.wrap(uint48(bytes6(data[28:34])));
- validUntil = ValidUntil.wrap(uint48(bytes6(data[34:40])));
- signer = ISigner(address(bytes20(data[40:60])));
- assembly {
- let offset := add(data.offset, 60)
- policies.offset := add(add(offset, 32), calldataload(offset))
- policies.length := calldataload(sub(policies.offset, 32))
- signerData.offset := add(add(offset, 32), calldataload(add(offset, 32)))
- signerData.length := calldataload(sub(signerData.offset, 32))
- policyData.offset := add(add(offset, 32), calldataload(add(offset, 64)))
- policyData.length := calldataload(sub(policyData.offset, 32))
- }
- }
-
- function enable(bytes calldata data) external payable {
- (
- uint128 nonce,
- bytes12 flag,
- ISigner signer,
- ValidAfter validAfter,
- ValidUntil validUntil,
- PolicyConfig[] calldata policies,
- bytes calldata signerData,
- bytes[] calldata policyData
- ) = parseData(data);
- registerPermission(nonce, flag, signer, validAfter, validUntil, policies, signerData, policyData);
- }
-
- function registerPermission(
- uint128 nonce,
- bytes12 flag,
- ISigner signer,
- ValidAfter validAfter,
- ValidUntil validUntil,
- PolicyConfig[] calldata policy,
- bytes calldata signerData,
- bytes[] calldata policyData
- ) public payable {
- require(flag != toFlag(0), "flag should not be empty");
- require(
- nonce == nonces[msg.sender].lastNonce || nonce == nonces[msg.sender].lastNonce + 1, "nonce should be next"
- );
- nonces[msg.sender].lastNonce++;
- bytes32 permissionId = getPermissionId(flag, signer, validAfter, validUntil, policy, signerData, policyData);
- if (flag == MAX_FLAG) {
- priorityPermission[msg.sender] = permissionId;
- }
-
- bytes12 maxFlag = flag;
- for (uint256 i = 0; i < policy.length; i++) {
- //TODO make sure address of the policy is sorted
- PolicyConfigLib.getAddress(policy[i]).registerPolicy(msg.sender, permissionId, policyData[i]);
- // NOTE: flag for policy is inverted version of flag for permission;
- bytes12 currentFlag = PolicyConfigLib.getFlags(policy[i]);
- // turn off flags that are used,
- // meaning that remaining maxFlag will indicate the permissions that are not used on this permission
- maxFlag = currentFlag & maxFlag;
- }
- signer.registerSigner(msg.sender, permissionId, signerData);
-
- PolicyConfig firstPolicy = policy[0]; // NOTE : policy should not be empty array
- require(maxFlag == bytes12(0), "error : permission flag exceeds policy flag");
- permissions[permissionId][msg.sender] = Permission(nonce, flag, signer, firstPolicy, validAfter, validUntil);
- for (uint256 i = 1; i < policy.length; i++) {
- nextPolicy[permissionId][policy[i - 1]][msg.sender] = policy[i];
- }
- emit PermissionRegistered(msg.sender, permissionId);
- }
-
- function disable(bytes calldata data) external payable {
- if (data.length == 32) {
- revokePermission(bytes32(data));
- } else {
- revokePermission(uint128(bytes16(data)));
- }
- }
-
- function revokePermission(bytes32 permissionId) public payable {
- permissions[permissionId][msg.sender].flag = toFlag(0); // NOTE: making flag == 0 makes it invalid
- emit PermissionRevoked(msg.sender, permissionId);
- }
-
- function revokePermission(uint128 nonce) public payable {
- nonces[msg.sender].revoked = nonce;
- emit NonceRevoked(msg.sender, nonce);
- }
-
- function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256)
- external
- payable
- returns (ValidationData validationData)
- {
- require(_userOp.sender == msg.sender, "sender must be msg.sender");
- bytes32 permissionId = bytes32(_userOp.signature[0:32]);
- if (
- permissions[permissionId][msg.sender].flag & toFlag(1) == toFlag(0)
- || nonces[msg.sender].revoked > permissions[permissionId][msg.sender].nonce
- ) {
- return SIG_VALIDATION_FAILED;
- }
- Permission memory permission = permissions[permissionId][msg.sender];
- PolicyConfig policy = permission.firstPolicy;
- uint256 cursor = 32;
- while (address(PolicyConfigLib.getAddress(policy)) != address(0)) {
- if (PolicyConfigLib.skipOnValidateUserOp(policy)) {
- policy = nextPolicy[permissionId][policy][msg.sender];
- continue;
- }
- bytes calldata policyData;
- if (
- _userOp.signature.length >= cursor + 52
- && address(bytes20(_userOp.signature[cursor:cursor + 20]))
- == address(PolicyConfigLib.getAddress(policy))
- ) {
- // only when policy address is same as the one in signature
- uint256 length = uint256(bytes32(_userOp.signature[cursor + 20:cursor + 52]));
- require(_userOp.signature.length >= cursor + 52 + length, "policyData length exceeds signature length");
- policyData = _userOp.signature[cursor + 52:cursor + 52 + length]; // [policyAddress, policyDataLength, policyData]
- cursor += 52 + length;
- } else {
- policyData = _userOp.signature[cursor:cursor];
- }
- ValidationData policyValidation =
- PolicyConfigLib.getAddress(policy).checkUserOpPolicy(msg.sender, permissionId, _userOp, policyData);
- validationData = _intersectValidationData(validationData, policyValidation);
- policy = nextPolicy[permissionId][policy][msg.sender];
- }
- ValidationData signatureValidation =
- permission.signer.validateUserOp(msg.sender, permissionId, _userOpHash, _userOp.signature[cursor:]);
- validationData = _intersectValidationData(validationData, signatureValidation);
- }
-
- function validCaller(address caller, bytes calldata data) external view override returns (bool) {
- revert("not implemented");
- }
-
- struct ValidationSigMemory {
- address caller;
- bytes32 permissionId;
- bytes32 rawHash;
- uint256 cursor;
- PolicyConfig policy;
- }
-
- function validateSignature(bytes32 hash, bytes calldata signature)
- external
- view
- override
- returns (ValidationData validationData)
- {
- ValidationSigMemory memory sigMemory;
- sigMemory.permissionId = bytes32(signature[0:32]);
- if (
- nonces[msg.sender].revoked > permissions[sigMemory.permissionId][msg.sender].nonce
- || permissions[sigMemory.permissionId][msg.sender].flag & toFlag(2) == toFlag(0)
- ) {
- return SIG_VALIDATION_FAILED;
- }
- Permission memory permission = permissions[sigMemory.permissionId][msg.sender];
- // signature should be packed with
- // (permissionId, [proof || signature])
- // (permissionId, [ (policyAddress) + (policyProof) || signature]
- bytes calldata proofAndSignature; //) = abi.decode(signature[32:], (bytes, bytes));
- assembly {
- proofAndSignature.offset := add(signature.offset, 32)
- proofAndSignature.length := sub(signature.length, 32)
- }
-
- sigMemory.cursor = 0;
- sigMemory.policy = permission.firstPolicy;
- sigMemory.caller = address(bytes20(msg.data[msg.data.length - 20:]));
- sigMemory.rawHash = bytes32(msg.data[msg.data.length - 52:msg.data.length - 20]);
- while (address(PolicyConfigLib.getAddress(sigMemory.policy)) != address(0)) {
- if (PolicyConfigLib.skipOnValidateSignature(sigMemory.policy)) {
- sigMemory.policy = nextPolicy[sigMemory.permissionId][sigMemory.policy][msg.sender];
- continue;
- }
- bytes calldata policyData;
- if (
- address(bytes20(proofAndSignature[sigMemory.cursor:sigMemory.cursor + 20]))
- == address(PolicyConfigLib.getAddress(sigMemory.policy))
- ) {
- // only when policy address is same as the one in signature
- uint256 length = uint256(bytes32(proofAndSignature[sigMemory.cursor + 20:sigMemory.cursor + 52]));
- policyData = proofAndSignature[sigMemory.cursor + 52:]; // [policyAddress, policyDataLength, policyData]
- sigMemory.cursor += 52 + length;
- } else {
- policyData = proofAndSignature[sigMemory.cursor:sigMemory.cursor];
- // not move cursor here
- }
- ValidationData policyValidation = PolicyConfigLib.getAddress(sigMemory.policy).validateSignature(
- msg.sender, sigMemory.caller, sigMemory.permissionId, hash, sigMemory.rawHash, policyData
- );
- validationData = _intersectValidationData(validationData, policyValidation);
- sigMemory.policy = nextPolicy[sigMemory.permissionId][sigMemory.policy][msg.sender];
- }
- ValidationData signatureValidation = permission.signer.validateSignature(
- msg.sender, sigMemory.permissionId, hash, proofAndSignature[sigMemory.cursor:]
- );
- validationData = _intersectValidationData(validationData, signatureValidation);
- }
-}
diff --git a/src/validator/modularPermission/PolicyConfig.sol b/src/validator/modularPermission/PolicyConfig.sol
deleted file mode 100644
index 9ac1da26..00000000
--- a/src/validator/modularPermission/PolicyConfig.sol
+++ /dev/null
@@ -1,67 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "./IPolicy.sol";
-
-type PolicyConfig is bytes32;
-
-function toFlag(uint256 x) pure returns (bytes12) {
- return bytes12(bytes32(x << 160));
-}
-
-function toPermissionFlag(uint256 x) pure returns (bytes12) {
- bytes12 ret = bytes12(bytes32(x << 160));
- assembly {
- ret := not(ret)
- }
- return ret;
-}
-
-bytes12 constant MAX_FLAG = 0xffffffffffffffffffffffff;
-// PolicyData is a 32 bytes array that contains the address of the policy
-// [flags(12 bytes), address(20 bytes)]
-// flags is 96 bits that contains the following information
-// from last to first bit
-// 1 bit : not for validatUserOp
-// 1 bit : not for validateSignature
-// 1 bit : not for validateCaller
-
-library PolicyConfigLib {
- function pack(IPolicy addr, bytes12 flag) internal pure returns (PolicyConfig data) {
- assembly {
- data := or(addr, flag)
- }
- }
-
- function getAddress(PolicyConfig data) internal pure returns (IPolicy policy) {
- assembly {
- policy := and(data, 0xffffffffffffffffffffffffffffffffffffffff)
- }
- }
-
- function getFlags(PolicyConfig data) internal pure returns (bytes12 flags) {
- assembly {
- flags := shr(160, data)
- }
- }
-
- function skipOnValidateUserOp(PolicyConfig data) internal pure returns (bool result) {
- assembly {
- let flags := shr(160, data)
- result := and(flags, 0x1)
- }
- }
-
- function skipOnValidateSignature(PolicyConfig data) internal pure returns (bool result) {
- assembly {
- let flags := shr(161, data)
- result := and(flags, 0x1)
- }
- }
-
- function skipOnValidateCaller(PolicyConfig data) internal pure returns (bool result) {
- assembly {
- let flags := shr(162, data)
- result := and(flags, 0x1)
- }
- }
-}
diff --git a/src/validator/modularPermission/mock/MockPolicy.sol b/src/validator/modularPermission/mock/MockPolicy.sol
deleted file mode 100644
index 7b3384f2..00000000
--- a/src/validator/modularPermission/mock/MockPolicy.sol
+++ /dev/null
@@ -1,49 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
-import {IPolicy} from "../IPolicy.sol";
-
-contract MockPolicy is IPolicy {
- ValidationData public validationData;
- mapping(bytes32 => uint256) public count;
- bytes public policyData;
- bool public revertOnSignature;
-
- function mock(uint48 validAfter, uint48 validUntil, bool success, bool revertOnSig) external {
- validationData = success
- ? packValidationData(ValidAfter.wrap(validAfter), ValidUntil.wrap(validUntil))
- : SIG_VALIDATION_FAILED;
- revertOnSignature = revertOnSig;
- }
-
- function registerPolicy(address, bytes32, bytes calldata data) external payable override {
- // do nothing
- policyData = data;
- }
-
- function checkUserOpPolicy(address, bytes32 permissionId, UserOperation calldata, bytes calldata)
- external
- payable
- override
- returns (ValidationData)
- {
- count[permissionId]++;
- return validationData;
- }
-
- function validateSignature(
- address kernel,
- address caller,
- bytes32 permissionId,
- bytes32 messageHash,
- bytes32 rawHash,
- bytes calldata signature
- ) external view override returns (ValidationData) {
- if (revertOnSignature) {
- revert("MockPolicy: signature validation failed");
- }
- return validationData;
- }
-}
diff --git a/src/validator/modularPermission/mock/MockRequestor.sol b/src/validator/modularPermission/mock/MockRequestor.sol
deleted file mode 100644
index d6b4872a..00000000
--- a/src/validator/modularPermission/mock/MockRequestor.sol
+++ /dev/null
@@ -1,11 +0,0 @@
-pragma solidity ^0.8.0;
-
-interface KernelERC1271 {
- function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4);
-}
-
-contract MockRequestor {
- function verifySignature(address kernel, bytes32 hash, bytes calldata signature) external payable returns (bool) {
- return KernelERC1271(kernel).isValidSignature(hash, signature) == 0x1626ba7e;
- }
-}
diff --git a/src/validator/modularPermission/mock/MockSigner.sol b/src/validator/modularPermission/mock/MockSigner.sol
deleted file mode 100644
index f323b8c2..00000000
--- a/src/validator/modularPermission/mock/MockSigner.sol
+++ /dev/null
@@ -1,42 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
-import {ISigner} from "../ISigner.sol";
-
-contract MockSigner is ISigner {
- ValidationData public validationData;
- mapping(bytes32 => uint256) public count;
- bytes public signerData;
-
- function mock(uint48 validAfter, uint48 validUntil, bool success) external {
- validationData = success
- ? packValidationData(ValidAfter.wrap(validAfter), ValidUntil.wrap(validUntil))
- : SIG_VALIDATION_FAILED;
- }
-
- function registerSigner(address, bytes32, bytes calldata data) external payable override {
- // do nothing
- signerData = data;
- }
-
- function validateUserOp(address, bytes32 permissionId, bytes32, bytes calldata)
- external
- payable
- override
- returns (ValidationData)
- {
- count[permissionId]++;
- return validationData;
- }
-
- function validateSignature(address, bytes32, bytes32, bytes calldata)
- external
- view
- override
- returns (ValidationData)
- {
- return validationData;
- }
-}
diff --git a/src/validator/modularPermission/policies/EIP712Policy.sol b/src/validator/modularPermission/policies/EIP712Policy.sol
deleted file mode 100644
index f23836ed..00000000
--- a/src/validator/modularPermission/policies/EIP712Policy.sol
+++ /dev/null
@@ -1,131 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "../IPolicy.sol";
-
-// does not support nested parameters,
-// only allow checking,
-// 1. domain separator
-// 2. typeHash
-// 3. encodeData => only allows 32 bytes of parameter in encodeData, if you are dealing with dynamic value, you need to pass in the keccak256 hash of the value
-struct EncodeDataRule {
- uint32 index;
- bytes32 value;
- ParamRule rule;
-}
-
-struct AllowedEIP712Params {
- bytes32 domainSeparator;
- bytes32 typeHash;
- EncodeDataRule encodeDataRule;
-}
-
-enum ParamRule {
- NA,
- Equal,
- NotEqual,
- GreaterThan,
- GreaterThanOrEqual,
- LessThan,
- LessThanOrEqual
-}
-
-contract EIP712Policy is IPolicy {
- mapping(
- bytes32 permissionId => mapping(address permissionValidator => mapping(address kernel => AllowedEIP712Params))
- ) public eip712Param;
- mapping(
- bytes32 permissionId
- => mapping(
- address permissionValidator => mapping(bytes32 encodeData => mapping(address kernel => EncodeDataRule))
- )
- ) public nextEncodeData;
-
- function registerPolicy(address _kernel, bytes32 _permissionId, bytes calldata _data) external payable override {
- bytes32 domainSeparator = bytes32(_data[0:32]);
- bytes32 typeHash = bytes32(_data[32:64]);
- uint32 index = uint32(bytes4(_data[64:68]));
- ParamRule rule = ParamRule(uint8(bytes1(_data[68])));
- bytes32 encodeData = bytes32(_data[69:101]);
- uint256 cursor = 101;
- EncodeDataRule memory encodeDataRule = EncodeDataRule(index, encodeData, rule);
- eip712Param[_permissionId][msg.sender][_kernel] = AllowedEIP712Params(domainSeparator, typeHash, encodeDataRule);
- while (cursor <= _data.length - 37) {
- index = uint32(bytes4(_data[cursor:cursor + 4]));
- rule = ParamRule(uint8(bytes1(_data[cursor + 4])));
- bytes32 nextEncodeParam = bytes32(_data[cursor + 5:cursor + 37]);
- nextEncodeData[_permissionId][msg.sender][encodeData][_kernel] =
- EncodeDataRule(index, nextEncodeParam, rule);
- cursor += 37;
- }
- }
-
- function checkUserOpPolicy(
- address _kernel,
- bytes32 _permissionId,
- UserOperation calldata _userOp,
- bytes calldata _policyProof
- ) external payable override returns (ValidationData) {
- // do nothing on userOp validation
- return ValidationData.wrap(0);
- }
-
- function validateSignature(
- address _kernel,
- address _caller,
- bytes32 _permissionId,
- bytes32 _messageHash,
- bytes32 _rawHash,
- bytes calldata _signature
- ) external view override returns (ValidationData) {
- AllowedEIP712Params memory allowedEIP712Params = eip712Param[_permissionId][msg.sender][_kernel];
- bytes32[] memory encodedData = new bytes32[](uint32(bytes4(_signature[64:68])));
- uint256 cursor = 68;
- for (uint32 i = 0; i < encodedData.length; i++) {
- encodedData[i] = bytes32(_signature[cursor:cursor + 32]);
- cursor += 32;
- }
- {
- bytes32 domainSeparator = bytes32(_signature[0:32]);
- bytes32 typeHash = bytes32(_signature[32:64]);
- if (
- allowedEIP712Params.domainSeparator | domainSeparator != domainSeparator
- || allowedEIP712Params.typeHash | typeHash != typeHash
- ) {
- return SIG_VALIDATION_FAILED;
- }
- bytes32 structHash = keccak256(abi.encodePacked(typeHash, encodedData));
- bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
- require(digest == _rawHash, "digest != _rawHash");
- }
- EncodeDataRule memory encodeDataRule = allowedEIP712Params.encodeDataRule;
- while (encodeDataRule.rule != ParamRule.NA) {
- if (encodeDataRule.rule == ParamRule.Equal) {
- if (encodedData[encodeDataRule.index] != encodeDataRule.value) {
- return SIG_VALIDATION_FAILED;
- }
- } else if (encodeDataRule.rule == ParamRule.NotEqual) {
- if (encodedData[encodeDataRule.index] == encodeDataRule.value) {
- return SIG_VALIDATION_FAILED;
- }
- } else if (encodeDataRule.rule == ParamRule.GreaterThan) {
- if (encodedData[encodeDataRule.index] <= encodeDataRule.value) {
- return SIG_VALIDATION_FAILED;
- }
- } else if (encodeDataRule.rule == ParamRule.GreaterThanOrEqual) {
- if (encodedData[encodeDataRule.index] < encodeDataRule.value) {
- return SIG_VALIDATION_FAILED;
- }
- } else if (encodeDataRule.rule == ParamRule.LessThan) {
- if (encodedData[encodeDataRule.index] >= encodeDataRule.value) {
- return SIG_VALIDATION_FAILED;
- }
- } else if (encodeDataRule.rule == ParamRule.LessThanOrEqual) {
- if (encodedData[encodeDataRule.index] > encodeDataRule.value) {
- return SIG_VALIDATION_FAILED;
- }
- }
- encodeDataRule = nextEncodeData[_permissionId][_caller][encodeDataRule.value][_kernel];
- }
- return ValidationData.wrap(0);
- }
-}
diff --git a/src/validator/modularPermission/policies/ExecutePolicy.sol b/src/validator/modularPermission/policies/ExecutePolicy.sol
deleted file mode 100644
index 4ca7f917..00000000
--- a/src/validator/modularPermission/policies/ExecutePolicy.sol
+++ /dev/null
@@ -1,50 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "../IPolicy.sol";
-
-struct ExecutionConfig {
- uint48 interval;
- uint48 count;
- ValidAfter startAt;
-}
-
-contract ExecutePolicy is IPolicy {
- mapping(address permissionValidator => mapping(bytes32 permissionId => mapping(address kernel => ExecutionConfig)))
- public executionConfigs;
-
- function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData)
- external
- payable
- override
- {
- uint48 delay = uint48(bytes6(policyData[0:6]));
- uint48 count = uint48(bytes6(policyData[6:12]));
- uint48 startAt = uint48(bytes6(policyData[12:18]));
- executionConfigs[msg.sender][permissionId][kernel] = ExecutionConfig(delay, count, ValidAfter.wrap(startAt));
- }
-
- function checkUserOpPolicy(address kernel, bytes32 permissionId, UserOperation calldata, bytes calldata)
- external
- payable
- override
- returns (ValidationData)
- {
- ExecutionConfig memory config = executionConfigs[msg.sender][permissionId][kernel];
- if (config.count == 0) {
- return SIG_VALIDATION_FAILED;
- }
- executionConfigs[msg.sender][permissionId][kernel].count = config.count - 1;
- executionConfigs[msg.sender][permissionId][kernel].startAt =
- ValidAfter.wrap(ValidAfter.unwrap(config.startAt) + config.interval);
- return packValidationData(config.startAt, ValidUntil.wrap(0));
- }
-
- function validateSignature(address, address, bytes32, bytes32, bytes32, bytes calldata)
- external
- view
- override
- returns (ValidationData)
- {
- return ValidationData.wrap(0);
- }
-}
diff --git a/src/validator/modularPermission/policies/GasPolicy.sol b/src/validator/modularPermission/policies/GasPolicy.sol
deleted file mode 100644
index 8d0cbeaa..00000000
--- a/src/validator/modularPermission/policies/GasPolicy.sol
+++ /dev/null
@@ -1,58 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol";
-import {IPolicy} from "../IPolicy.sol";
-
-contract GasPolicy is IPolicy {
- struct GasPolicyConfig {
- uint128 allowed;
- bool enforcePaymaster;
- address allowedPaymaster;
- }
-
- mapping(address permissionValidator => mapping(bytes32 permissionId => mapping(address kernel => GasPolicyConfig)))
- public gasPolicyConfig;
-
- function registerPolicy(address kernel, bytes32 permissionId, bytes calldata data) external payable override {
- (uint128 allowed, bool enforcePaymaster, address allowedPaymaster) = abi.decode(data, (uint128, bool, address));
- gasPolicyConfig[msg.sender][permissionId][kernel] = GasPolicyConfig(allowed, enforcePaymaster, allowedPaymaster);
- }
-
- function checkUserOpPolicy(address kernel, bytes32 permissionId, UserOperation calldata userOp, bytes calldata)
- external
- payable
- override
- returns (ValidationData)
- {
- uint128 maxAmount = uint128(
- (userOp.preVerificationGas + userOp.verificationGasLimit + userOp.callGasLimit) * userOp.maxFeePerGas
- );
- if (gasPolicyConfig[msg.sender][permissionId][kernel].enforcePaymaster) {
- if (
- gasPolicyConfig[msg.sender][permissionId][kernel].allowedPaymaster != address(0)
- && address(bytes20(userOp.paymasterAndData[0:20]))
- != gasPolicyConfig[msg.sender][permissionId][kernel].allowedPaymaster
- ) {
- return SIG_VALIDATION_FAILED;
- }
- }
- if (maxAmount > gasPolicyConfig[msg.sender][permissionId][kernel].allowed) {
- return SIG_VALIDATION_FAILED;
- }
- gasPolicyConfig[msg.sender][permissionId][kernel].allowed -= maxAmount;
- return ValidationData.wrap(0);
- }
-
- function validateSignature(
- address kernel,
- address caller,
- bytes32 permissionId,
- bytes32 messageHash,
- bytes32 rawHash,
- bytes calldata signature
- ) external view override returns (ValidationData) {
- return ValidationData.wrap(0);
- }
-}
diff --git a/src/validator/modularPermission/policies/MerklePolicy.sol b/src/validator/modularPermission/policies/MerklePolicy.sol
deleted file mode 100644
index 796714a6..00000000
--- a/src/validator/modularPermission/policies/MerklePolicy.sol
+++ /dev/null
@@ -1,180 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "../IPolicy.sol";
-import {Kernel} from "../../../Kernel.sol";
-import {ParamCondition, Operation} from "../../../common/Enums.sol";
-import {Call} from "../../../common/Structs.sol";
-import {MerkleProofLib} from "solady/utils/MerkleProofLib.sol";
-
-struct Permission {
- address target;
- bytes4 sig;
- uint256 valueLimit;
- ParamRule[] rules;
- Operation operation;
-}
-
-struct ParamRule {
- uint256 offset;
- ParamCondition condition;
- bytes32 param;
-}
-
-contract MerklePolicy is IPolicy {
- error MerklePolicyError(uint256 code); // todo: should policy revert instead of returning SIG_VALIDATION_FAILED?
-
- mapping(address permissionValidator => mapping(bytes32 => mapping(address => bytes32))) public merkleRoot;
-
- function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) external payable {
- bytes32 root = bytes32(policyData[0:32]);
- merkleRoot[msg.sender][permissionId][kernel] = root;
- }
-
- function checkUserOpPolicy(
- address kernel,
- bytes32 permissionId,
- UserOperation calldata userOp,
- bytes calldata proof
- ) external payable returns (ValidationData) {
- bytes calldata callData = userOp.callData;
- bytes32 root = merkleRoot[msg.sender][permissionId][kernel];
- bytes4 sig = bytes4(callData[0:4]);
- if (sig == Kernel.execute.selector || sig == Kernel.executeDelegateCall.selector) {
- (Permission calldata permission, bytes32[] calldata merkleProof) = _getPermission(proof);
- bool verifyFailed = _verifyParam(root, callData, permission, merkleProof);
- if (verifyFailed) {
- revert MerklePolicyError(1); // merkle proof verification failed
- }
- return ValidationData.wrap(0);
- } else if (sig == Kernel.executeBatch.selector) {
- Permission[] calldata permissions = _getPermissions(proof);
- bytes32[][] calldata merkleProof = _getProofs(proof);
- bool verifyFailed = _verifyParams(root, callData, permissions, merkleProof);
- if (verifyFailed) {
- revert MerklePolicyError(1); // merkle proof verification failed
- }
- return ValidationData.wrap(0);
- } else {
- revert MerklePolicyError(0); // unknown selector
- }
- }
-
- function _verifyParams(
- bytes32 root,
- bytes calldata callData,
- Permission[] calldata _permissions,
- bytes32[][] calldata _merkleProof
- ) internal pure returns (bool verifyFailed) {
- Call[] calldata calls;
- assembly {
- calls.offset := add(add(callData.offset, 0x24), calldataload(add(callData.offset, 4)))
- calls.length := calldataload(add(add(callData.offset, 4), calldataload(add(callData.offset, 4))))
- }
- uint256 i = 0;
- for (i = 0; i < calls.length; i++) {
- Call calldata call = calls[i];
- Permission calldata permission = _permissions[i];
- require(
- permission.target == address(0) || call.to == permission.target, "SessionKeyValidator: target mismatch"
- );
- require(uint256(bytes32(call.value)) <= permission.valueLimit, "SessionKeyValidator: value limit exceeded");
- require(verifyPermission(call.data, permission), "SessionKeyValidator: permission verification failed");
- if (!MerkleProofLib.verify(_merkleProof[i], root, keccak256(abi.encode(permission)))) {
- return true;
- }
- }
- }
-
- // to parse batch execute permissions
- function _getPermissions(bytes calldata _sig) internal pure returns (Permission[] calldata permissions) {
- assembly {
- permissions.offset := add(add(_sig.offset, 0x20), calldataload(_sig.offset))
- permissions.length := calldataload(add(_sig.offset, calldataload(_sig.offset)))
- }
- }
-
- function _getProofs(bytes calldata _sig) internal pure returns (bytes32[][] calldata proofs) {
- assembly {
- proofs.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20))))
- proofs.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20)))
- }
- }
-
- // to parse single execute permission
- function _getPermission(bytes calldata _sig)
- internal
- pure
- returns (Permission calldata permission, bytes32[] calldata merkleProof)
- {
- assembly {
- permission := add(_sig.offset, calldataload(_sig.offset))
- merkleProof.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20))))
- merkleProof.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20)))
- }
- }
-
- function _verifyParam(
- bytes32 root,
- bytes calldata callData,
- Permission calldata _permission,
- bytes32[] calldata _merkleProof
- ) internal pure returns (bool verifyFailed) {
- bool isExecute = bytes4(callData[0:4]) == Kernel.execute.selector;
- require(
- _permission.target == address(0) || address(bytes20(callData[16:36])) == _permission.target,
- "SessionKeyValidator: target mismatch"
- );
- if (isExecute) {
- require(
- uint256(bytes32(callData[36:68])) <= _permission.valueLimit, "SessionKeyValidator: value limit exceeded"
- );
- } else {
- require(_permission.operation == Operation.DelegateCall, "SessionKeyValidator: operation mismatch");
- }
- bytes calldata data;
- uint8 dataParamOffset = isExecute ? 0x44 : 0x24;
- assembly {
- let dataOffset := add(add(callData.offset, 0x04), calldataload(add(callData.offset, dataParamOffset)))
- let length := calldataload(dataOffset)
- data.offset := add(dataOffset, 32)
- data.length := length
- }
- require(verifyPermission(data, _permission), "SessionKeyValidator: permission verification failed");
- if (!MerkleProofLib.verify(_merkleProof, root, keccak256(abi.encode(_permission)))) {
- return true;
- }
- }
-
- function verifyPermission(bytes calldata data, Permission calldata permission) internal pure returns (bool) {
- if (bytes4(data[0:4]) != permission.sig) return false;
- for (uint256 i = 0; i < permission.rules.length; i++) {
- ParamRule calldata rule = permission.rules[i];
- bytes32 param = bytes32(data[4 + rule.offset:4 + rule.offset + 32]);
- if (rule.condition == ParamCondition.EQUAL && param != rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.GREATER_THAN && param <= rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.LESS_THAN && param >= rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.GREATER_THAN_OR_EQUAL && param < rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.LESS_THAN_OR_EQUAL && param > rule.param) {
- return false;
- } else if (rule.condition == ParamCondition.NOT_EQUAL && param == rule.param) {
- return false;
- }
- }
- return true;
- }
-
- function validateSignature(
- address kernel,
- address caller,
- bytes32 permissionId,
- bytes32 messageHash,
- bytes32 rawHash,
- bytes calldata signature
- ) external view returns (ValidationData) {
- return ValidationData.wrap(0);
- }
-}
diff --git a/src/validator/modularPermission/policies/SignaturePolicy.sol b/src/validator/modularPermission/policies/SignaturePolicy.sol
deleted file mode 100644
index c4f1b16c..00000000
--- a/src/validator/modularPermission/policies/SignaturePolicy.sol
+++ /dev/null
@@ -1,45 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "../IPolicy.sol";
-
-contract SignaturePolicy is IPolicy {
- mapping(
- address permissionValidator
- => mapping(bytes32 permissionId => mapping(address requestor => mapping(address kernel => bool)))
- ) public allowedRequestor;
-
- function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) external payable {
- address[] memory callers = abi.decode(policyData, (address[]));
- for (uint256 i = 0; i < callers.length; i++) {
- if (callers[i] == address(0)) {
- allowedRequestor[msg.sender][permissionId][kernel][kernel] = true;
- } else {
- allowedRequestor[msg.sender][permissionId][callers[i]][kernel] = true;
- }
- }
- }
-
- function checkUserOpPolicy(
- address kernel,
- bytes32 permissionId,
- UserOperation calldata userOp,
- bytes calldata policyProof
- ) external payable override returns (ValidationData) {
- // do nothing on userOp validation
- return ValidationData.wrap(0);
- }
-
- function validateSignature(
- address kernel,
- address caller,
- bytes32 permissionId,
- bytes32 messageHash,
- bytes32 rawHash,
- bytes calldata signature
- ) external view override returns (ValidationData) {
- if (allowedRequestor[msg.sender][permissionId][caller][kernel]) {
- return ValidationData.wrap(0);
- }
- return SIG_VALIDATION_FAILED;
- }
-}
diff --git a/src/validator/modularPermission/policies/SudoPolicy.sol b/src/validator/modularPermission/policies/SudoPolicy.sol
deleted file mode 100644
index f3125de6..00000000
--- a/src/validator/modularPermission/policies/SudoPolicy.sol
+++ /dev/null
@@ -1,29 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ValidationData} from "src/common/Types.sol";
-import {IPolicy} from "../IPolicy.sol";
-
-contract SudoPolicy is IPolicy {
- function registerPolicy(address kernel, bytes32 permissionId, bytes calldata data) external payable override {}
-
- function checkUserOpPolicy(address kernel, bytes32 permissionId, UserOperation calldata userOp, bytes calldata)
- external
- payable
- override
- returns (ValidationData)
- {
- return ValidationData.wrap(0);
- }
-
- function validateSignature(
- address kernel,
- address caller,
- bytes32 permissionId,
- bytes32 messageHash,
- bytes32 rawHash,
- bytes calldata signature
- ) external view override returns (ValidationData) {
- return ValidationData.wrap(0);
- }
-}
diff --git a/src/validator/modularPermission/signers/ECDSASigner.sol b/src/validator/modularPermission/signers/ECDSASigner.sol
deleted file mode 100644
index f617b9d8..00000000
--- a/src/validator/modularPermission/signers/ECDSASigner.sol
+++ /dev/null
@@ -1,52 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {ISigner} from "../ISigner.sol";
-import {ValidationData} from "../../../common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "../../../common/Constants.sol";
-
-contract ECDSASigner is ISigner {
- using ECDSA for bytes32;
-
- mapping(address caller => mapping(bytes32 permissionId => mapping(address kernel => address))) public signer;
-
- function registerSigner(address kernel, bytes32 permissionId, bytes calldata data) external payable override {
- require(signer[msg.sender][permissionId][kernel] == address(0), "ECDSASigner: kernel already registered");
- require(data.length == 20, "ECDSASigner: invalid signer address");
- address signerAddress = address(bytes20(data[0:20]));
- signer[msg.sender][permissionId][kernel] = signerAddress;
- }
-
- function validateUserOp(address kernel, bytes32 permissionId, bytes32 userOpHash, bytes calldata signature)
- external
- payable
- override
- returns (ValidationData)
- {
- require(signer[msg.sender][permissionId][kernel] != address(0), "ECDSASigner: kernel not registered");
- address recovered = ECDSA.toEthSignedMessageHash(userOpHash).recover(signature);
- if (recovered == signer[msg.sender][permissionId][kernel]) {
- return ValidationData.wrap(0);
- }
- return SIG_VALIDATION_FAILED;
- }
-
- function validateSignature(address kernel, bytes32 permissionId, bytes32 messageHash, bytes calldata signature)
- external
- view
- override
- returns (ValidationData)
- {
- address signerAddress = signer[msg.sender][permissionId][kernel];
- require(signerAddress != address(0), "ECDSASigner: kernel not registered");
- if (messageHash.recover(signature) == signerAddress) {
- return ValidationData.wrap(0);
- }
- bytes32 ethHash = ECDSA.toEthSignedMessageHash(messageHash);
- address recovered = ethHash.recover(signature);
- if (recovered == signerAddress) {
- return ValidationData.wrap(0);
- }
- return SIG_VALIDATION_FAILED;
- }
-}
diff --git a/src/validator/modularPermission/signers/WebAuthnSigner.sol b/src/validator/modularPermission/signers/WebAuthnSigner.sol
deleted file mode 100644
index 011088fe..00000000
--- a/src/validator/modularPermission/signers/WebAuthnSigner.sol
+++ /dev/null
@@ -1,82 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {WebAuthn} from "p256-verifier/WebAuthn.sol";
-import {ISigner} from "../ISigner.sol";
-import {ValidationData} from "../../../common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "../../../common/Constants.sol";
-
-struct WebAuthnValidatorData {
- uint256 x;
- uint256 y;
-}
-
-contract WebAuthnSigner is ISigner {
- mapping(address caller => mapping(bytes32 permissionId => mapping(address kernel => WebAuthnValidatorData))) public
- webAuthnValidatorStorage;
-
- function registerSigner(address kernel, bytes32 permissionId, bytes calldata data) external payable override {
- WebAuthnValidatorData memory pubKey = abi.decode(data, (WebAuthnValidatorData));
- require(
- webAuthnValidatorStorage[msg.sender][permissionId][kernel].x == 0
- && webAuthnValidatorStorage[msg.sender][permissionId][kernel].y == 0,
- "WebAuthnSigner: kernel already registered"
- );
- require(pubKey.x != 0 && pubKey.y != 0, "WebAuthnSigner: invalid public key");
- webAuthnValidatorStorage[msg.sender][permissionId][kernel] = pubKey;
- }
-
- function validateUserOp(address kernel, bytes32 permissionId, bytes32 userOpHash, bytes calldata signature)
- external
- payable
- override
- returns (ValidationData)
- {
- return _verifySignature(kernel, permissionId, userOpHash, signature);
- }
-
- function validateSignature(address kernel, bytes32 permissionId, bytes32 messageHash, bytes calldata signature)
- external
- view
- override
- returns (ValidationData)
- {
- return _verifySignature(kernel, permissionId, messageHash, signature);
- }
-
- function _verifySignature(address sender, bytes32 permissionId, bytes32 hash, bytes calldata signature)
- private
- view
- returns (ValidationData)
- {
- (
- bytes memory authenticatorData,
- string memory clientDataJSON,
- uint256 challengeLocation,
- uint256 responseTypeLocation,
- uint256 r,
- uint256 s
- ) = abi.decode(signature, (bytes, string, uint256, uint256, uint256, uint256));
-
- WebAuthnValidatorData memory pubKey = webAuthnValidatorStorage[msg.sender][permissionId][sender];
- require(pubKey.x != 0 && pubKey.y != 0, "WebAuthnSigner: kernel not registered");
-
- bool isValid = WebAuthn.verifySignature(
- abi.encodePacked(hash),
- authenticatorData,
- true, // TODO: check if this needs to be true always
- clientDataJSON,
- challengeLocation,
- responseTypeLocation,
- r,
- s,
- pubKey.x,
- pubKey.y
- );
-
- if (isValid) {
- return ValidationData.wrap(0);
- }
-
- return SIG_VALIDATION_FAILED;
- }
-}
diff --git a/src/validator/webauthn/WebAuthnFclValidator.sol b/src/validator/webauthn/WebAuthnFclValidator.sol
deleted file mode 100644
index fbbc41ed..00000000
--- a/src/validator/webauthn/WebAuthnFclValidator.sol
+++ /dev/null
@@ -1,143 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {UserOperation} from "I4337/interfaces/UserOperation.sol";
-import {ECDSA} from "solady/utils/ECDSA.sol";
-import {IKernelValidator} from "../../interfaces/IKernelValidator.sol";
-import {ValidationData} from "../../common/Types.sol";
-import {SIG_VALIDATION_FAILED} from "../../common/Constants.sol";
-import {WebAuthnFclVerifier} from "./WebAuthnFclVerifier.sol";
-
-/// @dev Storage layout for a kernel in the WebAuthnValidator contract.
-struct WebAuthnFclValidatorStorage {
- /// @dev The `x` coord of the secp256r1 public key used to sign the user operation.
- uint256 x;
- /// @dev The `y` coord of the secp256r1 public key used to sign the user operation.
- uint256 y;
-}
-
-/// @author @KONFeature
-/// @title WebAuthnFclValidator
-/// @notice Kernel validator used to validated user operations via WebAuthn signature (using P256 under the hood)
-/// @notice Using the awesome FreshCryptoLib: https://github.com/rdubois-crypto/FreshCryptoLib/
-/// @notice Inspired by the cometh Gnosis Safe signer: https://github.com/cometh-game/p256-signer
-contract WebAuthnFclValidator is IKernelValidator {
- /// @dev Event emitted when the public key signing the WebAuthN user operation is changed for a given `kernel`.
- event WebAuthnPublicKeyChanged(address indexed kernel, uint256 x, uint256 y);
-
- /// @dev Mapping of kernel address to each webAuthn specific storage
- mapping(address kernel => WebAuthnFclValidatorStorage webAuthnStorage) private webAuthnValidatorStorage;
-
- /// @dev The address of the on-chain p256 verifier contract (will be used if the user want that instead of the pre-compiled one, that way this validator can work on every chain out of the box while rip7212 is slowly being implemented everywhere)
- address private immutable P256_VERIFIER;
-
- /// @dev Simple constructor, setting the P256 verifier address
- constructor(address _p256Verifier) {
- P256_VERIFIER = _p256Verifier;
- }
-
- /// @dev Disable this validator for a given `kernel` (msg.sender)
- function disable(bytes calldata) external payable override {
- delete webAuthnValidatorStorage[msg.sender];
- }
-
- /// @dev Enable this validator for a given `kernel` (msg.sender)
- function enable(bytes calldata _data) external payable override {
- // Extract the x & y coordinates of the public key from the `_data` bytes
- (uint256 x, uint256 y) = abi.decode(_data, (uint256, uint256));
- // Update the pub key data
- WebAuthnFclValidatorStorage storage kernelValidatorStorage = webAuthnValidatorStorage[msg.sender];
- kernelValidatorStorage.x = x;
- kernelValidatorStorage.y = y;
- // Emit the update event
- emit WebAuthnPublicKeyChanged(msg.sender, x, y);
- }
-
- /// @dev Validate a `_userOp` using a WebAuthn Signature for the kernel account who is the `_userOp` sender
- function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256)
- external
- payable
- override
- returns (ValidationData validationData)
- {
- WebAuthnFclValidatorStorage memory kernelValidatorStorage = webAuthnValidatorStorage[_userOp.sender];
-
- // Perform a check against the direct userOpHash, if ok consider the user op as validated
- if (_checkSignature(kernelValidatorStorage, _userOpHash, _userOp.signature)) {
- return ValidationData.wrap(0);
- }
-
- return SIG_VALIDATION_FAILED;
- }
-
- /// @dev Validate a `_signature` of the `_hash` ofor the given `kernel` (msg.sender)
- function validateSignature(bytes32 _hash, bytes calldata _signature)
- public
- view
- override
- returns (ValidationData)
- {
- WebAuthnFclValidatorStorage memory kernelValidatorStorage = webAuthnValidatorStorage[msg.sender];
-
- // Check the validity againt the hash directly
- if (_checkSignature(kernelValidatorStorage, _hash, _signature)) {
- return ValidationData.wrap(0);
- }
-
- // Otherwise, all good
- return SIG_VALIDATION_FAILED;
- }
-
- /// @notice Validates the given `_signature` againt the `_hash` for the given `kernel` (msg.sender)
- /// @param _kernelValidatorStorage The kernel storage replication (helping us to fetch the X & Y points of the public key)
- /// @param _hash The hash signed
- /// @param _signature The signature
- function _checkSignature(
- WebAuthnFclValidatorStorage memory _kernelValidatorStorage,
- bytes32 _hash,
- bytes calldata _signature
- ) private view returns (bool isValid) {
- // Extract the first byte of the signature to check
- return WebAuthnFclVerifier._verifyWebAuthNSignature(
- P256_VERIFIER, _hash, _signature, _kernelValidatorStorage.x, _kernelValidatorStorage.y
- );
- }
-
- /// @dev Check if the caller is a valid signer, this don't apply to the WebAuthN validator, since it's using a public key
- function validCaller(address, bytes calldata) external pure override returns (bool) {
- revert NotImplemented();
- }
-
- /* -------------------------------------------------------------------------- */
- /* Public view methods */
- /* -------------------------------------------------------------------------- */
-
- /// @dev Get the owner of a given `kernel`
- function getPublicKey(address _kernel) public view returns (uint256 x, uint256 y) {
- // Compute the storage slot
- WebAuthnFclValidatorStorage storage kernelValidatorStorage = webAuthnValidatorStorage[_kernel];
-
- // Access it for x and y
- x = kernelValidatorStorage.x;
- y = kernelValidatorStorage.y;
- }
-
- /// @dev Check if the pre-compiled p256 verifier is available on this chain
- function isPreCompiledP256Available() public view returns (bool) {
- // Test signature data, from https://gist.github.com/ulerdogan/8f1714895e23a54147fc529ea30517eb
- bytes memory testSignatureData =
- hex"4cee90eb86eaa050036147a12d49004b6b9c72bd725d39d4785011fe190f0b4da73bd4903f0ce3b639bbbf6e8e80d16931ff4bcf5993d58468e8fb19086e8cac36dbcd03009df8c59286b162af3bd7fcc0450c9aa81be5d10d312af6c66b1d604aebd3099c618202fcfe16ae7770b0c49ab5eadf74b754204a3bb6060e44eff37618b065f9832de4ca6ca971a7a1adc826d0f7c00181a5fb2ddf79ae00b4e10e";
-
- // Perform the static call
- (bool success, bytes memory data) = WebAuthnFclVerifier.PRECOMPILED_P256_VERIFIER.staticcall(testSignatureData);
- if (!success || data.length == 0) {
- return false;
- }
-
- // Decode the result
- uint256 result = abi.decode(data, (uint256));
-
- // Check it's 1 (valid signature)
- return result == uint256(1);
- }
-}
diff --git a/src/validator/webauthn/WebAuthnFclVerifier.sol b/src/validator/webauthn/WebAuthnFclVerifier.sol
deleted file mode 100644
index 02d9aaf1..00000000
--- a/src/validator/webauthn/WebAuthnFclVerifier.sol
+++ /dev/null
@@ -1,152 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {Base64} from "solady/utils/Base64.sol";
-
-/// @title WebAuthnFclVerifier
-/// @author rdubois-crypto
-/// @author obatirou
-/// @author KONFeature
-/// @notice A library used to format webauthn stuff into verifiable p256 messages msg
-/// From https://github.com/cometh-hq/p256-signer/blob/09319213276da69aad6d96fa75cd339726f78bb9/contracts/P256Signer.sol
-/// And https://github.com/rdubois-crypto/FreshCryptoLib/blob/master/solidity/src/FCL_Webauthn.sol
-library WebAuthnFclVerifier {
- /// @dev Error thrown when the webauthn data is invalid
- error InvalidWebAuthNData();
-
- /// @dev 'bytes4(keccak256("InvalidWebAuthNData()"))'
- uint256 private constant _INVALID_WEBAUTHN_DATA_SELECTOR = 0x81177746;
-
- /// @dev the data flag mask we will use to verify the signature
- /// @dev Always 0x01 for user presence flag -> https://www.w3.org/TR/webauthn-2/#concept-user-present
- bytes1 private constant AUTHENTICATOR_DATA_FLAG_MASK = 0x01;
-
- /// @dev The address of the pre-compiled p256 verifier contract (following RIP-7212)
- address internal constant PRECOMPILED_P256_VERIFIER = address(0x100);
-
- /// @dev layout of a signature (used to extract the reauired payload from the initial calldata)
- struct FclSignatureLayout {
- bool useOnChainP256Verifier;
- bytes authenticatorData;
- bytes clientData;
- uint256 challengeOffset;
- uint256[2] rs;
- }
-
- /// @dev Format the webauthn challenge into a p256 message
- /// @dev return the raw message that has been signed by the user on the p256 curve
- /// @dev Logic from https://github.com/rdubois-crypto/FreshCryptoLib/blob/master/solidity/src/FCL_Webauthn.sol
- /// @param _hash The hash that has been signed via WebAuthN
- /// @param _signature The signature that has been provided with the userOp
- /// @return p256Message The message that has been signed on the p256 curve
- function _formatWebAuthNChallenge(bytes32 _hash, FclSignatureLayout calldata _signature)
- internal
- pure
- returns (bytes32 p256Message)
- {
- // Extract a few calldata pointer we will use to format / verify our msg
- bytes calldata authenticatorData = _signature.authenticatorData;
- bytes calldata clientData = _signature.clientData;
- uint256 challengeOffset = _signature.challengeOffset;
-
- // If the challenge offset is uint256 max, it's mean that we are in the case of a dummy sig, so we can skip the check and just return the hash
- if (challengeOffset == type(uint256).max) {
- return _hash;
- }
-
- // Otherwise, perform the complete format and checks of the data
- {
- // Let the caller check if User Presence (0x01) or User Verification (0x04) are set
- if ((authenticatorData[32] & AUTHENTICATOR_DATA_FLAG_MASK) != AUTHENTICATOR_DATA_FLAG_MASK) {
- revert InvalidWebAuthNData();
- }
- // Verify that clientData commits to the expected client challenge
- // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification
- bytes memory challengeEncoded = bytes(Base64.encode(abi.encodePacked(_hash), true, true));
-
- // The part that will old the challenge extracted from the clientData
- bytes memory challengeExtracted = new bytes(challengeEncoded.length);
-
- assembly {
- // Extract the challenge from the clientData
- calldatacopy(
- add(challengeExtracted, 32), add(clientData.offset, challengeOffset), mload(challengeExtracted)
- )
-
- // Check that the challenge extracted from the clientData is the same as the one provided in the userOp
- if iszero(
- eq(
- // Hash of the challenge exracted from the `clientData`
- keccak256(add(challengeExtracted, 32), mload(challengeExtracted)),
- // Hash of the provided challenge, encoded in Base64Url (to match the clientData encoding)
- keccak256(add(challengeEncoded, 32), mload(challengeEncoded))
- )
- ) {
- mstore(0x00, _INVALID_WEBAUTHN_DATA_SELECTOR)
- revert(0x1c, 0x04)
- }
- }
- }
-
- // Verify the signature over sha256(authenticatorData || sha256(clientData))
- bytes memory verifyData = new bytes(authenticatorData.length + 32);
-
- assembly {
- // Add the authenticator data at the start of the verifyData
- calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length)
- }
-
- bytes32 clientDataHashed = sha256(clientData);
- assembly {
- // Add the client data hash at the end of the verifyData
- mstore(add(verifyData, add(authenticatorData.length, 32)), clientDataHashed)
- }
-
- // Return the sha256 of the verifyData
- return sha256(verifyData);
- }
-
- /// @dev Proceed to the full webauth verification
- /// @param _p256Verifier The p256 verifier contract on-chain (if user want to use this instead of the precompiled one)
- /// @param _hash The hash that has been signed via WebAuthN
- /// @param _signature The signature that has been provided with the userOp
- /// @param _x The X point of the public key
- /// @param _y The Y point of the public key
- /// @return isValid True if the signature is valid, false otherwise
- function _verifyWebAuthNSignature(
- address _p256Verifier,
- bytes32 _hash,
- bytes calldata _signature,
- uint256 _x,
- uint256 _y
- ) internal view returns (bool isValid) {
- // Extract the signature
- FclSignatureLayout calldata signature;
- // This code should precalculate the offsets of variables as defined in the layout
- // From: https://twitter.com/k06a/status/1706934230779883656
- assembly {
- signature := _signature.offset
- }
-
- // If the signature is using the on-chain p256 verifier, we will use it
- if (!signature.useOnChainP256Verifier) {
- _p256Verifier = PRECOMPILED_P256_VERIFIER;
- }
-
- // Format the webauthn challenge into a p256 message
- bytes32 challenge = _formatWebAuthNChallenge(_hash, signature);
-
- // Prepare the argument we will use to verify the signature
- bytes memory args = abi.encode(challenge, signature.rs[0], signature.rs[1], _x, _y);
-
- // Send the call the the p256 verifier
- (bool success, bytes memory ret) = _p256Verifier.staticcall(args);
- // If empty ret, return false
- if (success == false || ret.length == 0) {
- return false;
- }
-
- // Ensure that it has returned 1
- return abi.decode(ret, (uint256)) == 1;
- }
-}
diff --git a/test/ECDSAValidator.t.sol b/test/ECDSAValidator.t.sol
new file mode 100644
index 00000000..18e9ea20
--- /dev/null
+++ b/test/ECDSAValidator.t.sol
@@ -0,0 +1,118 @@
+pragma solidity ^0.8.0;
+
+import {MockCallee, KernelTestBase} from "src/sdk/testBase/KernelTestBase.sol";
+import {ECDSAValidator} from "src/validator/ECDSAValidator.sol";
+import {ECDSA} from "solady/utils/ECDSA.sol";
+import {PackedUserOperation} from "src/interfaces/PackedUserOperation.sol";
+import {ValidatorLib} from "src/utils/ValidationTypeLib.sol";
+import {ExecLib} from "src/utils/ExecLib.sol";
+import {IHook} from "src/interfaces/IERC7579Modules.sol";
+import {ValidatorLib, ValidationId, ValidationMode, ValidationType} from "src/utils/ValidationTypeLib.sol";
+import {VALIDATION_MODE_ENABLE, VALIDATION_TYPE_VALIDATOR} from "src/types/Constants.sol";
+
+import "forge-std/console.sol";
+
+contract ECDSAValidatorTest is KernelTestBase {
+ ECDSAValidator ecdsaValidator;
+ address owner;
+ uint256 ownerKey;
+
+ function _setRootValidationConfig() internal override {
+ (owner, ownerKey) = makeAddrAndKey("Owner");
+ ecdsaValidator = new ECDSAValidator();
+ rootValidation = ValidatorLib.validatorToIdentifier(ecdsaValidator);
+ rootValidationConfig =
+ RootValidationConfig({hook: IHook(address(0)), hookData: hex"", validatorData: abi.encodePacked(owner)});
+ }
+
+ function _rootSignDigest(bytes32 digest, bool success) internal view override returns (bytes memory data) {
+ unchecked {
+ if (!success) {
+ digest = bytes32(uint256(digest) - 1);
+ }
+ }
+ (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, ECDSA.toEthSignedMessageHash(digest));
+ bytes memory sig = abi.encodePacked(r, s, v);
+ return sig;
+ }
+
+ function _rootSignUserOp(PackedUserOperation memory op, bool success)
+ internal
+ view
+ override
+ returns (bytes memory)
+ {
+ bytes32 hash = entrypoint.getUserOpHash(op);
+ return _rootSignDigest(hash, success);
+ }
+
+ function testExternalInteraction() external whenInitialized {
+ vm.startPrank(owner);
+ kernel.execute(
+ ExecLib.encodeSimpleSingle(),
+ ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(MockCallee.setValue.selector, 123))
+ );
+ vm.stopPrank();
+ }
+
+ function testEnableMalicious() external whenInitialized {
+ vm.startPrank(owner);
+ vm.deal(address(kernel), 1e18);
+ kernel.invalidateNonce(2);
+ vm.stopPrank();
+ (address hacker, uint256 hackerKey) = makeAddrAndKey("Hacker");
+ ownerKey = hackerKey;
+ enabledValidator = ecdsaValidator;
+ validationConfig.validatorData = abi.encodePacked(hacker);
+ PackedUserOperation[] memory ops = new PackedUserOperation[](1);
+ ops[0] = _prepareMaliciousEnableUserOp(
+ encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123))
+ );
+ vm.expectRevert();
+ entrypoint.handleOps(ops, payable(address(0xdeadbeef)));
+ }
+
+ function _prepareMaliciousEnableUserOp(bytes memory callData) internal returns (PackedUserOperation memory op) {
+ uint192 encodedAsNonceKey = ValidatorLib.encodeAsNonceKey(
+ ValidationMode.unwrap(VALIDATION_MODE_ENABLE),
+ ValidationType.unwrap(VALIDATION_TYPE_VALIDATOR),
+ bytes20(address(enabledValidator)),
+ 0 // parallel key
+ );
+ op = PackedUserOperation({
+ sender: address(kernel),
+ nonce: entrypoint.getNonce(address(kernel), encodedAsNonceKey),
+ initCode: hex"",
+ callData: callData,
+ accountGasLimits: bytes32(abi.encodePacked(uint128(2000000), uint128(2000000))),
+ preVerificationGas: 1000000,
+ gasFees: bytes32(abi.encodePacked(uint128(1), uint128(1))),
+ paymasterAndData: hex"",
+ signature: hex""
+ });
+ bytes32 hash = keccak256(
+ abi.encode(
+ keccak256(
+ "Enable(bytes21 validationId,uint32 nonce,address hook,bytes validatorData,bytes hookData,bytes selectorData)"
+ ),
+ ValidationId.unwrap(ValidatorLib.validatorToIdentifier(enabledValidator)),
+ uint256(kernel.currentNonce()),
+ validationConfig.hook,
+ keccak256(validationConfig.validatorData),
+ keccak256(abi.encodePacked(bytes1(0xff), validationConfig.hookData)),
+ keccak256(abi.encodePacked(kernel.execute.selector))
+ )
+ );
+ bytes32 digest = keccak256(
+ abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), hash)
+ );
+ op.signature = encodeEnableSignature(
+ validationConfig.hook,
+ validationConfig.validatorData,
+ abi.encodePacked(bytes1(0xff), validationConfig.hookData),
+ abi.encodePacked(kernel.execute.selector),
+ _rootSignDigest(digest, true),
+ _rootSignUserOp(op, true)
+ );
+ }
+}
diff --git a/test/Kernel.t.sol b/test/Kernel.t.sol
new file mode 100644
index 00000000..c755368d
--- /dev/null
+++ b/test/Kernel.t.sol
@@ -0,0 +1,5 @@
+pragma solidity ^0.8.0;
+
+import {KernelTestBase} from "src/sdk/testBase/KernelTestBase.sol";
+
+contract KernelTest is KernelTestBase {}
diff --git a/test/Permission.t.sol b/test/Permission.t.sol
new file mode 100644
index 00000000..d5bee435
--- /dev/null
+++ b/test/Permission.t.sol
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import "src/core/ValidationManager.sol";
+import "forge-std/Test.sol";
+
+contract MockValidatorLib {
+ function encodeFlag(bool skipUserOp, bool skipSignature) external pure returns (PassFlag flag) {
+ return ValidatorLib.encodeFlag(skipUserOp, skipSignature);
+ }
+
+ function encodeAsNonce(
+ bytes1 mode,
+ bytes1 vType,
+ bytes20 validatorIdentifierWithoutType,
+ uint16 nonceKey,
+ uint64 nonce
+ ) external pure returns (uint256 res) {
+ return ValidatorLib.encodeAsNonce(mode, vType, validatorIdentifierWithoutType, nonceKey, nonce);
+ }
+
+ function encodeAsNonceKey(bytes1 mode, bytes1 vType, bytes20 validatorIdentifierWithoutType, uint16 nonceKey)
+ external
+ pure
+ returns (uint192 res)
+ {
+ return ValidatorLib.encodeAsNonceKey(mode, vType, validatorIdentifierWithoutType, nonceKey);
+ }
+
+ function decodeNonce(uint256 nonce)
+ external
+ pure
+ returns (ValidationMode mode, ValidationType vType, ValidationId identifier)
+ {
+ return ValidatorLib.decodeNonce(nonce);
+ }
+
+ function validatorToIdentifier(IValidator validator) external pure returns (ValidationId vId) {
+ return ValidatorLib.validatorToIdentifier(validator);
+ }
+
+ function getType(ValidationId validator) external pure returns (ValidationType vType) {
+ return ValidatorLib.getType(validator);
+ }
+
+ function getValidator(ValidationId validator) external pure returns (IValidator v) {
+ return ValidatorLib.getValidator(validator);
+ }
+
+ function getPolicy(PolicyData data) external pure returns (IPolicy vId) {
+ return ValidatorLib.getPolicy(data);
+ }
+
+ function getPermissionId(ValidationId validation) external pure returns (PermissionId vId) {
+ return ValidatorLib.getPermissionId(validation);
+ }
+}
+
+contract PermissionTest is Test {
+ MockValidatorLib validatorLib;
+
+ function setUp() external {
+ validatorLib = new MockValidatorLib();
+ }
+
+ function testFlagEncode() external {
+ PassFlag flag = validatorLib.encodeFlag(true, true);
+ assertEq(PassFlag.unwrap(flag), bytes2(0x0003));
+ flag = validatorLib.encodeFlag(true, false);
+ assertEq(PassFlag.unwrap(flag), bytes2(0x0001));
+ flag = validatorLib.encodeFlag(false, true);
+ assertEq(PassFlag.unwrap(flag), bytes2(0x0002));
+ flag = validatorLib.encodeFlag(false, false);
+ assertEq(PassFlag.unwrap(flag), bytes2(0x0000));
+ }
+
+ function testDecode() external {
+ uint256 nonce = uint256(bytes32(0));
+ (ValidationMode vMode, ValidationType vType,) = validatorLib.decodeNonce(nonce);
+ assertTrue(vMode == VALIDATION_MODE_DEFAULT, "vMode != MODE_DEFAULT");
+ assertTrue(vType == VALIDATION_TYPE_ROOT, "vType != TYPE_VALIDATOR");
+ }
+
+ function testDecode(bytes1 mode, bytes1 vtype, bytes20 vIdWithoutType, bytes10 sequencialNonce) external {
+ uint256 nonce = uint256(bytes32(abi.encodePacked(mode, vtype, vIdWithoutType, sequencialNonce)));
+ (ValidationMode vMode, ValidationType vType, ValidationId vId) = validatorLib.decodeNonce(nonce);
+ assertTrue(vMode == ValidationMode.wrap(mode), "vMode != mode");
+ assertTrue(vType == ValidationType.wrap(vtype), "vType != type");
+ if (ValidationType.wrap(vtype) == VALIDATION_TYPE_PERMISSION) {
+ vIdWithoutType = (vIdWithoutType >> 128) << 128;
+ }
+ assertTrue(vId == ValidationId.wrap(bytes21(abi.encodePacked(vtype, vIdWithoutType))), "vId != vIdWithoutType");
+ }
+
+ function testEncode(bytes1 mode, bytes1 vtype, bytes20 vIdWithoutType, uint16 nonceKey, uint64 seqNonce) external {
+ uint256 encoded = validatorLib.encodeAsNonce(mode, vtype, vIdWithoutType, nonceKey, seqNonce);
+ uint256 nonce = uint256(bytes32(abi.encodePacked(mode, vtype, vIdWithoutType, nonceKey, seqNonce)));
+ assertEq(bytes32(nonce), bytes32(encoded));
+
+ uint192 encodedAsNonceKey = validatorLib.encodeAsNonceKey(mode, vtype, vIdWithoutType, nonceKey);
+ assertEq(nonce >> 64, encodedAsNonceKey);
+ }
+
+ function testValidatorLibPermission() public {
+ testValidatorLib(
+ ValidationMode.unwrap(VALIDATION_MODE_DEFAULT),
+ ValidationType.unwrap(VALIDATION_TYPE_PERMISSION),
+ bytes20(makeAddr("random")),
+ bytes10(0)
+ );
+ }
+
+ function testValidatorLib(bytes1 mode, bytes1 vtype, bytes20 vIdWithoutType, bytes10 sequencialNonce) public {
+ bytes20 expected = vIdWithoutType;
+ if (ValidationType.wrap(vtype) == VALIDATION_TYPE_PERMISSION) {
+ expected = (expected >> 128) << 128;
+ }
+ uint16 nonceKey = uint16(bytes2(sequencialNonce));
+ uint64 seqNonce = uint64(bytes8(sequencialNonce << 16));
+ uint256 encoded = validatorLib.encodeAsNonce(mode, vtype, vIdWithoutType, nonceKey, seqNonce);
+
+ (ValidationMode vMode, ValidationType vType, ValidationId vId) = validatorLib.decodeNonce(encoded);
+ assertTrue(vMode == ValidationMode.wrap(mode), "vMode != mode");
+ assertTrue(vType == ValidationType.wrap(vtype), "vType != type");
+ assertTrue(vId == ValidationId.wrap(bytes21(abi.encodePacked(vtype, expected))), "vId != vIdWithoutType");
+
+ if (ValidationType.wrap(vtype) == VALIDATION_TYPE_VALIDATOR) {
+ IValidator v = validatorLib.getValidator(vId);
+ assertEq(address(v), address(vIdWithoutType), "v != vIdWithoutType");
+ ValidationId vid = validatorLib.validatorToIdentifier(v);
+ assertTrue(
+ vid == ValidationId.wrap(bytes21(abi.encodePacked(VALIDATION_TYPE_VALIDATOR, vIdWithoutType))),
+ "vid != vIdWithoutType"
+ );
+ } else if (ValidationType.wrap(vtype) == VALIDATION_TYPE_PERMISSION) {
+ PermissionId pId = validatorLib.getPermissionId(vId);
+ assertEq(bytes20(abi.encodePacked(PermissionId.unwrap(pId), bytes16(0))), expected);
+ }
+
+ ValidationType vt = validatorLib.getType(vId);
+ assertTrue(vt == ValidationType.wrap(vtype), "vt != vtype");
+ }
+}
diff --git a/test/foundry/KernelECDSA.t.sol b/test/foundry/KernelECDSA.t.sol
deleted file mode 100644
index 8322e9ad..00000000
--- a/test/foundry/KernelECDSA.t.sol
+++ /dev/null
@@ -1,99 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import "src/Kernel.sol";
-import "src/validator/ECDSAValidator.sol";
-// test artifacts
-// test utils
-import "forge-std/Test.sol";
-import {ERC4337Utils} from "src/utils/ERC4337Utils.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {TestExecutor} from "src/mock/TestExecutor.sol";
-import {TestValidator} from "src/mock/TestValidator.sol";
-import {IKernel} from "src/interfaces/IKernel.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract KernelECDSATest is KernelTestBase {
- function setUp() public virtual {
- _initialize();
- defaultValidator = new ECDSAValidator();
- _setAddress();
- _setExecutionDetail();
- }
-
- function test_ignore() external {}
-
- function _setExecutionDetail() internal virtual override {
- executionDetail.executor = address(new TestExecutor());
- executionSig = TestExecutor.doNothing.selector;
- executionDetail.validator = new TestValidator();
- }
-
- function getEnableData() internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getOwners() internal view override returns (address[] memory) {
- address[] memory owners = new address[](1);
- owners[0] = owner;
- return owners;
- }
-
- function getInitializeData() internal view override returns (bytes memory) {
- return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner));
- }
-
- function signUserOp(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op));
- }
-
- function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey + 1, op));
- }
-
- function signHash(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, ECDSA.toEthSignedMessageHash(hash));
- return abi.encodePacked(r, s, v);
- }
-
- function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey + 1, ECDSA.toEthSignedMessageHash(hash));
- return abi.encodePacked(r, s, v);
- }
-
- function test_default_validator_enable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(ECDSAValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- (address owner_) = ECDSAValidator(address(defaultValidator)).ecdsaValidatorStorage(address(kernel));
- assertEq(owner_, address(0xdeadbeef), "owner should be 0xdeadbeef");
- }
-
- function test_default_validator_disable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(ECDSAValidator.disable.selector, ""),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- (address owner_) = ECDSAValidator(address(defaultValidator)).ecdsaValidatorStorage(address(kernel));
- assertEq(owner_, address(0), "owner should be 0");
- }
-}
diff --git a/test/foundry/KernelHelper.t.sol b/test/foundry/KernelHelper.t.sol
deleted file mode 100644
index 7a3fca8e..00000000
--- a/test/foundry/KernelHelper.t.sol
+++ /dev/null
@@ -1,66 +0,0 @@
-pragma solidity ^0.8.0;
-
-import "forge-std/Test.sol";
-import "src/utils/KernelHelper.sol";
-import "src/common/Types.sol";
-
-contract KernelHelperTest is Test {
- function testIntersect(
- ValidAfter validAfterA,
- ValidUntil validUntilA,
- ValidAfter validAfterB,
- ValidUntil validUntilB
- ) public {
- if (ValidUntil.unwrap(validUntilB) == 0) {
- validUntilB = ValidUntil.wrap(0xffffffffffff);
- }
- if (ValidUntil.unwrap(validUntilA) == 0) {
- validUntilA = ValidUntil.wrap(0xffffffffffff);
- }
- ValidationData a = packValidationData(validAfterA, validUntilA);
- ValidationData b = packValidationData(validAfterB, validUntilB);
- ValidationData c = _intersectValidationData(a, b);
-
- ValidationData expected = packValidationData(
- ValidAfter.unwrap(validAfterA) > ValidAfter.unwrap(validAfterB) ? validAfterA : validAfterB,
- ValidUntil.unwrap(validUntilA) < ValidUntil.unwrap(validUntilB) ? validUntilA : validUntilB
- );
- assertEq(ValidationData.unwrap(c), ValidationData.unwrap(expected));
- }
-
- function testIntersectWithAggregator(
- address aggregatorA,
- ValidAfter validAfterA,
- ValidUntil validUntilA,
- address aggregatorB,
- ValidAfter validAfterB,
- ValidUntil validUntilB
- ) external {
- if (ValidUntil.unwrap(validUntilB) == 0) {
- validUntilB = ValidUntil.wrap(0xffffffffffff);
- }
- if (ValidUntil.unwrap(validUntilA) == 0) {
- validUntilA = ValidUntil.wrap(0xffffffffffff);
- }
- ValidationData a = packValidationData(aggregatorA, validAfterA, validUntilA);
- ValidationData b = packValidationData(aggregatorB, validAfterB, validUntilB);
- ValidationData c = _intersectValidationData(a, b);
-
- address expectedAggregator = aggregatorA == address(0)
- ? aggregatorB
- : aggregatorA == aggregatorB || aggregatorB == address(0) ? aggregatorA : address(1);
- console.log("expectedAggregator", expectedAggregator);
- // a : b
- // 0 : 0 => 0
- // 0 : 1 => 1
- // 1 : 0 => 1
- // 1 : 1 => 1
- // X : 0 => X
- // X : 1 => 1
- // 0 : X => X
- // 1 : X => 1
- (ValidAfter vf, ValidUntil vu, address res) = parseValidationData(c);
- console.log("res", res);
- assertEq(res, expectedAggregator);
- }
-}
diff --git a/test/foundry/KernelLiteECDSA.t.sol b/test/foundry/KernelLiteECDSA.t.sol
deleted file mode 100644
index 70a71daf..00000000
--- a/test/foundry/KernelLiteECDSA.t.sol
+++ /dev/null
@@ -1,110 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import "src/Kernel.sol";
-import "src/lite/KernelLiteECDSA.sol";
-// test artifacts
-// test utils
-import "forge-std/Test.sol";
-import {ERC4337Utils} from "src/utils/ERC4337Utils.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {TestExecutor} from "src/mock/TestExecutor.sol";
-import {TestValidator} from "src/mock/TestValidator.sol";
-import {ECDSAValidator} from "src/validator/ECDSAValidator.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract KernelECDSATest is KernelTestBase {
- ECDSAValidator ecdsa;
-
- function setUp() public {
- ecdsa = new ECDSAValidator();
- _initialize();
- kernelImpl = Kernel(payable(address(new KernelLiteECDSA(entryPoint, ecdsa))));
- vm.startPrank(factoryOwner);
- factory.setImplementation(address(kernelImpl), true);
- vm.stopPrank();
-
- _setAddress();
- _setExecutionDetail();
- }
-
- function _setExecutionDetail() internal virtual override {
- executionDetail.executor = address(new TestExecutor());
- executionSig = TestExecutor.doNothing.selector;
- executionDetail.validator = new TestValidator();
- }
-
- function getEnableData() internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getOwners() internal view override returns (address[] memory) {
- address[] memory owners = new address[](1);
- owners[0] = owner;
- return owners;
- }
-
- function getInitializeData() internal view override returns (bytes memory) {
- return abi.encodeWithSelector(KernelStorage.initialize.selector, address(ecdsa), abi.encodePacked(owner));
- }
-
- function test_set_default_validator() external override {
- TestValidator newValidator = new TestValidator();
- bytes memory empty;
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(KernelStorage.setDefaultValidator.selector, address(newValidator), empty)
- );
- vm.expectEmit(true, true, true, false, address(entryPoint));
- emit UserOperationEvent(entryPoint.getUserOpHash(op), address(kernel), address(0), op.nonce, false, 0, 0);
- performUserOperationWithSig(op);
- }
-
- function signUserOp(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op));
- }
-
- function signHash(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, ECDSA.toEthSignedMessageHash(hash));
- return abi.encodePacked(r, s, v);
- }
-
- function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey + 1, op));
- }
-
- function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey + 1, ECDSA.toEthSignedMessageHash(hash));
- return abi.encodePacked(r, s, v);
- }
-
- function test_default_validator_enable() external override {
- vm.skip(true);
- }
-
- function test_default_validator_disable() external override {
- vm.skip(true);
- }
-
- function test_fail_validate_not_activate() external override {
- vm.skip(true);
- }
-
- function test_transfer_ownership() external {
- address newOwner = makeAddr("new owner");
- UserOperation memory op = entryPoint.fillUserOp(
- address(kernel), abi.encodeWithSelector(KernelLiteECDSA.transferOwnership.selector, newOwner)
- );
- op.signature = signUserOp(op);
- UserOperation[] memory ops = new UserOperation[](1);
- ops[0] = op;
- vm.expectEmit(true, true, true, false, address(entryPoint));
- emit UserOperationEvent(entryPoint.getUserOpHash(op), address(kernel), address(0), op.nonce, false, 0, 0);
- performUserOperationWithSig(op);
- }
-}
diff --git a/test/foundry/utils/Merkle.sol b/test/foundry/utils/Merkle.sol
deleted file mode 100644
index 26730161..00000000
--- a/test/foundry/utils/Merkle.sol
+++ /dev/null
@@ -1,76 +0,0 @@
-pragma solidity ^0.8.0;
-
-function _getRoot(bytes32[] memory data) pure returns (bytes32) {
- require(data.length > 1);
- while (data.length > 1) {
- data = _hashLevel(data);
- }
- return data[0];
-}
-
-function _getProof(bytes32[] memory data, uint256 nodeIndex, bool wrongProof) pure returns (bytes32[] memory) {
- require(data.length > 1);
-
- bytes32[] memory result = new bytes32[](64);
- uint256 pos;
-
- while (data.length > 1) {
- unchecked {
- if (nodeIndex & 0x1 == 1) {
- result[pos] = data[nodeIndex - 1];
- } else if (nodeIndex + 1 == data.length) {
- result[pos] = bytes32(0);
- } else {
- result[pos] = data[nodeIndex + 1];
- }
- ++pos;
- nodeIndex /= 2;
- }
- data = _hashLevel(data);
- }
- // Resize the length of the array to fit.
- /// @solidity memory-safe-assembly
- assembly {
- mstore(result, pos)
- }
- if (wrongProof) {
- result[0] = result[0] ^ bytes32(uint256(0x01));
- }
-
- return result;
-}
-
-function _hashLevel(bytes32[] memory data) pure returns (bytes32[] memory) {
- bytes32[] memory result;
- unchecked {
- uint256 length = data.length;
- if (length & 0x1 == 1) {
- result = new bytes32[](length / 2 + 1);
- result[result.length - 1] = _hashPair(data[length - 1], bytes32(0));
- } else {
- result = new bytes32[](length / 2);
- }
- uint256 pos = 0;
- for (uint256 i = 0; i < length - 1; i += 2) {
- result[pos] = _hashPair(data[i], data[i + 1]);
- ++pos;
- }
- }
- return result;
-}
-
-function _hashPair(bytes32 left, bytes32 right) pure returns (bytes32 result) {
- /// @solidity memory-safe-assembly
- assembly {
- switch lt(left, right)
- case 0 {
- mstore(0x0, right)
- mstore(0x20, left)
- }
- default {
- mstore(0x0, left)
- mstore(0x20, right)
- }
- result := keccak256(0x0, 0x40)
- }
-}
diff --git a/test/foundry/validator/KernelECDSATyped.t.sol b/test/foundry/validator/KernelECDSATyped.t.sol
deleted file mode 100644
index 905c7757..00000000
--- a/test/foundry/validator/KernelECDSATyped.t.sol
+++ /dev/null
@@ -1,153 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import "src/Kernel.sol";
-import "src/validator/ECDSATypedValidator.sol";
-// test artifacts
-// test utils
-import "forge-std/Test.sol";
-import {ERC4337Utils} from "src/utils/ERC4337Utils.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {TestExecutor} from "src/mock/TestExecutor.sol";
-import {TestValidator} from "src/mock/TestValidator.sol";
-import {IKernel} from "src/interfaces/IKernel.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-/// @author @KONFeature
-/// @title KernelECDSATypedTest
-/// @notice Unit test on the Kernel ECDSA typed validator
-contract KernelECDSATypedTest is KernelTestBase {
- ECDSATypedValidator private ecdsaTypedValidator;
-
- function setUp() public virtual {
- _initialize();
- ecdsaTypedValidator = new ECDSATypedValidator();
- defaultValidator = ecdsaTypedValidator;
- _setAddress();
- _setExecutionDetail();
- }
-
- function test_ignore() external {}
-
- function _setExecutionDetail() internal virtual override {
- executionDetail.executor = address(new TestExecutor());
- executionSig = TestExecutor.doNothing.selector;
- executionDetail.validator = new TestValidator();
- }
-
- function getEnableData() internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getOwners() internal view override returns (address[] memory) {
- address[] memory owners = new address[](1);
- owners[0] = owner;
- return owners;
- }
-
- function getInitializeData() internal view override returns (bytes memory) {
- return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner));
- }
-
- function signUserOp(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), _generateUserOpSignature(entryPoint, op, ownerKey));
- }
-
- function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), _generateUserOpSignature(entryPoint, op, ownerKey + 1));
- }
-
- function signHash(bytes32 _hash) internal view override returns (bytes memory) {
- return _generateHashSignature(_hash, owner, address(kernel), ownerKey);
- }
-
- function getWrongSignature(bytes32 _hash) internal view override returns (bytes memory) {
- return _generateHashSignature(_hash, owner, address(kernel), ownerKey + 1);
- }
-
- function test_default_validator_enable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(ECDSATypedValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- address owner_ = ecdsaTypedValidator.getOwner(address(kernel));
- assertEq(owner_, address(0xdeadbeef), "owner should be 0xdeadbeef");
- }
-
- function test_default_validator_disable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(ECDSATypedValidator.disable.selector, ""),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- address owner_ = ecdsaTypedValidator.getOwner(address(kernel));
- assertEq(owner_, address(0), "owner should be 0");
- }
-
- /* -------------------------------------------------------------------------- */
- /* Helper methods */
- /* -------------------------------------------------------------------------- */
-
- /// @notice The type hash used for kernel user op validation
- bytes32 constant USER_OP_TYPEHASH = keccak256("AllowUserOp(address owner,address kernelWallet,bytes32 userOpHash)");
-
- /// @dev Generate the signature for a user op
- function _generateUserOpSignature(IEntryPoint _entryPoint, UserOperation memory _op, uint256 _privateKey)
- internal
- view
- returns (bytes memory)
- {
- // Get the kernel private key owner address
- address owner_ = vm.addr(_privateKey);
-
- // Get the user op hash
- bytes32 userOpHash = _entryPoint.getUserOpHash(_op);
-
- // Get the validator domain separator
- bytes32 domainSeparator = ecdsaTypedValidator.getDomainSeperator();
- bytes32 typedMsgHash = keccak256(
- abi.encodePacked(
- "\x19\x01", domainSeparator, keccak256(abi.encode(USER_OP_TYPEHASH, owner_, _op.sender, userOpHash))
- )
- );
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(_privateKey, typedMsgHash);
- return abi.encodePacked(r, s, v);
- }
-
- /// @notice The type hash used for kernel signature validation
- bytes32 constant SIGNATURE_TYPEHASH = keccak256("KernelSignature(address owner,address kernelWallet,bytes32 hash)");
-
- /// @dev Generate the signature for a given hash for a kernel account
- function _generateHashSignature(bytes32 _hash, address _owner, address _kernel, uint256 _privateKey)
- internal
- view
- returns (bytes memory)
- {
- // Get the validator domain separator
- bytes32 domainSeparator = ecdsaTypedValidator.getDomainSeperator();
- bytes32 typedMsgHash = keccak256(
- abi.encodePacked(
- "\x19\x01", domainSeparator, keccak256(abi.encode(SIGNATURE_TYPEHASH, _owner, _kernel, _hash))
- )
- );
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(_privateKey, typedMsgHash);
- return abi.encodePacked(r, s, v);
- }
-}
diff --git a/test/foundry/validator/KillSwitchValidator.t.sol b/test/foundry/validator/KillSwitchValidator.t.sol
deleted file mode 100644
index 3ab45b14..00000000
--- a/test/foundry/validator/KillSwitchValidator.t.sol
+++ /dev/null
@@ -1,119 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "src/factory/KernelFactory.sol";
-import "src/validator/ECDSAValidator.sol";
-import "src/Kernel.sol";
-import "src/validator/KillSwitchValidator.sol";
-import "src/executor/KillSwitchAction.sol";
-// test utils
-import "forge-std/Test.sol";
-import "src/utils/ERC4337Utils.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {KernelECDSATest} from "../KernelECDSA.t.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract KillSwitchValidatorTest is KernelECDSATest {
- KillSwitchValidator killSwitch;
- KillSwitchAction action;
- address guardian;
- uint256 guardianKey;
-
- function setUp() public override {
- killSwitch = new KillSwitchValidator();
- action = new KillSwitchAction(killSwitch);
- super.setUp();
- (guardian, guardianKey) = makeAddrAndKey("guardian");
- }
-
- function _setExecutionDetail() internal override {
- executionDetail.executor = address(action);
- executionSig = KillSwitchAction.toggleKillSwitch.selector;
- executionDetail.validator = killSwitch;
- }
-
- function getEnableData() internal view override returns (bytes memory) {
- return abi.encodePacked(guardian);
- }
-
- function getValidatorSignature(UserOperation memory _op) internal view override returns (bytes memory sig) {
- uint256 pausedUntil = block.timestamp + 1000;
-
- bytes32 hash = entryPoint.getUserOpHash(_op);
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(
- guardianKey, ECDSA.toEthSignedMessageHash(keccak256(bytes.concat(bytes6(uint48(pausedUntil)), hash)))
- );
- sig = abi.encodePacked(uint48(pausedUntil), r, s, v);
- }
-
- function test_should_fail_with_not_implemented_isValidSignature() public {
- test_should_fail_with_not_implemented_isValidSignature(
- bytes32(keccak256(abi.encodePacked("HelloWorld"))), abi.encodePacked("HelloWorld")
- );
- }
-
- function test_should_fail_with_not_implemented_isValidSignature(bytes32 hash, bytes memory sig) public {
- vm.expectRevert();
- killSwitch.validateSignature(hash, sig);
- }
-
- function test_should_fail_with_not_implemented_validCaller() public {
- test_should_fail_with_not_implemented_validCaller(address(0), abi.encodePacked("HelloWorld"));
- }
-
- function test_should_fail_with_not_implemented_validCaller(address caller, bytes memory data) public {
- vm.expectRevert();
- killSwitch.validCaller(caller, data);
- }
-
- function test_force_unblock() external {
- UserOperation memory op =
- buildUserOperation(abi.encodeWithSelector(Kernel.execute.selector, owner, 0, "", Operation.Call));
-
- op.signature = bytes.concat(bytes4(0), entryPoint.signUserOpHash(vm, ownerKey, op));
- performUserOperation(op);
-
- op = buildUserOperation(abi.encodeWithSelector(KillSwitchAction.toggleKillSwitch.selector));
- bytes memory enableData = abi.encodePacked(guardian);
- {
- bytes32 digest = getTypedDataHash(
- KillSwitchAction.toggleKillSwitch.selector, 0, 0, address(killSwitch), address(action), enableData
- );
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest);
-
- op.signature = abi.encodePacked(
- bytes4(0x00000002),
- uint48(0),
- uint48(0),
- address(killSwitch),
- address(action),
- uint256(enableData.length),
- enableData,
- uint256(65),
- r,
- s,
- v
- );
- }
- uint48 pausedUntil = uint48(block.timestamp + 1000);
- bytes32 hash = entryPoint.getUserOpHash(op);
- {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(
- guardianKey, ECDSA.toEthSignedMessageHash(keccak256(bytes.concat(bytes6(uint48(pausedUntil)), hash)))
- );
- bytes memory sig = abi.encodePacked(r, s, v);
-
- op.signature = bytes.concat(op.signature, bytes6(uint48(pausedUntil)), sig);
- }
-
- performUserOperation(op);
- assertEq(kernel.getDisabledMode(), bytes4(0xffffffff));
- assertEq(address(kernel.getDefaultValidator()), address(killSwitch));
- op = buildUserOperation(abi.encodeWithSelector(KillSwitchAction.toggleKillSwitch.selector));
-
- op.signature = bytes.concat(bytes4(0), entryPoint.signUserOpHash(vm, guardianKey, op));
- performUserOperation(op);
- assertEq(kernel.getDisabledMode(), bytes4(0));
- }
-}
diff --git a/test/foundry/validator/SessionKeyValidator.t.sol b/test/foundry/validator/SessionKeyValidator.t.sol
deleted file mode 100644
index e231c1d4..00000000
--- a/test/foundry/validator/SessionKeyValidator.t.sol
+++ /dev/null
@@ -1,538 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "src/Kernel.sol";
-import "src/interfaces/IKernel.sol";
-import "src/validator/ECDSAValidator.sol";
-import "src/factory/KernelFactory.sol";
-import {Call} from "src/common/Structs.sol";
-// test artifacts
-import "src/mock/TestValidator.sol";
-import "src/mock/TestExecutor.sol";
-import "src/mock/TestERC721.sol";
-import "src/mock/TestERC20.sol";
-import "src/mock/TestPaymaster.sol";
-// test utils
-import "forge-std/Test.sol";
-import "src/utils/ERC4337Utils.sol";
-import "../utils/Merkle.sol";
-// test actions/validators
-import "src/validator/SessionKeyValidator.sol";
-
-import {KernelECDSATest} from "../KernelECDSA.t.sol";
-import "src/mock/TestCallee.sol";
-import "src/mock/TestERC20.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract SessionKeyValidatorTest is KernelECDSATest {
- SessionKeyValidator sessionKeyValidator;
- TestCallee[] callees;
- TestERC20[] erc20s;
- ExecutionRule execRule;
- bytes32[] data;
- address sessionKey;
- uint256 sessionKeyPriv;
- TestPaymaster paymaster;
- TestPaymaster unknownPaymaster;
- address recipient;
-
- function setUp() public override {
- super.setUp();
- (sessionKey, sessionKeyPriv) = makeAddrAndKey("sessionKey");
- sessionKeyValidator = new SessionKeyValidator();
- paymaster = new TestPaymaster();
- unknownPaymaster = new TestPaymaster();
- entryPoint.depositTo{value: 1e18}(address(unknownPaymaster));
- entryPoint.depositTo{value: 1e18}(address(paymaster));
- recipient = makeAddr("recipient");
- }
-
- function _setup_permission(uint256 _length, bool isDelegateCall)
- internal
- returns (Permission[] memory permissions)
- {
- permissions = new Permission[](_length);
- callees = new TestCallee[](_length);
- if (isDelegateCall) {
- erc20s = new TestERC20[](_length);
- }
- for (uint8 i = 0; i < _length; i++) {
- address target;
- bytes4 sig;
- if (isDelegateCall) {
- erc20s[i] = new TestERC20();
- target = address(callees[i]);
- sig = TestCallee.transferErc20Tester.selector;
- erc20s[i].mint(address(kernel), 200);
- } else {
- callees[i] = new TestCallee();
- target = address(callees[i]);
- sig = TestCallee.addTester.selector;
- }
- ParamRule[] memory paramRules = new ParamRule[](2);
- if (isDelegateCall) {
- paramRules[0] =
- ParamRule({offset: 0, condition: ParamCondition(0), param: bytes32(uint256(uint160(recipient)))});
- } else {
- paramRules[0] = ParamRule({offset: 0, condition: ParamCondition(i % 6), param: bytes32(uint256(100))});
- }
- paramRules[1] =
- ParamRule({offset: 32, condition: ParamCondition((i + 1) % 6), param: bytes32(uint256(100))});
- permissions[i] = Permission({
- index: i,
- target: target,
- sig: sig,
- valueLimit: 0,
- rules: paramRules,
- executionRule: execRule,
- operation: isDelegateCall ? Operation.DelegateCall : Operation.Call
- });
- }
- }
-
- function _buildHashes(Permission[] memory permissions) internal {
- // setup permission done
- data = new bytes32[](permissions.length);
- for (uint8 i = 0; i < permissions.length; i++) {
- data[i] = keccak256(abi.encode(permissions[i]));
- }
- }
-
- function _generateParam(ParamCondition condition, bool correct) internal pure returns (uint256 param) {
- if (condition == ParamCondition.EQUAL) {
- param = correct ? 100 : 101;
- } else if (condition == ParamCondition.GREATER_THAN) {
- param = correct ? 101 : 100;
- } else if (condition == ParamCondition.LESS_THAN) {
- param = correct ? 99 : 100;
- } else if (condition == ParamCondition.NOT_EQUAL) {
- param = correct ? 101 : 100;
- } else if (condition == ParamCondition.GREATER_THAN_OR_EQUAL) {
- param = correct ? 100 : 99;
- } else if (condition == ParamCondition.LESS_THAN_OR_EQUAL) {
- param = correct ? 100 : 101;
- }
- }
-
- function _buildUserOpBatch(
- Permission[] memory permissions,
- SessionData memory sessionData,
- uint256 indexToUse,
- uint8 usingPaymasterMode,
- bool param1Faulty,
- bool param2Faulty
- ) internal view returns (UserOperation memory op) {
- Call[] memory calls = new Call[](1);
- calls[0] = Call({
- to: permissions[indexToUse].target,
- value: 0,
- data: abi.encodeWithSelector(
- permissions[indexToUse].sig,
- _generateParam(ParamCondition(indexToUse % 6), !param1Faulty),
- _generateParam(ParamCondition((indexToUse + 1) % 6), !param2Faulty)
- )
- });
-
- op = buildUserOperation(abi.encodeWithSelector(IKernel.executeBatch.selector, calls));
- if (usingPaymasterMode != 0) {
- // 0 = no paymaster
- // 1 = unknown paymaster
- // 2 = correct paymaster
- op.paymasterAndData = usingPaymasterMode == 1
- ? abi.encodePacked(address(unknownPaymaster))
- : abi.encodePacked(address(paymaster));
- }
- bytes memory enableData = abi.encodePacked(
- sessionKey,
- sessionData.merkleRoot,
- sessionData.validAfter,
- sessionData.validUntil,
- sessionData.paymaster,
- sessionData.nonce
- );
- bytes32 digest = getTypedDataHash(
- IKernel.executeBatch.selector,
- ValidAfter.unwrap(sessionData.validAfter),
- ValidUntil.unwrap(sessionData.validUntil),
- address(sessionKeyValidator),
- address(0),
- enableData
- );
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest);
- op.signature = abi.encodePacked(
- bytes4(0x00000002),
- uint48(ValidAfter.unwrap(sessionData.validAfter)),
- uint48(ValidUntil.unwrap(sessionData.validUntil)),
- address(sessionKeyValidator),
- address(0),
- uint256(enableData.length),
- enableData,
- uint256(65),
- r,
- s,
- v
- );
- }
-
- function _buildUserOp(
- Permission[] memory permissions,
- SessionData memory sessionData,
- uint256 indexToUse,
- uint8 usingPaymasterMode,
- bool param1Faulty,
- bool param2Faulty,
- bool isDelegateCall
- ) internal view returns (UserOperation memory op) {
- bytes4 selector = isDelegateCall ? IKernel.executeDelegateCall.selector : IKernel.execute.selector;
- op = buildUserOperation(
- isDelegateCall
- ? abi.encodeWithSelector(
- selector,
- permissions[indexToUse].target,
- abi.encodeWithSelector(
- permissions[indexToUse].sig,
- recipient,
- _generateParam(ParamCondition((indexToUse + 1) % 6), !param2Faulty) // since NOT_EQ
- )
- )
- : abi.encodeWithSelector(
- selector,
- permissions[indexToUse].target,
- 0,
- abi.encodeWithSelector(
- permissions[indexToUse].sig,
- _generateParam(ParamCondition(indexToUse % 6), !param1Faulty), // since EQ
- _generateParam(ParamCondition((indexToUse + 1) % 6), !param2Faulty) // since NOT_EQ
- ),
- Operation.Call
- )
- );
- if (usingPaymasterMode != 0) {
- // 0 = no paymaster
- // 1 = unknown paymaster
- // 2 = correct paymaster
- op.paymasterAndData = usingPaymasterMode == 1
- ? abi.encodePacked(address(unknownPaymaster))
- : abi.encodePacked(address(paymaster));
- }
- bytes memory enableData = abi.encodePacked(
- sessionKey,
- sessionData.merkleRoot,
- sessionData.validAfter,
- sessionData.validUntil,
- sessionData.paymaster,
- sessionData.nonce
- );
- bytes32 digest = getTypedDataHash(
- selector,
- ValidAfter.unwrap(sessionData.validAfter),
- ValidUntil.unwrap(sessionData.validUntil),
- address(sessionKeyValidator),
- address(0),
- enableData
- );
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest);
- op.signature = abi.encodePacked(
- bytes4(0x00000002),
- uint48(ValidAfter.unwrap(sessionData.validAfter)),
- uint48(ValidUntil.unwrap(sessionData.validUntil)),
- address(sessionKeyValidator),
- address(0),
- uint256(enableData.length),
- enableData,
- uint256(65),
- r,
- s,
- v
- );
- }
-
- // scenarios to test
- // mode - 1, 2
- // paymaster - must, any, none
- // ExecRule
- // - when there is runs => when runs expired
- // - when there is validAfter => when validAfter is future
- // - when there is interval => when interval is zero, when interval is not zero
- // 21, 0, 2, 0, 0, 1, 0
- // 1, 0, 2, 0, 0, 1, 0
- // 0, 0, 12, 0, 2, 1, 0, 1, false
- // 0, 0, 2, 0, 2, 1, 1, 7550702249 [7.55e9], false
- struct TestConfig {
- uint8 paymasterMode;
- uint8 usingPaymasterMode;
- uint8 numberOfPermissions;
- uint8 indexToUse;
- uint48 runs;
- uint48 validAfter;
- uint48 interval;
- uint48 earlyRun;
- bool faultySig;
- bool param1Faulty;
- bool param2Faulty;
- bool wrongProof;
- bool isDelegateCall;
- }
-
- struct BatchTestConfig {
- uint8 count;
- }
-
- function test_scenario_batch(TestConfig memory config, BatchTestConfig memory batchConfig) public {
- vm.warp(1000);
- if (batchConfig.count == 0) {
- batchConfig.count = 1;
- }
- config.runs = 0;
- config.interval = 0;
- config.validAfter = 0; // TODO: runs not checked with batch
- vm.assume(!config.isDelegateCall);
- vm.assume(config.indexToUse < config.numberOfPermissions && config.numberOfPermissions > 1);
- vm.assume(
- config.validAfter < type(uint32).max && config.interval < type(uint32).max && config.runs < type(uint32).max
- );
- config.paymasterMode = config.paymasterMode % 3;
- config.usingPaymasterMode = config.usingPaymasterMode % 3;
- bool shouldFail = (config.usingPaymasterMode < config.paymasterMode) || (1000 < config.validAfter)
- || config.faultySig || config.param1Faulty || config.param2Faulty || config.wrongProof;
- config.runs = config.runs % 10;
- config.earlyRun = config.runs == 0 ? 0 : config.earlyRun % config.runs;
- if (config.interval == 0 || config.validAfter == 0) {
- config.earlyRun = 0;
- }
- if (config.interval > 0) {
- vm.assume(config.validAfter > 0 && config.validAfter < block.timestamp);
- } else {
- vm.assume(config.validAfter < block.timestamp);
- }
- // setup permissions
- execRule = ExecutionRule({
- runs: config.runs,
- validAfter: ValidAfter.wrap(config.validAfter),
- interval: config.interval
- });
- Permission[] memory permissions = _setup_permission(config.numberOfPermissions, false);
- _buildHashes(permissions);
- (uint128 lastNonce,) = sessionKeyValidator.nonces(address(kernel));
- SessionData memory sessionData = SessionData({
- merkleRoot: _getRoot(data),
- validAfter: ValidAfter.wrap(config.validAfter),
- validUntil: ValidUntil.wrap(0),
- paymaster: config.paymasterMode == 2 ? address(paymaster) : address(uint160(config.paymasterMode)),
- nonce: uint256(lastNonce) + 1 //lastNonce + 1
- });
- // now encode data to op
- UserOperation memory op = _buildUserOpBatch(
- permissions,
- sessionData,
- config.indexToUse,
- config.usingPaymasterMode,
- config.param1Faulty,
- config.param2Faulty
- );
- bytes32[][] memory proofs = new bytes32[][](batchConfig.count);
- Permission[] memory usingPermission = new Permission[](batchConfig.count);
- for (uint256 i = 0; i < batchConfig.count; i++) {
- proofs[i] = _getProof(data, config.indexToUse, config.wrongProof);
- usingPermission[i] = permissions[config.indexToUse];
- }
- op.signature = bytes.concat(
- op.signature,
- abi.encodePacked(
- sessionKey,
- entryPoint.signUserOpHash(vm, config.faultySig ? sessionKeyPriv + 1 : sessionKeyPriv, op),
- abi.encode(usingPermission, proofs)
- )
- );
-
- if (shouldFail) {
- vm.expectRevert();
- }
- performUserOperation(op);
- if (config.interval > 0 && config.validAfter > 0 && !shouldFail) {
- (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus(
- keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel)
- );
- assertEq(uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter));
- if (config.runs > 0) {
- assertEq(uint256(r), uint256(1));
- } else {
- assertEq(uint256(r), uint256(0));
- }
- }
- if (!shouldFail && config.runs > 0) {
- for (uint256 i = 1; i < config.runs; i++) {
- if (config.earlyRun != i) {
- vm.warp(config.validAfter + config.interval * i);
- } else {
- vm.warp(config.validAfter + config.interval * i - 1);
- }
- op.nonce = op.nonce + 1;
- op.signature = _getBatchActionSignature(op, permissions, config.indexToUse);
- if (config.earlyRun == i) {
- vm.expectRevert();
- }
- performUserOperation(op);
- if (config.earlyRun == i) {
- vm.warp(config.validAfter + config.interval * i);
- performUserOperation(op);
- }
- (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus(
- keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel)
- );
- if (config.validAfter > 0 && config.interval > 0) {
- assertEq(
- uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter + config.interval * i)
- );
- }
- if (config.runs > 0) {
- assertEq(uint256(r), uint256(i + 1));
- }
- }
- op.nonce = op.nonce + 1;
- op.signature = _getBatchActionSignature(op, permissions, config.indexToUse);
- vm.expectRevert();
- performUserOperation(op);
- }
- }
-
- function test_scenario_non_batch(TestConfig memory config) public {
- vm.warp(1000);
- vm.assume(config.indexToUse < config.numberOfPermissions && config.numberOfPermissions > 1);
- vm.assume(
- config.validAfter < type(uint32).max && config.interval < type(uint32).max && config.runs < type(uint32).max
- );
- config.paymasterMode = config.paymasterMode % 3;
- config.usingPaymasterMode = config.usingPaymasterMode % 3;
- bool shouldFail = (config.usingPaymasterMode < config.paymasterMode) || (1000 < config.validAfter)
- || config.faultySig || (config.param1Faulty && !config.isDelegateCall) || config.param2Faulty
- || config.wrongProof;
- config.runs = config.runs % 10;
- config.earlyRun = config.runs == 0 ? 0 : config.earlyRun % config.runs;
- if (config.interval == 0 || config.validAfter == 0) {
- config.earlyRun = 0;
- }
- if (config.interval > 0) {
- vm.assume(config.validAfter > 0 && config.validAfter < block.timestamp);
- } else {
- vm.assume(config.validAfter < block.timestamp);
- }
- // setup permissions
- execRule = ExecutionRule({
- runs: config.runs,
- validAfter: ValidAfter.wrap(config.validAfter),
- interval: config.interval
- });
- Permission[] memory permissions = _setup_permission(config.numberOfPermissions, config.isDelegateCall);
- _buildHashes(permissions);
- (uint128 lastNonce,) = sessionKeyValidator.nonces(address(kernel));
- SessionData memory sessionData = SessionData({
- merkleRoot: _getRoot(data),
- validAfter: ValidAfter.wrap(config.validAfter),
- validUntil: ValidUntil.wrap(0),
- paymaster: config.paymasterMode == 2 ? address(paymaster) : address(uint160(config.paymasterMode)),
- nonce: uint256(lastNonce) + 1 //lastNonce + 1
- });
- // now encode data to op
- UserOperation memory op = _buildUserOp(
- permissions,
- sessionData,
- config.indexToUse,
- config.usingPaymasterMode,
- config.param1Faulty,
- config.param2Faulty,
- config.isDelegateCall
- );
- op.signature = bytes.concat(
- op.signature,
- abi.encodePacked(
- sessionKey,
- entryPoint.signUserOpHash(vm, config.faultySig ? sessionKeyPriv + 1 : sessionKeyPriv, op),
- abi.encode(permissions[config.indexToUse], _getProof(data, config.indexToUse, config.wrongProof))
- )
- );
-
- if (shouldFail) {
- vm.expectRevert();
- }
- performUserOperation(op);
- if (config.interval > 0 && config.validAfter > 0 && !shouldFail) {
- (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus(
- keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel)
- );
- assertEq(uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter));
- if (config.runs > 0) {
- assertEq(uint256(r), uint256(1));
- } else {
- assertEq(uint256(r), uint256(0));
- }
- }
- if (!shouldFail && config.runs > 0) {
- for (uint256 i = 1; i < config.runs; i++) {
- if (config.earlyRun != i) {
- vm.warp(config.validAfter + config.interval * i);
- } else {
- vm.warp(config.validAfter + config.interval * i - 1);
- }
- op.nonce = op.nonce + 1;
- op.signature = _getSingleActionSignature(op, permissions, config.indexToUse);
- if (config.earlyRun == i) {
- vm.expectRevert();
- }
- performUserOperation(op);
- if (config.earlyRun == i) {
- vm.warp(config.validAfter + config.interval * i);
- performUserOperation(op);
- }
- (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus(
- keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel)
- );
- if (config.validAfter > 0 && config.interval > 0) {
- assertEq(
- uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter + config.interval * i)
- );
- }
- if (config.runs > 0) {
- assertEq(uint256(r), uint256(i + 1));
- }
- }
- op.nonce = op.nonce + 1;
- op.signature = _getSingleActionSignature(op, permissions, config.indexToUse);
- vm.expectRevert();
- performUserOperation(op);
- }
- }
-
- function _getBatchActionSignature(UserOperation memory _op, Permission[] memory permissions, uint8 indexToUse)
- internal
- view
- returns (bytes memory)
- {
- Permission[] memory _permissions = new Permission[](1);
- _permissions[0] = permissions[indexToUse];
- bytes32[][] memory _proofs = new bytes32[][](1);
- _proofs[0] = _getProof(data, indexToUse, false);
- return abi.encodePacked(
- bytes4(0x00000001),
- abi.encodePacked(
- sessionKey, entryPoint.signUserOpHash(vm, sessionKeyPriv, _op), abi.encode(_permissions, _proofs)
- )
- );
- }
-
- function _getSingleActionSignature(UserOperation memory _op, Permission[] memory permissions, uint8 indexToUse)
- internal
- view
- returns (bytes memory)
- {
- return abi.encodePacked(
- bytes4(0x00000001),
- abi.encodePacked(
- sessionKey,
- entryPoint.signUserOpHash(vm, sessionKeyPriv, _op),
- abi.encode(permissions[indexToUse], _getProof(data, indexToUse, false))
- )
- );
- }
-}
diff --git a/test/foundry/validator/WebAuthnFclValidator.t.sol b/test/foundry/validator/WebAuthnFclValidator.t.sol
deleted file mode 100644
index ec2134d2..00000000
--- a/test/foundry/validator/WebAuthnFclValidator.t.sol
+++ /dev/null
@@ -1,359 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import "src/Kernel.sol";
-import "forge-std/Test.sol";
-import {ERC4337Utils} from "src/utils/ERC4337Utils.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {TestExecutor} from "src/mock/TestExecutor.sol";
-import {TestValidator} from "src/mock/TestValidator.sol";
-import {WebAuthnFclVerifier} from "src/validator/webauthn/WebAuthnFclVerifier.sol";
-import {P256VerifierWrapper} from "src/utils/P256VerifierWrapper.sol";
-import {WebAuthnFclValidator} from "src/validator/webauthn/WebAuthnFclValidator.sol";
-import {FCL_ecdsa_utils} from "FreshCryptoLib/FCL_ecdsa_utils.sol";
-import {Base64Url} from "FreshCryptoLib/utils/Base64Url.sol";
-import {IKernel} from "src/interfaces/IKernel.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract WebAuthnFclValidatorTest is KernelTestBase {
- WebAuthnFclValidator private webAuthNValidator;
- WebAuthNTester private webAuthNTester;
- P256VerifierWrapper private p256VerifierWrapper;
-
- // Curve order (number of points)
- uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551;
-
- // The public key of the owner
- uint256 x;
- uint256 y;
-
- function setUp() public {
- // Deploy a RIP-7212 compliant P256Verifier contract
- p256VerifierWrapper = new P256VerifierWrapper();
- // Deploy a WebAuthnFclValidator contract using that RIP-7212 compliant P256Verifier contract
- webAuthNValidator = new WebAuthnFclValidator(address(p256VerifierWrapper));
-
- // Deploy a webAuthNTester that will be used to format the signature during test
- webAuthNTester = new WebAuthNTester();
-
- _initialize();
- (x, y) = _getPublicKey(ownerKey);
- _setAddress();
- _setExecutionDetail();
- }
-
- function _setExecutionDetail() internal virtual override {
- executionDetail.executor = address(new TestExecutor());
- executionSig = TestExecutor.doNothing.selector;
- executionDetail.validator = new TestValidator();
- }
-
- function getValidatorSignature(UserOperation memory _op) internal view virtual override returns (bytes memory) {
- bytes32 _hash = entryPoint.getUserOpHash(_op);
- bytes memory signature = _generateWebAuthnSignature(ownerKey, _hash);
- return abi.encodePacked(bytes4(0x00000000), signature);
- }
-
- function getOwners() internal virtual override returns (address[] memory _owners) {
- _owners = new address[](1);
- _owners[0] = address(0);
- return _owners;
- }
-
- function getEnableData() internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getInitializeData() internal view override returns (bytes memory) {
- return abi.encodeWithSelector(KernelStorage.initialize.selector, webAuthNValidator, abi.encode(x, y));
- }
-
- function test_default_validator_enable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(webAuthNValidator),
- 0,
- abi.encodeWithSelector(webAuthNValidator.enable.selector, abi.encode(x, y)),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- (uint256 x2, uint256 y2) = WebAuthnFclValidator(address(webAuthNValidator)).getPublicKey(address(kernel));
- _assertPublicKey(x2, y2, x, y);
- }
-
- function test_default_validator_disable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(webAuthNValidator),
- 0,
- abi.encodeWithSelector(webAuthNValidator.disable.selector, ""),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- (uint256 x2, uint256 y2) = WebAuthnFclValidator(address(webAuthNValidator)).getPublicKey(address(kernel));
- _assertPublicKey(x2, y2, 0, 0);
- }
-
- function test_external_call_batch_execute_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_execute_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_execute_delegatecall_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_execute_delegatecall_fail() external override {
- vm.skip(true);
- }
-
- function test_external_call_default() external override {
- vm.skip(true);
- }
-
- function test_external_call_execution() external override {
- vm.skip(true);
- }
-
- function test_validate_signature() external override {
- bytes32 _hash = keccak256(abi.encodePacked("hello world"));
-
- bytes32 digest = keccak256(
- abi.encodePacked(
- "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), _hash
- )
- );
-
- bytes memory signature = signHash(digest);
-
- assertEq(kernel.isValidSignature(_hash, signature), Kernel.isValidSignature.selector);
- }
-
- function test_fail_validate_wrongsignature() external override {
- // Prepare the hash to sign
- bytes32 _hash = keccak256(abi.encodePacked("hello world"));
- bytes32 digest = keccak256(
- abi.encodePacked(
- "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), _hash
- )
- );
-
- // Sign it (via a wrong signer)
- bytes memory sig = getWrongSignature(digest);
- assertEq(kernel.isValidSignature(_hash, sig), bytes4(0xffffffff));
- }
-
- function test_fail_validate_InvalidWebAuthnData() external {
- // Prepare the data to sign
- bytes32 _hash = keccak256(abi.encodePacked("hello world"));
- bytes32 digest = keccak256(
- abi.encodePacked(
- "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), _hash
- )
- );
-
- bytes32 _wrongHash = keccak256(abi.encodePacked("bye world"));
-
- // Sign it
- bytes memory sig = signHash(digest);
-
- // Ensure it's reverting
- vm.expectRevert("Kernel::_validateSignature: failed to validate signature");
- kernel.isValidSignature(_wrongHash, sig);
- }
-
- function signUserOp(UserOperation memory op) internal view override returns (bytes memory) {
- bytes32 _hash = entryPoint.getUserOpHash(op);
- bytes memory signature = _generateWebAuthnSignature(ownerKey, _hash);
- return abi.encodePacked(bytes4(0x00000000), signature);
- }
-
- function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) {
- bytes32 _hash = entryPoint.getUserOpHash(op);
- bytes memory signature = _generateWebAuthnSignature(ownerKey + 1, _hash);
- return abi.encodePacked(bytes4(0x00000000), signature);
- }
-
- function signHash(bytes32 _hash) internal view override returns (bytes memory) {
- return _generateWebAuthnSignature(ownerKey, _hash);
- }
-
- function getWrongSignature(bytes32 _hash) internal view override returns (bytes memory) {
- return _generateWebAuthnSignature(ownerKey + 1, _hash);
- }
-
- function _assertPublicKey(uint256 actualX, uint256 actualY, uint256 expectedX, uint256 expectedY) internal {
- assertEq(actualX, expectedX, "Public key X component mismatch");
- assertEq(actualY, expectedY, "Public key Y component mismatch");
- }
-
- /// @dev Ensure that the validation won't revert when using the dummy signature bypass (challenge offset to uint256.max)
- function test_dontRevertForDummySig() public {
- // Build rly dummy data for authenticator data and client data
- bytes memory authenticatorData = hex"1312";
- bytes memory clientData = hex"1312";
- // Set the client challenge data offset to the max value
- uint256 clientChallengeDataOffset = type(uint256).max;
-
- // Build an incoherent signature
- uint256[2] memory rs = [type(uint256).max, type(uint256).max];
-
- // Encode all of that into a signature
- bytes memory signature = abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs);
-
- // Check the sig (and ensure we didn't revert here)
- bool isValid = webAuthNTester.verifySignature(address(p256VerifierWrapper), bytes32(0), signature, x, y);
- assertEq(isValid, false);
-
- // Ensure we can go through the validator with that signature
- ValidationData validationData = webAuthNValidator.validateSignature(bytes32(0), signature);
- assertEq(ValidationData.unwrap(validationData), 1);
- }
-
- /// @dev Ensure that our flow to generate a webauthn signature is working
- function test_webAuthnSignatureGeneration(bytes32 _hash, uint256 _privateKey) public {
- vm.assume(_privateKey > 0);
- vm.assume(_privateKey < n);
- (uint256 pubX, uint256 pubY) = _getPublicKey(_privateKey);
-
- // Build all the data required
- (bytes32 msgToSign, bytes memory authenticatorData, bytes memory clientData, uint256 clientChallengeDataOffset)
- = _prepapreWebAuthnMsg(_hash);
-
- // Then sign them
- (uint256 r, uint256 s) = _getP256Signature(_privateKey, msgToSign);
- uint256[2] memory rs = [r, s];
-
- // Encode all of that into a signature
- bytes memory signature = abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs);
-
- // Ensure the signature is valid
- bool isValid = webAuthNTester.verifySignature(address(p256VerifierWrapper), _hash, signature, pubX, pubY);
- assertEq(isValid, true);
- }
-
- /// @dev Ensure that our flow to generate a webauthn signature is working
- function test_webAuthnSignatureGeneration_solo() public {
- uint256 _privateKey = 0x1;
- bytes32 _hash = keccak256(abi.encodePacked("hello world"));
- (uint256 pubX, uint256 pubY) = _getPublicKey(_privateKey);
-
- // Build all the data required
- (bytes32 msgToSign, bytes memory authenticatorData, bytes memory clientData, uint256 clientChallengeDataOffset)
- = _prepapreWebAuthnMsg(_hash);
-
- // Then sign them
- (uint256 r, uint256 s) = _getP256Signature(_privateKey, msgToSign);
- uint256[2] memory rs = [r, s];
-
- // Encode all of that into a signature
- bytes memory signature = abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs);
-
- // Ensure the signature is valid
- bool isValid = webAuthNTester.verifySignature(address(p256VerifierWrapper), _hash, signature, pubX, pubY);
- assertEq(isValid, true);
- }
-
- /* -------------------------------------------------------------------------- */
- /* Signature & P256 helper functions */
- /* -------------------------------------------------------------------------- */
-
- /// @dev Generate a webauthn signature for the given `_hash` using the given `_privateKey`
- function _generateWebAuthnSignature(uint256 _privateKey, bytes32 _hash)
- internal
- view
- returns (bytes memory signature)
- {
- (bytes32 msgToSign, bytes memory authenticatorData, bytes memory clientData, uint256 clientChallengeDataOffset)
- = _prepapreWebAuthnMsg(_hash);
-
- // Get the signature
- (uint256 r, uint256 s) = _getP256Signature(_privateKey, msgToSign);
- uint256[2] memory rs = [r, s];
-
- // Return the signature
- return abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs);
- }
-
- /// @dev Prepare all the base data needed to perform a webauthn signature o n the given `_hash`
- function _prepapreWebAuthnMsg(bytes32 _hash)
- internal
- view
- returns (
- bytes32 msgToSign,
- bytes memory authenticatorData,
- bytes memory clientData,
- uint256 clientChallengeDataOffset
- )
- {
- // Base Mapping of the message
- bytes memory encodedChallenge = bytes(Base64Url.encode(abi.encodePacked(_hash)));
-
- // Prepare the authenticator data (from a real webauthn challenge)
- authenticatorData = hex"49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000";
-
- // Prepare the client data (starting from a real webauthn challenge, then replacing only the bytes needed for the challenge)
- bytes memory clientDataStart = hex"7b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a22";
- bytes memory clientDataEnd =
- hex"222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303032222c2263726f73734f726967696e223a66616c73657d";
- clientData = bytes.concat(clientDataStart, encodedChallenge, clientDataEnd);
- clientChallengeDataOffset = 36;
-
- // Build the signature layout
- WebAuthnFclVerifier.FclSignatureLayout memory sigLayout = WebAuthnFclVerifier.FclSignatureLayout({
- useOnChainP256Verifier: true,
- authenticatorData: authenticatorData,
- clientData: clientData,
- challengeOffset: clientChallengeDataOffset,
- // R/S not needed since the formatter will only use the other data
- rs: [uint256(0), uint256(0)]
- });
-
- // Format it
- msgToSign = webAuthNTester.formatSigLayout(_hash, sigLayout);
- }
-
- /// @dev Get a public key for a p256 user, from the given `_privateKey`
- function _getPublicKey(uint256 _privateKey) internal view returns (uint256, uint256) {
- return FCL_ecdsa_utils.ecdsa_derivKpub(_privateKey);
- }
-
- /// P256 curve order n/2 for malleability check
- uint256 constant P256_N_DIV_2 = 57896044605178124381348723474703786764998477612067880171211129530534256022184;
-
- /// @dev Generate a p256 signature, from the given `_privateKey` on the given `_hash`
- function _getP256Signature(uint256 _privateKey, bytes32 _hash) internal pure returns (uint256, uint256) {
- // Generate the signature using the k value and the private key
- (bytes32 r, bytes32 s) = vm.signP256(_privateKey, _hash);
- return (uint256(r), uint256(s));
- }
-}
-
-/// @dev simple contract to format a webauthn challenge (using to convert stuff in memory during test to calldata)
-contract WebAuthNTester {
- function formatSigLayout(bytes32 _hash, WebAuthnFclVerifier.FclSignatureLayout calldata signatureLayout)
- public
- view
- returns (bytes32)
- {
- console.log("hash: %d", uint256(_hash));
- return WebAuthnFclVerifier._formatWebAuthNChallenge(_hash, signatureLayout);
- }
-
- function verifySignature(address _p256Verifier, bytes32 _hash, bytes calldata _signature, uint256 _x, uint256 _y)
- public
- view
- returns (bool)
- {
- return WebAuthnFclVerifier._verifyWebAuthNSignature(_p256Verifier, _hash, _signature, _x, _y);
- }
-}
diff --git a/test/foundry/validator/WeightedECDSAValidator.t.sol b/test/foundry/validator/WeightedECDSAValidator.t.sol
deleted file mode 100644
index b6e96853..00000000
--- a/test/foundry/validator/WeightedECDSAValidator.t.sol
+++ /dev/null
@@ -1,169 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import "src/Kernel.sol";
-import "src/validator/WeightedECDSAValidator.sol";
-// test artifacts
-// test utils
-import "forge-std/Test.sol";
-import {ERC4337Utils} from "src/utils/ERC4337Utils.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {TestExecutor} from "src/mock/TestExecutor.sol";
-import {TestValidator} from "src/mock/TestValidator.sol";
-import {IKernel} from "src/interfaces/IKernel.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract KernelWeightedECDSATest is KernelTestBase {
- address[] public owners;
- uint256[] public ownerKeys;
- uint24[] public weights;
- uint24 public threshold;
- uint48 public delay;
-
- function setUp() public virtual {
- _initialize();
- defaultValidator = new WeightedECDSAValidator();
- owners = new address[](3);
- ownerKeys = new uint256[](3);
- (owners[0], ownerKeys[0]) = makeAddrAndKey("owner0");
- (owners[1], ownerKeys[1]) = makeAddrAndKey("owner1");
- (owners[2], ownerKeys[2]) = makeAddrAndKey("owner2");
- // sort owners and keys from largest to smallest owner address
- for (uint256 i = 0; i < owners.length; i++) {
- for (uint256 j = i + 1; j < owners.length; j++) {
- if (owners[i] < owners[j]) {
- address tempAddr = owners[i];
- owners[i] = owners[j];
- owners[j] = tempAddr;
- uint256 tempKey = ownerKeys[i];
- ownerKeys[i] = ownerKeys[j];
- ownerKeys[j] = tempKey;
- }
- }
- }
- weights = [uint24(1), uint24(2), uint24(3)];
- threshold = 3;
- delay = 0;
- _setAddress();
- _setExecutionDetail();
- }
-
- function test_ignore() external {}
-
- function _setExecutionDetail() internal virtual override {
- executionDetail.executor = address(new TestExecutor());
- executionSig = TestExecutor.doNothing.selector;
- executionDetail.validator = new TestValidator();
- }
-
- function getEnableData() internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getOwners() internal view override returns (address[] memory) {
- return owners;
- }
-
- function getInitializeData() internal view override returns (bytes memory) {
- bytes memory data = abi.encode(owners, weights, threshold, delay);
- return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, data);
- }
-
- function test_external_call_execute_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_default() external override {
- vm.skip(true);
- }
-
- function test_external_call_execute_delegatecall_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_batch_execute_success() external override {
- vm.skip(true);
- }
-
- function signUserOp(UserOperation memory op) internal view override returns (bytes memory) {
- bytes32 calldataAndNonceHash = keccak256(abi.encode(op.sender, op.callData, op.nonce));
-
- bytes32 digest = keccak256(
- abi.encode(
- keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
- keccak256("WeightedECDSAValidator"),
- keccak256("0.0.3"),
- block.chainid,
- address(defaultValidator)
- )
- );
-
- bytes32 structHash =
- keccak256(abi.encode(keccak256("Approve(bytes32 callDataAndNonceHash)"), calldataAndNonceHash));
- assembly {
- // Compute the digest.
- mstore(0x00, 0x1901000000000000) // Store "\x19\x01".
- mstore(0x1a, digest) // Store the domain separator.
- mstore(0x3a, structHash) // Store the struct hash.
- digest := keccak256(0x18, 0x42)
- // Restore the part of the free memory slot that was overwritten.
- mstore(0x3a, 0)
- }
-
- (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(ownerKeys[0], digest);
- (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(ownerKeys[1], digest);
- bytes memory opSig = entryPoint.signUserOpHash(vm, ownerKeys[2], op);
- return abi.encodePacked(bytes4(0x00000000), r0, s0, v0, r1, s1, v1, opSig);
- }
-
- function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKeys[0], op));
- }
-
- function signHash(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(ownerKeys[0], hash);
- (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(ownerKeys[1], hash);
- (uint8 v2, bytes32 r2, bytes32 s2) = vm.sign(ownerKeys[2], hash);
- return abi.encodePacked(r0, s0, v0, r1, s1, v1, r2, s2, v2);
- }
-
- function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(ownerKeys[1], hash);
- (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(ownerKeys[0], hash);
- (uint8 v2, bytes32 r2, bytes32 s2) = vm.sign(ownerKeys[2], hash);
- return abi.encodePacked(r0, s0, v0, r1, s1, v1, r2, s2, v2);
- }
-
- function test_default_validator_enable() external override {
- //UserOperation memory op = buildUserOperation(
- // abi.encodeWithSelector(
- // IKernel.execute.selector,
- // address(defaultValidator),
- // 0,
- // abi.encodeWithSelector(ECDSAValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))),
- // Operation.Call
- // )
- //);
- //performUserOperationWithSig(op);
- //(address owner) = ECDSAValidator(address(defaultValidator)).ecdsaValidatorStorage(address(kernel));
- //assertEq(owner, address(0xdeadbeef), "owner should be 0xdeadbeef");
- }
-
- function test_default_validator_disable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(WeightedECDSAValidator.disable.selector, ""),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- }
-}
diff --git a/test/foundry/validator/modularPermission/ModularPermission.t.sol b/test/foundry/validator/modularPermission/ModularPermission.t.sol
deleted file mode 100644
index 4f90216d..00000000
--- a/test/foundry/validator/modularPermission/ModularPermission.t.sol
+++ /dev/null
@@ -1,729 +0,0 @@
-pragma solidity ^0.8.0;
-
-import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol";
-import {IKernel} from "src/interfaces/IKernel.sol";
-import {Kernel} from "src/Kernel.sol";
-import {IKernelValidator} from "src/interfaces/IKernelValidator.sol";
-import {Operation} from "src/common/Enums.sol";
-import {toPermissionFlag} from "src/validator/modularPermission/PolicyConfig.sol";
-import "src/validator/modularPermission/ModularPermissionValidator.sol";
-import "src/validator/modularPermission/signers/ECDSASigner.sol";
-import "src/validator/modularPermission/mock/MockPolicy.sol";
-import "src/validator/modularPermission/mock/MockSigner.sol";
-import "src/validator/modularPermission/policies/EIP712Policy.sol";
-import "forge-std/Test.sol";
-import {KernelTestBase} from "src/utils/KernelTestBase.sol";
-import {TestExecutor} from "src/mock/TestExecutor.sol";
-import {TestValidator} from "src/mock/TestValidator.sol";
-import {KernelStorage} from "src/abstract/KernelStorage.sol";
-import {ERC4337Utils} from "src/utils/ERC4337Utils.sol";
-import {SignaturePolicy} from "src/validator/modularPermission/policies/SignaturePolicy.sol";
-import {EIP712} from "solady/utils/EIP712.sol";
-import {KERNEL_NAME, KERNEL_VERSION} from "src/common/Constants.sol";
-
-using ERC4337Utils for IEntryPoint;
-
-contract ModularPermissionE2ETest is KernelTestBase {
- ECDSASigner signer;
- MockPolicy mockPolicy;
- SignaturePolicy signaturePolicy;
- address[] allowedCaller;
-
- function setUp() public virtual {
- _initialize();
- defaultValidator = new ModularPermissionValidator();
- signer = new ECDSASigner();
- mockPolicy = new MockPolicy();
- signaturePolicy = new SignaturePolicy();
- allowedCaller = new address[](2);
- allowedCaller[0] = makeAddr("app");
- allowedCaller[1] = address(0);
- _setAddress();
- _setExecutionDetail();
- }
-
- function test_ignore() external {}
-
- function getPermissionId() internal view returns (bytes32) {
- PolicyConfig[] memory p = new PolicyConfig[](2);
- p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0));
- p[1] = PolicyConfigLib.pack(IPolicy(address(signaturePolicy)), toFlag(1));
- bytes[] memory pd = new bytes[](2);
- pd[0] = abi.encodePacked("policy data 1");
- pd[1] = abi.encode(allowedCaller);
-
- return ModularPermissionValidator(address(defaultValidator)).getPermissionId(
- MAX_FLAG, signer, ValidAfter.wrap(0), ValidUntil.wrap(0), p, abi.encodePacked(owner), pd
- );
- }
-
- function _setExecutionDetail() internal virtual override {
- executionDetail.executor = address(new TestExecutor());
- executionSig = TestExecutor.doNothing.selector;
- executionDetail.validator = new TestValidator();
- }
-
- function getEnableData() internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) {
- return "";
- }
-
- function getOwners() internal view override returns (address[] memory) {
- address[] memory owners = new address[](1);
- owners[0] = owner;
- return owners;
- }
-
- function getInitializeData() internal view override returns (bytes memory) {
- bytes memory sd = abi.encodePacked(owner);
- PolicyConfig[] memory p = new PolicyConfig[](2);
- p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0));
- p[1] = PolicyConfigLib.pack(IPolicy(address(signaturePolicy)), toFlag(1));
- bytes[] memory pd = new bytes[](2);
- pd[0] = abi.encodePacked("policy data 1");
- pd[1] = abi.encode(allowedCaller);
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- MAX_FLAG,
- uint48(0), //`validAfter
- uint48(0), // validUntil
- address(signer)
- ), // signer
- abi.encode(p, sd, pd)
- );
-
- return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, data);
- }
-
- function signUserOp(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), getPermissionId(), entryPoint.signUserOpHash(vm, ownerKey, op));
- }
-
- function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) {
- return abi.encodePacked(bytes4(0x00000000), getPermissionId(), entryPoint.signUserOpHash(vm, ownerKey + 1, op));
- }
-
- function signHash(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, hash);
- return abi.encodePacked(getPermissionId(), r, s, v);
- }
-
- function signHashWithoutPermissionId(bytes32 hash) internal view returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, hash);
- return abi.encodePacked(r, s, v);
- }
-
- function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) {
- (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey + 1, hash);
- return abi.encodePacked(getPermissionId(), r, s, v);
- }
-
- struct MData {
- address kernel;
- ValidUntil until;
- bytes sd;
- EIP712Policy eip712;
- PolicyConfig[] p;
- bytes32 domainSeparator;
- bytes32 typeHash;
- bytes32 encodeData;
- bytes32 digest;
- bytes[] pd;
- }
-
- struct ModularPermissionConfig {
- uint128 nonce;
- bytes12 flag;
- ISigner signer;
- ValidAfter validAfter;
- ValidUntil validUntil;
- PolicyConfig firstPolicy;
- }
-
- function test_sessionKey_signature() external {
- MData memory d;
- d.kernel = address(kernel);
- d.until = ValidUntil.wrap(uint48(block.timestamp + 100));
- d.sd = abi.encodePacked(owner);
- d.eip712 = new EIP712Policy();
- d.p = new PolicyConfig[](1);
- d.p[0] = PolicyConfigLib.pack(d.eip712, toFlag(1)); // skip on userOp
-
- d.domainSeparator = keccak256("DOMAIN_SEPARATOR");
- d.typeHash = keccak256("TypeHash(bytes32 encodeData)");
- d.encodeData = bytes32(uint256(0xdeadbeef));
- d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, d.encodeData)));
- d.pd = new bytes[](1);
- d.pd[0] = abi.encodePacked(d.domainSeparator, d.typeHash, bytes4(0), uint8(ParamRule.Equal), d.encodeData);
- bytes32 permissionId = ModularPermissionValidator(address(defaultValidator)).getPermissionId(
- toPermissionFlag(1), //flag
- signer,
- ValidAfter.wrap(1),
- d.until,
- d.p,
- d.sd,
- d.pd
- );
-
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(1), // nonce
- toPermissionFlag(1), //flag
- uint48(1), //`validAfter
- d.until, // validUntil
- address(signer)
- ), // signer
- abi.encode(d.p, d.sd, d.pd)
- );
- vm.startPrank(d.kernel);
- defaultValidator.enable(data);
- vm.stopPrank();
- ModularPermissionConfig memory config;
-
- (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) =
- ModularPermissionValidator(address(defaultValidator)).permissions(permissionId, d.kernel);
- assertEq(config.nonce, uint128(1));
- assertEq(config.flag, toPermissionFlag(1));
- assertEq(ValidAfter.unwrap(config.validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(d.until));
- assertEq(address(config.signer), address(signer));
- bytes32 wrappedDigest = keccak256(
- abi.encodePacked(
- "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), d.digest
- )
- );
-
- bytes4 res = kernel.isValidSignature(
- d.digest,
- abi.encodePacked(
- permissionId,
- d.eip712,
- uint256(100),
- d.domainSeparator,
- d.typeHash,
- uint32(1),
- uint256(d.encodeData), // you should put all data here
- signHashWithoutPermissionId(wrappedDigest)
- )
- );
- assertEq(res, Kernel.isValidSignature.selector);
- }
-
- function test_sessionKey_signature_greater_than() external {
- MData memory d;
- d.kernel = address(kernel);
- d.until = ValidUntil.wrap(uint48(block.timestamp + 100));
- d.sd = abi.encodePacked(owner);
- d.eip712 = new EIP712Policy();
- d.p = new PolicyConfig[](1);
- d.p[0] = PolicyConfigLib.pack(d.eip712, toFlag(1)); // skip on userOp
-
- d.domainSeparator = keccak256("DOMAIN_SEPARATOR");
- d.typeHash = keccak256("TypeHash(bytes32 encodeData)");
- d.encodeData = bytes32(uint256(0xdeadbeef));
- d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, uint256(d.encodeData) + 1)));
- d.pd = new bytes[](1);
- d.pd[0] = abi.encodePacked(d.domainSeparator, d.typeHash, bytes4(0), uint8(ParamRule.GreaterThan), d.encodeData);
- bytes32 permissionId = ModularPermissionValidator(address(defaultValidator)).getPermissionId(
- toPermissionFlag(1), //flag
- signer,
- ValidAfter.wrap(1),
- d.until,
- d.p,
- d.sd,
- d.pd
- );
-
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(1), // nonce
- toPermissionFlag(1), //flag
- uint48(1), //`validAfter
- d.until, // validUntil
- address(signer)
- ), // signer
- abi.encode(d.p, d.sd, d.pd)
- );
- vm.startPrank(d.kernel);
- defaultValidator.enable(data);
- vm.stopPrank();
- ModularPermissionConfig memory config;
-
- (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) =
- ModularPermissionValidator(address(defaultValidator)).permissions(permissionId, d.kernel);
- assertEq(config.nonce, uint128(1));
- assertEq(config.flag, toPermissionFlag(1));
- assertEq(ValidAfter.unwrap(config.validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(d.until));
- assertEq(address(config.signer), address(signer));
- bytes32 wrappedDigest = keccak256(
- abi.encodePacked(
- "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), d.digest
- )
- );
-
- bytes4 res = kernel.isValidSignature(
- d.digest,
- abi.encodePacked(
- permissionId,
- d.eip712,
- uint256(100),
- d.domainSeparator,
- d.typeHash,
- uint32(1),
- uint256(d.encodeData) + 1, // you should put all data here
- signHashWithoutPermissionId(wrappedDigest)
- )
- );
- assertEq(res, Kernel.isValidSignature.selector);
- }
-
- function test_default_validator_enable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(IKernelValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))),
- Operation.Call
- )
- );
- bytes memory sd = abi.encodePacked(owner);
- PolicyConfig[] memory p = new PolicyConfig[](1);
- p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0));
- bytes[] memory pd = new bytes[](1);
- pd[0] = abi.encodePacked("policy data 2");
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- MAX_FLAG, //flag
- uint48(0), //`validAfter
- uint48(0), // validUntil
- address(signer)
- ), // signer
- abi.encode(p, sd, pd)
- );
- performUserOperationWithSig(op);
- }
-
- function test_default_validator_disable() external override {
- UserOperation memory op = buildUserOperation(
- abi.encodeWithSelector(
- IKernel.execute.selector,
- address(defaultValidator),
- 0,
- abi.encodeWithSelector(IKernelValidator.disable.selector, abi.encodePacked(getPermissionId())),
- Operation.Call
- )
- );
- performUserOperationWithSig(op);
- }
-
- function test_external_call_execute_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_default() external override {
- vm.skip(true);
- }
-
- function test_external_call_execute_delegatecall_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_batch_execute_success() external override {
- vm.skip(true);
- }
-
- function test_external_call_execution() external override {
- vm.skip(true);
- }
-}
-
-contract ModularPermissionUnitTest is Test {
- ModularPermissionValidator validator;
-
- MockSigner mockSigner;
- MockPolicy mockPolicy;
-
- function setUp() external {
- validator = new ModularPermissionValidator();
- mockPolicy = new MockPolicy();
- mockSigner = new MockSigner();
- }
-
- function testParseData() external {
- uint48 until = uint48(block.timestamp + 100);
- bytes memory sd = abi.encodePacked("hello world");
- PolicyConfig[] memory p = new PolicyConfig[](2);
- p[0] = PolicyConfigLib.pack(IPolicy(address(0xdeadbeef)), toFlag(0));
- p[1] = PolicyConfigLib.pack(IPolicy(address(0xcafecafe)), toFlag(0));
- bytes[] memory pd = new bytes[](2);
- pd[0] = abi.encodePacked("policy data 1");
- pd[1] = abi.encodePacked("policy data 2");
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- MAX_FLAG, //flag
- uint48(1), //`validAfter
- until, // validUntil
- address(0xdead)
- ), // signer
- abi.encode(p, sd, pd)
- );
- (
- uint128 nonce,
- bytes12 flag,
- ISigner signer,
- ValidAfter validAfter,
- ValidUntil validUntil,
- PolicyConfig[] memory policies,
- bytes memory signerData,
- bytes[] memory policyData
- ) = validator.parseData(data);
- assertEq(nonce, uint128(0));
- assertEq(flag, MAX_FLAG);
- assertEq(ValidAfter.unwrap(validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(validUntil), until);
- assertEq(address(signer), address(0xdead));
- assertEq(address(PolicyConfigLib.getAddress(policies[0])), address(0xdeadbeef));
- assertEq(address(PolicyConfigLib.getAddress(policies[1])), address(0xcafecafe));
- assertEq(signerData, abi.encodePacked("hello world"));
- assertEq(policyData[0], abi.encodePacked("policy data 1"));
- assertEq(policyData[1], abi.encodePacked("policy data 2"));
- }
-
- function testRegister() external {
- uint48 until = uint48(block.timestamp + 100);
- bytes memory sd = abi.encodePacked("hello signer");
- PolicyConfig[] memory p = new PolicyConfig[](1);
- p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0));
- bytes[] memory pd = new bytes[](1);
- pd[0] = abi.encodePacked("hello policy");
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- MAX_FLAG, //flag
- uint48(1), //`validAfter
- until, // validUntil
- address(mockSigner)
- ), // signer
- abi.encode(p, sd, pd)
- );
- validator.enable(data);
- }
-
- struct ModularPermissionConfig {
- uint128 nonce;
- bytes12 flag;
- ISigner signer;
- ValidAfter validAfter;
- ValidUntil validUntil;
- PolicyConfig firstPolicy;
- }
-
- function testValidateUserOpSkip() external {
- address kernel = makeAddr("Kernel");
- ValidUntil until = ValidUntil.wrap(uint48(block.timestamp + 100));
- bytes memory sd = abi.encodePacked("hello signer");
- MockPolicy skipPolicy = new MockPolicy();
- PolicyConfig[] memory p = new PolicyConfig[](2);
- p[0] = PolicyConfigLib.pack(mockPolicy, toFlag(0));
- p[1] = PolicyConfigLib.pack(skipPolicy, toFlag(1)); // skip
-
- bytes[] memory pd = new bytes[](2);
- pd[0] = abi.encodePacked("hello policy");
- pd[1] = abi.encodePacked("hello policy 2");
- bytes32 permissionId = validator.getPermissionId(
- toPermissionFlag(0), //flag
- mockSigner,
- ValidAfter.wrap(1),
- until,
- p,
- sd,
- pd
- );
-
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- toPermissionFlag(0), //flag
- uint48(1), //`validAfter
- until, // validUntil
- address(mockSigner)
- ), // signer
- abi.encode(p, sd, pd)
- );
- vm.startPrank(kernel);
- validator.enable(data);
- vm.stopPrank();
-
- ModularPermissionConfig memory config;
-
- (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) =
- validator.permissions(permissionId, kernel);
- assertEq(config.nonce, uint128(0));
- assertEq(config.flag, toPermissionFlag(0));
- assertEq(ValidAfter.unwrap(config.validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(until));
- assertEq(address(config.signer), address(mockSigner));
- assertEq(address(PolicyConfigLib.getAddress(config.firstPolicy)), address(mockPolicy));
-
- assertEq(mockSigner.signerData(), sd);
- assertEq(mockPolicy.policyData(), pd[0]);
- UserOperation memory op;
- op.sender = kernel;
- op.signature = abi.encodePacked(permissionId);
- vm.startPrank(kernel);
- validator.validateUserOp(op, keccak256(abi.encodePacked("hello")), 0);
- vm.stopPrank();
-
- assertEq(mockSigner.count(permissionId), 1);
- assertEq(mockPolicy.count(permissionId), 1);
- assertEq(skipPolicy.count(permissionId), 0);
- }
-
- struct MData {
- address kernel;
- ValidUntil until;
- bytes sd;
- EIP712Policy eip712;
- PolicyConfig[] p;
- bytes32 domainSeparator;
- bytes32 typeHash;
- bytes32 encodeData;
- bytes32 digest;
- bytes[] pd;
- }
-
- function testValidateSignature() external {
- MData memory d;
- d.kernel = makeAddr("Kernel");
- d.until = ValidUntil.wrap(uint48(block.timestamp + 100));
- d.sd = abi.encodePacked("hello signer");
- d.eip712 = new EIP712Policy();
- d.p = new PolicyConfig[](1);
- d.p[0] = PolicyConfigLib.pack(d.eip712, toFlag(1)); // skip on userOp
-
- d.domainSeparator = keccak256("DOMAIN_SEPARATOR");
- d.typeHash = keccak256("TypeHash(bytes32 encodeData)");
- d.encodeData = bytes32(uint256(0xdeadbeef));
- d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, d.encodeData)));
- d.pd = new bytes[](1);
- d.pd[0] = abi.encodePacked(d.domainSeparator, d.typeHash, bytes4(0), uint8(ParamRule.Equal), d.encodeData);
- bytes32 permissionId = validator.getPermissionId(
- toPermissionFlag(1), //flag
- mockSigner,
- ValidAfter.wrap(1),
- d.until,
- d.p,
- d.sd,
- d.pd
- );
-
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- toPermissionFlag(1), //flag
- uint48(1), //`validAfter
- d.until, // validUntil
- address(mockSigner)
- ), // signer
- abi.encode(d.p, d.sd, d.pd)
- );
- vm.startPrank(d.kernel);
- validator.enable(data);
- vm.stopPrank();
-
- ModularPermissionConfig memory config;
-
- (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) =
- validator.permissions(permissionId, d.kernel);
- assertEq(config.nonce, uint128(0));
- assertEq(config.flag, toPermissionFlag(1));
- assertEq(ValidAfter.unwrap(config.validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(d.until));
- assertEq(address(config.signer), address(mockSigner));
-
- UserOperation memory op;
- op.sender = d.kernel;
- op.signature = abi.encodePacked(permissionId);
- vm.startPrank(d.kernel);
- (bool success, bytes memory ret) = address(validator).call(
- abi.encodePacked(
- abi.encodeWithSelector(
- ModularPermissionValidator.validateSignature.selector,
- d.digest,
- abi.encodePacked(
- permissionId, d.eip712, uint256(100), d.domainSeparator, d.typeHash, uint32(1), d.encodeData
- )
- ),
- d.digest,
- makeAddr("app")
- )
- );
- require(address(uint160(bytes20(bytes32(ret) << 96))) == address(0));
- require(success);
- vm.stopPrank();
- vm.startPrank(d.kernel);
- d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, uint256(d.encodeData) + 1)));
- (success, ret) = address(validator).call(
- abi.encodePacked(
- abi.encodeWithSelector(
- ModularPermissionValidator.validateSignature.selector,
- d.digest,
- abi.encodePacked(
- permissionId,
- d.eip712,
- uint256(100),
- d.domainSeparator,
- d.typeHash,
- uint32(1),
- uint256(d.encodeData) + 1
- )
- ),
- d.digest,
- makeAddr("app")
- )
- );
- require(address(uint160(bytes20(bytes32(ret) << 96))) == address(1));
- require(success);
- vm.stopPrank();
- }
-
- function testValidateSignatureSkip() external {
- address kernel = makeAddr("Kernel");
- ValidUntil until = ValidUntil.wrap(uint48(block.timestamp + 100));
- bytes memory sd = abi.encodePacked("hello signer");
- MockPolicy skipPolicy = new MockPolicy();
- PolicyConfig[] memory p = new PolicyConfig[](2);
- p[0] = PolicyConfigLib.pack(mockPolicy, toFlag(0));
- p[1] = PolicyConfigLib.pack(skipPolicy, toFlag(2)); // skip on signature
- skipPolicy.mock(0, 0, true, true);
-
- bytes[] memory pd = new bytes[](2);
- pd[0] = abi.encodePacked("hello policy");
- pd[1] = abi.encodePacked("hello policy 2");
- bytes32 permissionId = validator.getPermissionId(
- MAX_FLAG, //flag
- mockSigner,
- ValidAfter.wrap(1),
- until,
- p,
- sd,
- pd
- );
-
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- MAX_FLAG, //flag
- uint48(1), //`validAfter
- until, // validUntil
- address(mockSigner)
- ), // signer
- abi.encode(p, sd, pd)
- );
- vm.startPrank(kernel);
- validator.enable(data);
- vm.stopPrank();
-
- ModularPermissionConfig memory config;
-
- (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) =
- validator.permissions(permissionId, kernel);
- assertEq(config.nonce, uint128(0));
- assertEq(config.flag, MAX_FLAG);
- assertEq(ValidAfter.unwrap(config.validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(until));
- assertEq(address(config.signer), address(mockSigner));
- assertEq(address(PolicyConfigLib.getAddress(config.firstPolicy)), address(mockPolicy));
-
- assertEq(mockSigner.signerData(), sd);
- assertEq(mockPolicy.policyData(), pd[0]);
- UserOperation memory op;
- op.sender = kernel;
- op.signature = abi.encodePacked(permissionId);
- vm.startPrank(kernel);
- vm.expectRevert();
- validator.validateSignature(keccak256(abi.encodePacked("hello")), "");
- vm.stopPrank();
- }
-
- function testValidateUserOp() external {
- address kernel = makeAddr("Kernel");
- ValidUntil until = ValidUntil.wrap(uint48(block.timestamp + 100));
- bytes memory sd = abi.encodePacked("hello signer");
- PolicyConfig[] memory p = new PolicyConfig[](1);
- p[0] = PolicyConfigLib.pack(mockPolicy, toFlag(0));
- bytes[] memory pd = new bytes[](1);
- pd[0] = abi.encodePacked("hello policy");
- bytes32 permissionId = validator.getPermissionId(
- MAX_FLAG, //flag
- mockSigner,
- ValidAfter.wrap(1),
- until,
- p,
- sd,
- pd
- );
-
- bytes memory data = abi.encodePacked(
- abi.encodePacked(
- uint128(0), // nonce
- MAX_FLAG, //flag
- uint48(1), //`validAfter
- until, // validUntil
- address(mockSigner)
- ), // signer
- abi.encode(p, sd, pd)
- );
- vm.startPrank(kernel);
- validator.enable(data);
- vm.stopPrank();
-
- (
- uint128 nonce,
- bytes12 flag,
- ISigner signer,
- PolicyConfig firstPolicy,
- ValidAfter validAfter,
- ValidUntil validUntil
- ) = validator.permissions(permissionId, kernel);
- assertEq(nonce, uint128(0));
- assertEq(flag, MAX_FLAG);
- assertEq(ValidAfter.unwrap(validAfter), uint48(1));
- assertEq(ValidUntil.unwrap(validUntil), ValidUntil.unwrap(until));
- assertEq(address(signer), address(mockSigner));
- assertEq(address(PolicyConfigLib.getAddress(firstPolicy)), address(mockPolicy));
-
- assertEq(mockSigner.signerData(), sd);
- assertEq(mockPolicy.policyData(), pd[0]);
- UserOperation memory op;
- op.sender = kernel;
- op.signature = abi.encodePacked(permissionId);
- vm.startPrank(kernel);
- validator.validateUserOp(op, keccak256(abi.encodePacked("hello")), 0);
- vm.stopPrank();
-
- assertEq(mockSigner.count(permissionId), 1);
- assertEq(mockPolicy.count(permissionId), 1);
- }
-}
-
-function _hashTypedData(bytes32 domain, bytes32 structHash) pure returns (bytes32 digest) {
- /// @solidity memory-safe-assembly
- assembly {
- // Compute the digest.
- mstore(0x00, 0x1901000000000000) // Store "\x19\x01".
- mstore(0x1a, domain) // Store the domain separator.
- mstore(0x3a, structHash) // Store the struct hash.
- digest := keccak256(0x18, 0x42)
- // Restore the part of the free memory slot that was overwritten.
- mstore(0x3a, 0)
- }
-}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 00000000..4061a53d
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4004 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@adraffy/ens-normalize@1.10.1":
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069"
+ integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==
+
+"@colors/colors@1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
+"@cspotcode/source-map-support@^0.8.0":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+ dependencies:
+ "@jridgewell/trace-mapping" "0.3.9"
+
+"@ethereumjs/rlp@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41"
+ integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==
+
+"@ethereumjs/util@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4"
+ integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==
+ dependencies:
+ "@ethereumjs/rlp" "^4.0.1"
+ ethereum-cryptography "^2.0.0"
+ micro-ftch "^0.3.1"
+
+"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
+ integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
+ dependencies:
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
+ integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/networks" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/web" "^5.7.0"
+
+"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
+ integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+
+"@ethersproject/address@5.6.1":
+ version "5.6.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d"
+ integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==
+ dependencies:
+ "@ethersproject/bignumber" "^5.6.2"
+ "@ethersproject/bytes" "^5.6.1"
+ "@ethersproject/keccak256" "^5.6.1"
+ "@ethersproject/logger" "^5.6.0"
+ "@ethersproject/rlp" "^5.6.1"
+
+"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
+ integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+
+"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
+ integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+
+"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b"
+ integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+
+"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
+ integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ bn.js "^5.2.1"
+
+"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
+ integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
+ integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+
+"@ethersproject/contracts@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e"
+ integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==
+ dependencies:
+ "@ethersproject/abi" "^5.7.0"
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+
+"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
+ integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf"
+ integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/basex" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/pbkdf2" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/wordlists" "^5.7.0"
+
+"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360"
+ integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hdnode" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/pbkdf2" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ aes-js "3.0.0"
+ scrypt-js "3.0.1"
+
+"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
+ integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ js-sha3 "0.8.0"
+
+"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
+ integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
+
+"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
+ integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102"
+ integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+
+"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
+ integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/providers@5.7.2":
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb"
+ integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/basex" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/networks" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/web" "^5.7.0"
+ bech32 "1.1.4"
+ ws "7.4.6"
+
+"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c"
+ integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
+ integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb"
+ integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ hash.js "1.1.7"
+
+"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
+ integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ bn.js "^5.2.1"
+ elliptic "6.5.4"
+ hash.js "1.1.7"
+
+"@ethersproject/solidity@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8"
+ integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
+ integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
+ integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
+ dependencies:
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+
+"@ethersproject/units@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1"
+ integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/wallet@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d"
+ integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/hdnode" "^5.7.0"
+ "@ethersproject/json-wallets" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/wordlists" "^5.7.0"
+
+"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
+ integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
+ dependencies:
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5"
+ integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@fastify/busboy@^2.0.0":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d"
+ integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==
+
+"@jridgewell/resolve-uri@^3.0.3":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@0.3.9":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@metamask/eth-sig-util@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088"
+ integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==
+ dependencies:
+ ethereumjs-abi "^0.6.8"
+ ethereumjs-util "^6.2.1"
+ ethjs-util "^0.1.6"
+ tweetnacl "^1.0.3"
+ tweetnacl-util "^0.15.1"
+
+"@noble/curves@1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35"
+ integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==
+ dependencies:
+ "@noble/hashes" "1.3.2"
+
+"@noble/curves@1.3.0", "@noble/curves@~1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e"
+ integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==
+ dependencies:
+ "@noble/hashes" "1.3.3"
+
+"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12"
+ integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==
+
+"@noble/hashes@1.3.2":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39"
+ integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==
+
+"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
+ integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
+
+"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0":
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c"
+ integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@nomicfoundation/edr-darwin-arm64@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.3.tgz#0618dbdf1c832f8e61c77540e7188c13fdd5b658"
+ integrity sha512-E9VGsUD+1Ga4mn/5ooHsMi8JEfhZbKP6CXN/BhJ8kXbIC10NqTD1RuhCKGRtYq4vqH/3Nfq25Xg8E8RWOF4KBQ==
+
+"@nomicfoundation/edr-darwin-x64@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.3.tgz#567ee0bca8d019085e8dd95330e7c03f16c66a79"
+ integrity sha512-vkZXZ1ydPg+Ijb2iyqENA+KCkxGTCUWG5itCSliiA0Li2YE7ujDMGhheEpFp1WVlZadviz0bfk1rZXbCqlirpg==
+
+"@nomicfoundation/edr-linux-arm64-gnu@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.3.tgz#3956b4d7a0127e2259351626c92698c4ce6ecf05"
+ integrity sha512-gdIg0Yj1qqS9wVuywc5B/+DqKylfUGB6/CQn/shMqwAfsAVAVpchkhy66PR+REEx7fh/GkNctxLlENXPeLzDiA==
+
+"@nomicfoundation/edr-linux-arm64-musl@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.3.tgz#139f801939ed467f1719a2ab014993838008eefb"
+ integrity sha512-AXZ08MFvhNeBZbOBNmz1SJ/DMrMOE2mHEJtaNnsctlxIunjxfrWww4q+WXB34jbr9iaVYYlPsaWe5sueuw6s3Q==
+
+"@nomicfoundation/edr-linux-x64-gnu@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.3.tgz#b5994caa1a8bb4afca5f079ad7dd99edb26c6c45"
+ integrity sha512-xElOs1U+E6lBLtv1mnJ+E8nr2MxZgKiLo8bZAgBboy9odYtmkDVwhMjtsFKSuZbGxFtsSyGRT4cXw3JAbtUDeA==
+
+"@nomicfoundation/edr-linux-x64-musl@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.3.tgz#536c1d1dfd2fc7d7ad6ed6e14ed9a12322d88ba6"
+ integrity sha512-2Fe6gwm1RAGQ/PfMYiaSba2OrFp8zzYWh+am9lYObOFjV9D+A1zhIzfy0UC74glPks5eV8eY4pBPrVR042m2Nw==
+
+"@nomicfoundation/edr-win32-arm64-msvc@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.3.tgz#f71609644d8585c2ec71580bf75c2fd036ee58b0"
+ integrity sha512-8NHyxIsFrl0ufSQ/ErqF2lKIa/gz1gaaa1a2vKkDEqvqCUcPhBTYhA5NHgTPhLETFTnCFr0z+YbctFCyjh4qrA==
+
+"@nomicfoundation/edr-win32-ia32-msvc@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.3.tgz#baa5eaacb1fff107d02f0e6a33dee9521fd2bf37"
+ integrity sha512-0F6hM0kGia4dQVb/kauho9JcP1ozWisY2/She+ISR5ceuhzmAwQJluM0g+0TYDME0LtxBxiMPq/yPiZMQeq31w==
+
+"@nomicfoundation/edr-win32-x64-msvc@0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.3.tgz#7562e061b2481f87bb1ace30513a2ad38c469836"
+ integrity sha512-d75q1uaMb6z9i+GQZoblbOfFBvlBnWc+5rB13UWRkCOJSnoYwyFWhGJx5GeM59gC7aIblc5VD9qOAhHuvM9N+w==
+
+"@nomicfoundation/edr@^0.3.1":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.3.tgz#0ed8619ea2ac644bf87cdc09dd1a8f465a859bcc"
+ integrity sha512-zP+e+3B1nEUx6bW5BPnIzCQbkhmYfdMBJdiVggTqqTfAA82sOkdOG7wsOMcz5qF3fYfx/irNRM1kgc9HVFIbpQ==
+ optionalDependencies:
+ "@nomicfoundation/edr-darwin-arm64" "0.3.3"
+ "@nomicfoundation/edr-darwin-x64" "0.3.3"
+ "@nomicfoundation/edr-linux-arm64-gnu" "0.3.3"
+ "@nomicfoundation/edr-linux-arm64-musl" "0.3.3"
+ "@nomicfoundation/edr-linux-x64-gnu" "0.3.3"
+ "@nomicfoundation/edr-linux-x64-musl" "0.3.3"
+ "@nomicfoundation/edr-win32-arm64-msvc" "0.3.3"
+ "@nomicfoundation/edr-win32-ia32-msvc" "0.3.3"
+ "@nomicfoundation/edr-win32-x64-msvc" "0.3.3"
+
+"@nomicfoundation/ethereumjs-common@4.0.4":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb"
+ integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==
+ dependencies:
+ "@nomicfoundation/ethereumjs-util" "9.0.4"
+
+"@nomicfoundation/ethereumjs-rlp@5.0.4":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30"
+ integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==
+
+"@nomicfoundation/ethereumjs-tx@5.0.4":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da"
+ integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==
+ dependencies:
+ "@nomicfoundation/ethereumjs-common" "4.0.4"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.4"
+ "@nomicfoundation/ethereumjs-util" "9.0.4"
+ ethereum-cryptography "0.1.3"
+
+"@nomicfoundation/ethereumjs-util@9.0.4":
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38"
+ integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==
+ dependencies:
+ "@nomicfoundation/ethereumjs-rlp" "5.0.4"
+ ethereum-cryptography "0.1.3"
+
+"@nomicfoundation/hardhat-chai-matchers@^2.0.0":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.6.tgz#ef88be3bd666adf29c06ac7882e96c8dbaaa32ba"
+ integrity sha512-Te1Uyo9oJcTCF0Jy9dztaLpshmlpjLf2yPtWXlXuLjMt3RRSmJLm/+rKVTW6gfadAEs12U/it6D0ZRnnRGiICQ==
+ dependencies:
+ "@types/chai-as-promised" "^7.1.3"
+ chai-as-promised "^7.1.1"
+ deep-eql "^4.0.1"
+ ordinal "^1.0.3"
+
+"@nomicfoundation/hardhat-ethers@^3.0.0":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz#0422c2123dec7c42e7fb2be8e1691f1d9708db56"
+ integrity sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==
+ dependencies:
+ debug "^4.1.1"
+ lodash.isequal "^4.5.0"
+
+"@nomicfoundation/hardhat-foundry@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.1.1.tgz#db72b1f33f9cfaecc27e67f69ad436f8710162d6"
+ integrity sha512-cXGCBHAiXas9Pg9MhMOpBVQCkWRYoRFG7GJJAph+sdQsfd22iRs5U5Vs9XmpGEQd1yEvYISQZMeE68Nxj65iUQ==
+ dependencies:
+ chalk "^2.4.2"
+
+"@nomicfoundation/hardhat-ignition-ethers@^0.15.0":
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.0.tgz#d59bffe8930baf845afa083ca55885096862a6fd"
+ integrity sha512-KmMNUc/jptfwdPA9ukQf+Ajon+m2vLBjDL2ze7d/vQdrS+fDxmoVwmbbEk4GOjianZcwgQOWD9dEWaj04QiowA==
+
+"@nomicfoundation/hardhat-ignition@^0.15.0":
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.0.tgz#f5c01f311d54b44764c2c99d4766b82f2d9d49ad"
+ integrity sha512-GbAe90O22uM67U/JnffXX+mBMn0HqCKSH+D98Tb5uWqR1N/M00cB3yY8OdqzVai7I6SuIKTc91mPdvtWt8R3MA==
+ dependencies:
+ "@nomicfoundation/ignition-core" "^0.15.0"
+ "@nomicfoundation/ignition-ui" "^0.15.0"
+ chalk "^4.0.0"
+ debug "^4.3.2"
+ fs-extra "^10.0.0"
+ prompts "^2.4.2"
+
+"@nomicfoundation/hardhat-network-helpers@^1.0.0":
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.10.tgz#c61042ceb104fdd6c10017859fdef6529c1d6585"
+ integrity sha512-R35/BMBlx7tWN5V6d/8/19QCwEmIdbnA4ZrsuXgvs8i2qFx5i7h6mH5pBS4Pwi4WigLH+upl6faYusrNPuzMrQ==
+ dependencies:
+ ethereumjs-util "^7.1.4"
+
+"@nomicfoundation/hardhat-toolbox@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz#165b47f8a3d2bf668cc5d453ce7f496a1156948d"
+ integrity sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==
+
+"@nomicfoundation/hardhat-verify@^2.0.0":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz#dcc2cb5e5c55a39704c7d492436f80f05a4ca5a3"
+ integrity sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA==
+ dependencies:
+ "@ethersproject/abi" "^5.1.2"
+ "@ethersproject/address" "^5.0.2"
+ cbor "^8.1.0"
+ chalk "^2.4.2"
+ debug "^4.1.1"
+ lodash.clonedeep "^4.5.0"
+ semver "^6.3.0"
+ table "^6.8.0"
+ undici "^5.14.0"
+
+"@nomicfoundation/ignition-core@^0.15.0":
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-core/-/ignition-core-0.15.0.tgz#28ad7da61d4c1e50d6ead09e8c92881b59c176cf"
+ integrity sha512-d/h8jgJHY4xIroHqdaGeTkTqjQeuzmU759AOn1Fg88cuxVhS7JM22ZI0bQWyLNSMsVstHBIo+lSMIsvm9jBF2w==
+ dependencies:
+ "@ethersproject/address" "5.6.1"
+ cbor "^9.0.0"
+ debug "^4.3.2"
+ ethers "^6.7.0"
+ fs-extra "^10.0.0"
+ immer "10.0.2"
+ lodash "4.17.21"
+ ndjson "2.0.0"
+
+"@nomicfoundation/ignition-ui@^0.15.0":
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.0.tgz#0c1bd3e0d673fe44a48a5a30b8f43f7d8395b8ff"
+ integrity sha512-RBvvQ0e8RcEc/LoSzNTPVKZZ5vEwlmxt7PXG278+6DqCrOqxqmh6W9PtK/4mwwvnTeBqds+8j81jDf6vJbOVBQ==
+
+"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15"
+ integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==
+
+"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c"
+ integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==
+
+"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c"
+ integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==
+
+"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b"
+ integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==
+
+"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4"
+ integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==
+
+"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893"
+ integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==
+
+"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb"
+ integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==
+
+"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f"
+ integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==
+
+"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585"
+ integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==
+
+"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836"
+ integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==
+
+"@nomicfoundation/solidity-analyzer@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d"
+ integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==
+ optionalDependencies:
+ "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1"
+
+"@scure/base@~1.1.0", "@scure/base@~1.1.4":
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d"
+ integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==
+
+"@scure/bip32@1.1.5":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300"
+ integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==
+ dependencies:
+ "@noble/hashes" "~1.2.0"
+ "@noble/secp256k1" "~1.7.0"
+ "@scure/base" "~1.1.0"
+
+"@scure/bip32@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8"
+ integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==
+ dependencies:
+ "@noble/curves" "~1.3.0"
+ "@noble/hashes" "~1.3.2"
+ "@scure/base" "~1.1.4"
+
+"@scure/bip39@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5"
+ integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==
+ dependencies:
+ "@noble/hashes" "~1.2.0"
+ "@scure/base" "~1.1.0"
+
+"@scure/bip39@1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527"
+ integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==
+ dependencies:
+ "@noble/hashes" "~1.3.2"
+ "@scure/base" "~1.1.4"
+
+"@sentry/core@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3"
+ integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==
+ dependencies:
+ "@sentry/hub" "5.30.0"
+ "@sentry/minimal" "5.30.0"
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/hub@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100"
+ integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==
+ dependencies:
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/minimal@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b"
+ integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==
+ dependencies:
+ "@sentry/hub" "5.30.0"
+ "@sentry/types" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/node@^5.18.1":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48"
+ integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==
+ dependencies:
+ "@sentry/core" "5.30.0"
+ "@sentry/hub" "5.30.0"
+ "@sentry/tracing" "5.30.0"
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ cookie "^0.4.1"
+ https-proxy-agent "^5.0.0"
+ lru_map "^0.3.3"
+ tslib "^1.9.3"
+
+"@sentry/tracing@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f"
+ integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==
+ dependencies:
+ "@sentry/hub" "5.30.0"
+ "@sentry/minimal" "5.30.0"
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/types@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402"
+ integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==
+
+"@sentry/utils@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980"
+ integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==
+ dependencies:
+ "@sentry/types" "5.30.0"
+ tslib "^1.9.3"
+
+"@solidity-parser/parser@^0.14.0":
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804"
+ integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==
+ dependencies:
+ antlr4ts "^0.5.0-alpha.4"
+
+"@solidity-parser/parser@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908"
+ integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==
+
+"@tsconfig/node10@^1.0.7":
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"
+ integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==
+
+"@tsconfig/node12@^1.0.7":
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+ integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
+
+"@tsconfig/node14@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
+
+"@tsconfig/node16@^1.0.2":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
+ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+
+"@typechain/ethers-v6@^0.5.0":
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz#42fe214a19a8b687086c93189b301e2b878797ea"
+ integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==
+ dependencies:
+ lodash "^4.17.15"
+ ts-essentials "^7.0.1"
+
+"@typechain/hardhat@^9.0.0":
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc"
+ integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==
+ dependencies:
+ fs-extra "^9.1.0"
+
+"@types/bn.js@^4.11.3":
+ version "4.11.6"
+ resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
+ integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/bn.js@^5.1.0":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0"
+ integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==
+ dependencies:
+ "@types/node" "*"
+
+"@types/chai-as-promised@^7.1.3":
+ version "7.1.8"
+ resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9"
+ integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@4":
+ version "4.3.14"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6"
+ integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==
+
+"@types/concat-stream@^1.6.0":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74"
+ integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/form-data@0.0.33":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8"
+ integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/glob@^7.1.1":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
+ integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/lru-cache@^5.1.0":
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef"
+ integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==
+
+"@types/minimatch@*":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
+ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
+
+"@types/mocha@^10.0.6":
+ version "10.0.6"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b"
+ integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==
+
+"@types/node@*", "@types/node@^20.12.5":
+ version "20.12.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3"
+ integrity sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/node@18.15.13":
+ version "18.15.13"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469"
+ integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==
+
+"@types/node@^10.0.3":
+ version "10.17.60"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b"
+ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==
+
+"@types/node@^8.0.0":
+ version "8.10.66"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3"
+ integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==
+
+"@types/pbkdf2@^3.0.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc"
+ integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==
+ dependencies:
+ "@types/node" "*"
+
+"@types/prettier@^2.1.1":
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
+ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
+
+"@types/qs@^6.2.31":
+ version "6.9.14"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b"
+ integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==
+
+"@types/secp256k1@^4.0.1":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf"
+ integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==
+ dependencies:
+ "@types/node" "*"
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abbrev@1.0.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==
+
+acorn-walk@^8.1.1:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+ integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
+
+acorn@^8.4.1:
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
+adm-zip@^0.4.16:
+ version "0.4.16"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
+ integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==
+
+aes-js@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
+ integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
+
+aes-js@4.0.0-beta.5:
+ version "4.0.0-beta.5"
+ resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873"
+ integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv@^8.0.1:
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
+ integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==
+
+ansi-align@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
+ integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
+ dependencies:
+ string-width "^4.1.0"
+
+ansi-colors@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-colors@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+ansi-escapes@^4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-regex@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1"
+ integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+antlr4ts@^0.5.0-alpha.4:
+ version "0.5.0-alpha.4"
+ resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a"
+ integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-back@^3.0.1, array-back@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0"
+ integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==
+
+array-back@^4.0.1, array-back@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e"
+ integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==
+
+asap@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
+
+assertion-error@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+ integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async@1.x:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+axios@^1.5.1:
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
+ integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base-x@^3.0.2:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"
+ integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+bech32@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
+ integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
+
+binary-extensions@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+blakejs@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814"
+ integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==
+
+bn.js@4.11.6:
+ version "4.11.6"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
+ integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==
+
+bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
+ integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
+
+boxen@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50"
+ integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^6.2.0"
+ chalk "^4.1.0"
+ cli-boxes "^2.2.1"
+ string-width "^4.2.2"
+ type-fest "^0.20.2"
+ widest-line "^3.1.0"
+ wrap-ansi "^7.0.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
+browserify-aes@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+bs58@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
+ integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==
+ dependencies:
+ base-x "^3.0.2"
+
+bs58check@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
+ integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
+ dependencies:
+ bs58 "^4.0.0"
+ create-hash "^1.1.0"
+ safe-buffer "^5.1.2"
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
+
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+call-bind@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
+ integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ set-function-length "^1.2.1"
+
+camelcase@^6.0.0, camelcase@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caseless@^0.12.0, caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
+cbor@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5"
+ integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==
+ dependencies:
+ nofilter "^3.1.0"
+
+cbor@^9.0.0:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb"
+ integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==
+ dependencies:
+ nofilter "^3.1.0"
+
+chai-as-promised@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
+ integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==
+ dependencies:
+ check-error "^1.0.2"
+
+chai@4:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1"
+ integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==
+ dependencies:
+ assertion-error "^1.1.0"
+ check-error "^1.0.3"
+ deep-eql "^4.1.3"
+ get-func-name "^2.0.2"
+ loupe "^2.3.6"
+ pathval "^1.1.1"
+ type-detect "^4.0.8"
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+"charenc@>= 0.0.1":
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
+
+check-error@^1.0.2, check-error@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694"
+ integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==
+ dependencies:
+ get-func-name "^2.0.2"
+
+chokidar@3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chokidar@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-boxes@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
+ integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+
+cli-table3@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
+ integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==
+ dependencies:
+ object-assign "^4.1.0"
+ string-width "^2.1.1"
+ optionalDependencies:
+ colors "^1.1.2"
+
+cli-table3@^0.6.0:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0"
+ integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==
+ dependencies:
+ string-width "^4.2.0"
+ optionalDependencies:
+ "@colors/colors" "1.5.0"
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colors@1.4.0, colors@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+command-exists@^1.2.8:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
+ integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
+
+command-line-args@^5.1.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e"
+ integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==
+ dependencies:
+ array-back "^3.1.0"
+ find-replace "^3.0.0"
+ lodash.camelcase "^4.3.0"
+ typical "^4.0.0"
+
+command-line-usage@^6.1.0:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957"
+ integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==
+ dependencies:
+ array-back "^4.0.2"
+ chalk "^2.4.2"
+ table-layout "^1.0.2"
+ typical "^5.2.0"
+
+commander@3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
+ integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+concat-stream@^1.6.0, concat-stream@^1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+cookie@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+ integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+"crypt@>= 0.0.1":
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
+death@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318"
+ integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==
+
+debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+
+deep-eql@^4.0.1, deep-eql@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
+ integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
+ dependencies:
+ type-detect "^4.0.0"
+
+deep-extend@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+depd@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+diff@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
+ integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
+
+diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+difflib@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e"
+ integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==
+ dependencies:
+ heap ">= 0.2.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+elliptic@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
+elliptic@^6.5.2, elliptic@^6.5.4:
+ version "6.5.5"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded"
+ integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+enquirer@^2.3.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56"
+ integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
+ dependencies:
+ ansi-colors "^4.1.1"
+ strip-ansi "^6.0.1"
+
+env-paths@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+es-define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+ integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-string-regexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escodegen@1.8.x:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+esprima@2.7.x, esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+ integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eth-gas-reporter@^0.2.25:
+ version "0.2.27"
+ resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e"
+ integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==
+ dependencies:
+ "@solidity-parser/parser" "^0.14.0"
+ axios "^1.5.1"
+ cli-table3 "^0.5.0"
+ colors "1.4.0"
+ ethereum-cryptography "^1.0.3"
+ ethers "^5.7.2"
+ fs-readdir-recursive "^1.1.0"
+ lodash "^4.17.14"
+ markdown-table "^1.1.3"
+ mocha "^10.2.0"
+ req-cwd "^2.0.0"
+ sha1 "^1.1.1"
+ sync-request "^6.0.0"
+
+ethereum-bloom-filters@^1.0.6:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a"
+ integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==
+ dependencies:
+ js-sha3 "^0.8.0"
+
+ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191"
+ integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==
+ dependencies:
+ "@types/pbkdf2" "^3.0.0"
+ "@types/secp256k1" "^4.0.1"
+ blakejs "^1.1.0"
+ browserify-aes "^1.2.0"
+ bs58check "^2.1.2"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ hash.js "^1.1.7"
+ keccak "^3.0.0"
+ pbkdf2 "^3.0.17"
+ randombytes "^2.1.0"
+ safe-buffer "^5.1.2"
+ scrypt-js "^3.0.0"
+ secp256k1 "^4.0.1"
+ setimmediate "^1.0.5"
+
+ethereum-cryptography@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a"
+ integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==
+ dependencies:
+ "@noble/hashes" "1.2.0"
+ "@noble/secp256k1" "1.7.1"
+ "@scure/bip32" "1.1.5"
+ "@scure/bip39" "1.1.1"
+
+ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a"
+ integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==
+ dependencies:
+ "@noble/curves" "1.3.0"
+ "@noble/hashes" "1.3.3"
+ "@scure/bip32" "1.3.3"
+ "@scure/bip39" "1.2.2"
+
+ethereumjs-abi@^0.6.8:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae"
+ integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==
+ dependencies:
+ bn.js "^4.11.8"
+ ethereumjs-util "^6.0.0"
+
+ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69"
+ integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==
+ dependencies:
+ "@types/bn.js" "^4.11.3"
+ bn.js "^4.11.0"
+ create-hash "^1.1.2"
+ elliptic "^6.5.2"
+ ethereum-cryptography "^0.1.3"
+ ethjs-util "0.1.6"
+ rlp "^2.2.3"
+
+ethereumjs-util@^7.1.4:
+ version "7.1.5"
+ resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181"
+ integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==
+ dependencies:
+ "@types/bn.js" "^5.1.0"
+ bn.js "^5.1.2"
+ create-hash "^1.1.2"
+ ethereum-cryptography "^0.1.3"
+ rlp "^2.2.4"
+
+ethers@^5.7.2:
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
+ integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
+ dependencies:
+ "@ethersproject/abi" "5.7.0"
+ "@ethersproject/abstract-provider" "5.7.0"
+ "@ethersproject/abstract-signer" "5.7.0"
+ "@ethersproject/address" "5.7.0"
+ "@ethersproject/base64" "5.7.0"
+ "@ethersproject/basex" "5.7.0"
+ "@ethersproject/bignumber" "5.7.0"
+ "@ethersproject/bytes" "5.7.0"
+ "@ethersproject/constants" "5.7.0"
+ "@ethersproject/contracts" "5.7.0"
+ "@ethersproject/hash" "5.7.0"
+ "@ethersproject/hdnode" "5.7.0"
+ "@ethersproject/json-wallets" "5.7.0"
+ "@ethersproject/keccak256" "5.7.0"
+ "@ethersproject/logger" "5.7.0"
+ "@ethersproject/networks" "5.7.1"
+ "@ethersproject/pbkdf2" "5.7.0"
+ "@ethersproject/properties" "5.7.0"
+ "@ethersproject/providers" "5.7.2"
+ "@ethersproject/random" "5.7.0"
+ "@ethersproject/rlp" "5.7.0"
+ "@ethersproject/sha2" "5.7.0"
+ "@ethersproject/signing-key" "5.7.0"
+ "@ethersproject/solidity" "5.7.0"
+ "@ethersproject/strings" "5.7.0"
+ "@ethersproject/transactions" "5.7.0"
+ "@ethersproject/units" "5.7.0"
+ "@ethersproject/wallet" "5.7.0"
+ "@ethersproject/web" "5.7.1"
+ "@ethersproject/wordlists" "5.7.0"
+
+ethers@^6.4.0, ethers@^6.7.0:
+ version "6.11.1"
+ resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af"
+ integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==
+ dependencies:
+ "@adraffy/ens-normalize" "1.10.1"
+ "@noble/curves" "1.2.0"
+ "@noble/hashes" "1.3.2"
+ "@types/node" "18.15.13"
+ aes-js "4.0.0-beta.5"
+ tslib "2.4.0"
+ ws "8.5.0"
+
+ethjs-unit@0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699"
+ integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==
+ dependencies:
+ bn.js "4.11.6"
+ number-to-bn "1.7.0"
+
+ethjs-util@0.1.6, ethjs-util@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536"
+ integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==
+ dependencies:
+ is-hex-prefixed "1.0.0"
+ strip-hex-prefix "1.0.0"
+
+evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.0.3:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ dependencies:
+ reusify "^1.0.4"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-replace@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38"
+ integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==
+ dependencies:
+ array-back "^3.0.1"
+
+find-up@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
+ dependencies:
+ locate-path "^2.0.0"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+follow-redirects@^1.12.1, follow-redirects@^1.15.6:
+ version "1.15.6"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
+
+form-data@^2.2.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"
+ integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+fp-ts@1.19.3:
+ version "1.19.3"
+ resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f"
+ integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==
+
+fp-ts@^1.0.0:
+ version "1.19.5"
+ resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a"
+ integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==
+
+fs-extra@^0.30.0:
+ version "0.30.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
+ integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+ path-is-absolute "^1.0.0"
+ rimraf "^2.2.8"
+
+fs-extra@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^7.0.0, fs-extra@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-readdir-recursive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
+ integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-func-name@^2.0.1, get-func-name@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41"
+ integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==
+
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+ integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ hasown "^2.0.0"
+
+get-port@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc"
+ integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==
+
+ghost-testrpc@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92"
+ integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==
+ dependencies:
+ chalk "^2.4.2"
+ node-emoji "^1.10.0"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@7.1.7:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+ integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
+ integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^5.0.1"
+ once "^1.3.0"
+
+glob@^5.0.15:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globby@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
+ integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+handlebars@^4.0.1:
+ version "4.7.8"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
+ integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==
+ dependencies:
+ minimist "^1.2.5"
+ neo-async "^2.6.2"
+ source-map "^0.6.1"
+ wordwrap "^1.0.0"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+hardhat-contract-sizer@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz#72646f43bfe50e9a5702c9720c9bc3e77d93a2c9"
+ integrity sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==
+ dependencies:
+ chalk "^4.0.0"
+ cli-table3 "^0.6.0"
+ strip-ansi "^6.0.0"
+
+hardhat-gas-reporter@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b"
+ integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==
+ dependencies:
+ array-uniq "1.0.3"
+ eth-gas-reporter "^0.2.25"
+ sha1 "^1.1.1"
+
+hardhat-spdx-license-identifier@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.2.0.tgz#af6fa4de88b822dbcb62b085e4d9d2156b20af27"
+ integrity sha512-audxGrmLL/TGr0Ef/p3tEH8frtygCb+9RWbMQtd1w2p5V6HzQsSJUlAJFywZZ/igQ6B1qAKqAbeLePNclEe2Qw==
+
+hardhat@^2.22.2:
+ version "2.22.2"
+ resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d"
+ integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw==
+ dependencies:
+ "@ethersproject/abi" "^5.1.2"
+ "@metamask/eth-sig-util" "^4.0.0"
+ "@nomicfoundation/edr" "^0.3.1"
+ "@nomicfoundation/ethereumjs-common" "4.0.4"
+ "@nomicfoundation/ethereumjs-tx" "5.0.4"
+ "@nomicfoundation/ethereumjs-util" "9.0.4"
+ "@nomicfoundation/solidity-analyzer" "^0.1.0"
+ "@sentry/node" "^5.18.1"
+ "@types/bn.js" "^5.1.0"
+ "@types/lru-cache" "^5.1.0"
+ adm-zip "^0.4.16"
+ aggregate-error "^3.0.0"
+ ansi-escapes "^4.3.0"
+ boxen "^5.1.2"
+ chalk "^2.4.2"
+ chokidar "^3.4.0"
+ ci-info "^2.0.0"
+ debug "^4.1.1"
+ enquirer "^2.3.0"
+ env-paths "^2.2.0"
+ ethereum-cryptography "^1.0.3"
+ ethereumjs-abi "^0.6.8"
+ find-up "^2.1.0"
+ fp-ts "1.19.3"
+ fs-extra "^7.0.1"
+ glob "7.2.0"
+ immutable "^4.0.0-rc.12"
+ io-ts "1.10.4"
+ keccak "^3.0.2"
+ lodash "^4.17.11"
+ mnemonist "^0.38.0"
+ mocha "^10.0.0"
+ p-map "^4.0.0"
+ raw-body "^2.4.1"
+ resolve "1.17.0"
+ semver "^6.3.0"
+ solc "0.7.3"
+ source-map-support "^0.5.13"
+ stacktrace-parser "^0.1.10"
+ tsort "0.0.1"
+ undici "^5.14.0"
+ uuid "^8.3.2"
+ ws "^7.4.6"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+ integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+
+has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hasown@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+he@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+"heap@>= 0.2.0":
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc"
+ integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==
+
+hmac-drbg@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+http-basic@^8.1.1:
+ version "8.1.3"
+ resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf"
+ integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==
+ dependencies:
+ caseless "^0.12.0"
+ concat-stream "^1.6.2"
+ http-response-object "^3.0.1"
+ parse-cache-control "^1.0.1"
+
+http-errors@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+ dependencies:
+ depd "2.0.0"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ toidentifier "1.0.1"
+
+http-response-object@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810"
+ integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==
+ dependencies:
+ "@types/node" "^10.0.3"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ignore@^5.1.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+
+immer@10.0.2:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.2.tgz#11636c5b77acf529e059582d76faf338beb56141"
+ integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==
+
+immutable@^4.0.0-rc.12:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0"
+ integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@^1.3.5:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+interpret@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+io-ts@1.10.4:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2"
+ integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==
+ dependencies:
+ fp-ts "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-core-module@^2.13.0:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-hex-prefixed@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"
+ integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+js-sha3@0.8.0, js-sha3@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
+ integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
+
+js-yaml@3.x:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-stringify-safe@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonschema@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab"
+ integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==
+
+keccak@^3.0.0, keccak@^3.0.2:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d"
+ integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==
+ dependencies:
+ node-addon-api "^2.0.0"
+ node-gyp-build "^4.2.0"
+ readable-stream "^3.6.0"
+
+kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
+
+lodash.truncate@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
+ integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
+
+lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+loupe@^2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697"
+ integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==
+ dependencies:
+ get-func-name "^2.0.1"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+lru_map@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+ integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+make-error@^1.1.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+markdown-table@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60"
+ integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+memorystream@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
+ integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==
+
+merge2@^1.2.3, merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micro-ftch@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f"
+ integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
+
+"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
+ integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^5.0.1:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+ integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.5, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+mkdirp@0.5.x:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+ integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+ dependencies:
+ minimist "^1.2.6"
+
+mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+mnemonist@^0.38.0:
+ version "0.38.5"
+ resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade"
+ integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==
+ dependencies:
+ obliterator "^2.0.0"
+
+mocha@^10.0.0, mocha@^10.2.0:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261"
+ integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==
+ dependencies:
+ ansi-colors "4.1.1"
+ browser-stdout "1.3.1"
+ chokidar "3.5.3"
+ debug "4.3.4"
+ diff "5.0.0"
+ escape-string-regexp "4.0.0"
+ find-up "5.0.0"
+ glob "8.1.0"
+ he "1.2.0"
+ js-yaml "4.1.0"
+ log-symbols "4.1.0"
+ minimatch "5.0.1"
+ ms "2.1.3"
+ serialize-javascript "6.0.0"
+ strip-json-comments "3.1.1"
+ supports-color "8.1.1"
+ workerpool "6.2.1"
+ yargs "16.2.0"
+ yargs-parser "20.2.4"
+ yargs-unparser "2.0.0"
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+ndjson@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-2.0.0.tgz#320ac86f6fe53f5681897349b86ac6f43bfa3a19"
+ integrity sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==
+ dependencies:
+ json-stringify-safe "^5.0.1"
+ minimist "^1.2.5"
+ readable-stream "^3.6.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+node-addon-api@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
+ integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
+
+node-emoji@^1.10.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c"
+ integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==
+ dependencies:
+ lodash "^4.17.21"
+
+node-gyp-build@^4.2.0:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd"
+ integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==
+
+nofilter@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66"
+ integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==
+
+nopt@3.x:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==
+ dependencies:
+ abbrev "1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+number-to-bn@1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0"
+ integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==
+ dependencies:
+ bn.js "4.11.6"
+ strip-hex-prefix "1.0.0"
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-inspect@^1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+ integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
+
+obliterator@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816"
+ integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==
+
+once@1.x, once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+ordinal@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d"
+ integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
+
+parse-cache-control@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e"
+ integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-parse@^1.0.6, path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pathval@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
+ integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
+
+pbkdf2@^3.0.17:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+ integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
+prettier@^2.3.1:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
+ integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+promise@^8.0.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a"
+ integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==
+ dependencies:
+ asap "~2.0.6"
+
+prompts@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+qs@^6.4.0:
+ version "6.12.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77"
+ integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==
+ dependencies:
+ side-channel "^1.0.6"
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+raw-body@^2.4.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@^2.2.2:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
+ dependencies:
+ resolve "^1.1.6"
+
+recursive-readdir@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372"
+ integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==
+ dependencies:
+ minimatch "^3.0.5"
+
+reduce-flatten@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27"
+ integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==
+
+req-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc"
+ integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==
+ dependencies:
+ req-from "^2.0.0"
+
+req-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70"
+ integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==
+ dependencies:
+ resolve-from "^3.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.0, require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
+
+resolve@1.1.x:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==
+
+resolve@1.17.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+ dependencies:
+ path-parse "^1.0.6"
+
+resolve@^1.1.6:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^2.2.8:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rlp@^2.2.3, rlp@^2.2.4:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf"
+ integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==
+ dependencies:
+ bn.js "^5.2.0"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sc-istanbul@^0.4.5:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839"
+ integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==
+ dependencies:
+ abbrev "1.0.x"
+ async "1.x"
+ escodegen "1.8.x"
+ esprima "2.7.x"
+ glob "^5.0.15"
+ handlebars "^4.0.1"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ nopt "3.x"
+ once "1.x"
+ resolve "1.1.x"
+ supports-color "^3.1.0"
+ which "^1.1.1"
+ wordwrap "^1.0.0"
+
+scrypt-js@3.0.1, scrypt-js@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
+ integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
+
+secp256k1@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303"
+ integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==
+ dependencies:
+ elliptic "^6.5.4"
+ node-addon-api "^2.0.0"
+ node-gyp-build "^4.2.0"
+
+semver@^5.5.0:
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+ integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.3.0:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.4:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+serialize-javascript@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+ integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
+ dependencies:
+ randombytes "^2.1.0"
+
+set-function-length@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.2"
+
+setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+sha1@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848"
+ integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==
+ dependencies:
+ charenc ">= 0.0.1"
+ crypt ">= 0.0.1"
+
+shelljs@^0.8.3:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
+ integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+side-channel@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
+ integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
+ dependencies:
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ object-inspect "^1.13.1"
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+solc@0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a"
+ integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==
+ dependencies:
+ command-exists "^1.2.8"
+ commander "3.0.2"
+ follow-redirects "^1.12.1"
+ fs-extra "^0.30.0"
+ js-sha3 "0.8.0"
+ memorystream "^0.3.1"
+ require-from-string "^2.0.0"
+ semver "^5.5.0"
+ tmp "0.0.33"
+
+solidity-coverage@^0.8.1:
+ version "0.8.12"
+ resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.12.tgz#c4fa2f64eff8ada7a1387b235d6b5b0e6c6985ed"
+ integrity sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==
+ dependencies:
+ "@ethersproject/abi" "^5.0.9"
+ "@solidity-parser/parser" "^0.18.0"
+ chalk "^2.4.2"
+ death "^1.1.0"
+ difflib "^0.2.4"
+ fs-extra "^8.1.0"
+ ghost-testrpc "^0.0.2"
+ global-modules "^2.0.0"
+ globby "^10.0.1"
+ jsonschema "^1.2.4"
+ lodash "^4.17.21"
+ mocha "^10.2.0"
+ node-emoji "^1.10.0"
+ pify "^4.0.1"
+ recursive-readdir "^2.2.2"
+ sc-istanbul "^0.4.5"
+ semver "^7.3.4"
+ shelljs "^0.8.3"
+ web3-utils "^1.3.6"
+
+source-map-support@^0.5.13:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==
+ dependencies:
+ amdefine ">=0.0.4"
+
+split2@^3.0.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
+ integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
+ dependencies:
+ readable-stream "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+stacktrace-parser@^0.1.10:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
+ integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
+ dependencies:
+ type-fest "^0.7.1"
+
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+string-format@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b"
+ integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==
+
+string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-hex-prefix@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
+ integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==
+ dependencies:
+ is-hex-prefixed "1.0.0"
+
+strip-json-comments@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^3.1.0:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+sync-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68"
+ integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==
+ dependencies:
+ http-response-object "^3.0.1"
+ sync-rpc "^1.2.1"
+ then-request "^6.0.0"
+
+sync-rpc@^1.2.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7"
+ integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==
+ dependencies:
+ get-port "^3.1.0"
+
+table-layout@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04"
+ integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==
+ dependencies:
+ array-back "^4.0.1"
+ deep-extend "~0.6.0"
+ typical "^5.2.0"
+ wordwrapjs "^4.0.0"
+
+table@^6.8.0:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58"
+ integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==
+ dependencies:
+ ajv "^8.0.1"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+
+then-request@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c"
+ integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==
+ dependencies:
+ "@types/concat-stream" "^1.6.0"
+ "@types/form-data" "0.0.33"
+ "@types/node" "^8.0.0"
+ "@types/qs" "^6.2.31"
+ caseless "~0.12.0"
+ concat-stream "^1.6.0"
+ form-data "^2.2.0"
+ http-basic "^8.1.1"
+ http-response-object "^3.0.1"
+ promise "^8.0.0"
+ qs "^6.4.0"
+
+through2@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
+ integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
+ dependencies:
+ readable-stream "3"
+
+tmp@0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+ts-command-line-args@^2.2.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0"
+ integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==
+ dependencies:
+ chalk "^4.1.0"
+ command-line-args "^5.1.1"
+ command-line-usage "^6.1.0"
+ string-format "^2.0.0"
+
+ts-essentials@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38"
+ integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==
+
+ts-node@^10.9.2:
+ version "10.9.2"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
+ integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
+ dependencies:
+ "@cspotcode/source-map-support" "^0.8.0"
+ "@tsconfig/node10" "^1.0.7"
+ "@tsconfig/node12" "^1.0.7"
+ "@tsconfig/node14" "^1.0.0"
+ "@tsconfig/node16" "^1.0.2"
+ acorn "^8.4.1"
+ acorn-walk "^8.1.1"
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ v8-compile-cache-lib "^3.0.1"
+ yn "3.1.1"
+
+tslib@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
+ integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+
+tslib@^1.9.3:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tsort@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786"
+ integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==
+
+tweetnacl-util@^0.15.1:
+ version "0.15.1"
+ resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b"
+ integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==
+
+tweetnacl@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
+ integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@^4.0.0, type-detect@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-fest@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
+ integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
+
+typechain@^8.3.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73"
+ integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==
+ dependencies:
+ "@types/prettier" "^2.1.1"
+ debug "^4.3.1"
+ fs-extra "^7.0.0"
+ glob "7.1.7"
+ js-sha3 "^0.8.0"
+ lodash "^4.17.15"
+ mkdirp "^1.0.4"
+ prettier "^2.3.1"
+ ts-command-line-args "^2.2.0"
+ ts-essentials "^7.0.1"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
+typescript@^5.4.4:
+ version "5.4.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952"
+ integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==
+
+typical@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4"
+ integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==
+
+typical@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066"
+ integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==
+
+uglify-js@^3.1.4:
+ version "3.17.4"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
+ integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+undici@^5.14.0:
+ version "5.28.4"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068"
+ integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==
+ dependencies:
+ "@fastify/busboy" "^2.0.0"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
+unpipe@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+utf8@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
+ integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-compile-cache-lib@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
+ integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
+web3-utils@^1.3.6:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec"
+ integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==
+ dependencies:
+ "@ethereumjs/util" "^8.1.0"
+ bn.js "^5.2.1"
+ ethereum-bloom-filters "^1.0.6"
+ ethereum-cryptography "^2.1.2"
+ ethjs-unit "0.1.6"
+ number-to-bn "1.7.0"
+ randombytes "^2.1.0"
+ utf8 "3.0.0"
+
+which@^1.1.1, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
+word-wrap@~1.2.3:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+wordwrap@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
+
+wordwrapjs@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f"
+ integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==
+ dependencies:
+ reduce-flatten "^2.0.0"
+ typical "^5.2.0"
+
+workerpool@6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
+ integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@7.4.6:
+ version "7.4.6"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
+ integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
+
+ws@8.5.0:
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
+ integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
+
+ws@^7.4.6:
+ version "7.5.9"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+ integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@20.2.4:
+ version "20.2.4"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
+ integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
+
+yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs-unparser@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==